/*
	Antenna House PDF Tool API V7.0
	C++ Interface sample program

	概要：リンク注釈の作成

	Copyright 2013-2021 Antenna House, Inc.
*/

#include < PdfTk.h >
#include < stdio.h >

using namespace PdfTk;

void addAnnotLink(PtlPages& pages, PtlPage& page, char actionKind);
void setAction(PtlPages& pages, PtlAnnotLink& annotlink, char actionKind);

int main(int argc, char* argv[])
{
	if (argc < 4) {
		printf("usage: AppendAnnotLink.exe in-pdf-file out-pdf-file アクションの種類\n\n");
		printf("アクションの種類\n0 : GOTOアクションの設定\n1 : GOTORアクションの設定\n2 : Launchアクションの設定\n3 : URIアクションの設定\n");
		return 1;
	}
	try
	{
		PtlParamInput input(argv[1]);
		PtlParamOutput output(argv[2]);

		const char* actionKind = argv[3];
		switch (actionKind[0]) {
		case '0':
		case '1':
		case '2':
		case '3':
			break;
		default:
			printf("usage: AppendAnnotLink.exe in-pdf-file out-pdf-file アクションの種類\n\n");
			printf("アクションの種類\n0 : GOTOアクションの設定\n1 : GOTORアクションの設定\n2 : Launchアクションの設定\n3 : URIアクションの設定\n");
			return 1;
		}

		PtlPDFDocument doc;

		// PDFファイルをロードします。
		doc.load(input);

		// ページコンテナの取得
		PtlPages& pages = doc.getPages();

		// ページコンテナが空かどうか
		if (pages.isEmpty()){
			printf("ページコンテナが空\n");
			return 1;
		}

		// １ページ目の取得
		PtlPage page = pages.get(0);
		
		// 注釈の追加
		addAnnotLink(pages, page, actionKind[0]);

		// ファイルに保存します。
		doc.save(output);

		printf("完了!\n");
	}
	catch (const PtlException &e)
	{
		fprintf(stderr, "Error code : %d\n %s\n", e.getErrorCode(), e.getErrorMessage().c_str());
		return 1;
	}
	return 0;
}

void addAnnotLink(PtlPages& pages, PtlPage& page, char actionKind)
{
	// 注釈コンテナの取得
	PtlAnnots& annots = page.getAnnots();
		
	// PDFのリンク注釈
	PtlAnnotLink annotlink;

	// 矩形座標を設定
	annotlink.setRect(PtlRect(30.0f,30.0f,50.0f,50.0f));

	// 内容を設定
	annotlink.setTextContents("PDFのリンク注釈");

	// アクションの設定
    setAction(pages, annotlink, actionKind);

	//注釈の追加
	annots.append(annotlink);
}

void setAction(PtlPages& pages, PtlAnnotLink& annotlink, char actionKind)
{
	// 宛先の設定
	PtlDestFit destfit;
	// 宛先ページの設定（最終ページに）
	destfit.setPageNumber(pages.getCount() - 1);

	switch (actionKind) {
	case '0':
		{
			// GOTOアクションの設定
			PtlActionGoTo acttiongoto;
			// 宛先の設定
			acttiongoto.setDest(destfit);
			// アクションの設定
			annotlink.setAction(acttiongoto);
			break;
		}
	case '1':
		{
			// GOTORアクションの設定
			PtlActionGoToR actiongotor; 
			// 宛先の設定
			actiongotor.setDest(destfit);
			// ファイル間移動用PDFファイルを設定
			actiongotor.setFileName("test.pdf");
			// 新ウィンドウフラグを設定
			actiongotor.setNewWindowFlag(true);
			// アクションの設定
			annotlink.setAction(actiongotor);
			break;
		}
	case '2':
		{
			// Launchアクションの設定
			PtlActionLaunch actionlaunch;
			// 起動ファイル名を設定
			actionlaunch.setFileName("test.txt");
			// 新ウィンドウフラグを設定
			actionlaunch.setNewWindowFlag(true);
			// アクションの設定
			annotlink.setAction(actionlaunch);
			break;
		}
	case '3':
		{
			// URIアクションの設定
			PtlActionURI actionurl;
			// URIを設定
			actionurl.setURI("http://www.antenna.co.jp/");
			// アクションの設定
			annotlink.setAction(actionurl);
		}
	}
}
