/*
	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 createOutline(PtlOutline& outlineRoot);

int main(int argc, char* argv[])
{
	if (argc < 3) {
		printf("usage: AppendOutline.exe in-pdf-file out-pdf-file\n");
		return 1;
	}
	try
	{
		PtlParamInput input(argv[1]);
		PtlParamOutput output(argv[2]);

		PtlPDFDocument doc;

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

		//ルートアウトラインの取得
		PtlOutline outlineRoot = doc.getRootOutline();

		// しおりの追加
		createOutline(outlineRoot);

		// ファイルに保存します。
		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 createOutline(PtlOutline& outlineRoot)
{
	PtlOutline outlineActionGoTo;
	{
		outlineActionGoTo.setTitle("ActionGoTo DestFit");
		// アクション
		PtlActionGoTo actiongoto; // PtlActionGoTo : GoToアクション<現在のドキュメント内の宛先へ移動>
			// PtlDestFit : Fit型
			PtlDestFit destfit;
			// 宛先ページの設定
			destfit.setPageNumber(1);
			// 宛先の設定
		actiongoto.setDest(destfit);
		// アクションの設定
		outlineActionGoTo.setAction(actiongoto);
		// アウトラインタイトルの色を設定
		outlineActionGoTo.setColor(PtlColorDeviceRGB(0.0f, 1.0f, 0.0f));
		// アウトラインフラグを設定
		outlineActionGoTo.setFlags(PtlOutline::FLAG_ITALIC);
		// PDF表示時の子アウトラインをオープンするかどうかの設定
		outlineActionGoTo.setOpen(true);
		// 子アウトラインの追加
		outlineRoot.appendLastChild(outlineActionGoTo);

		PtlOutline outlineActionGoToR;
		{
			outlineActionGoToR.setTitle("ActionGoToR DestFitH");
			// アクション
			PtlActionGoToR actiongotor; // PtlActionGoToR : GoToRアクション<("Go-to remote")他のドキュメント内への移>
				PtlDestFitH destfith; // PtlDestFitH : FitH型
				// 宛先ページの設定
				destfith.setPageNumber(3);
				// topの設定
				destfith.setTopNull();
				// dest1.setTop(NULL_VALUE_CSTR);
			// 宛先の設定
			actiongotor.setDest(destfith);
			// ファイル間移動用PDFファイル名を取得（ファイル名もしくは相対パス指定）
			actiongotor.setFileName("test.pdf");
			// 宛先文書を新ウィンドウでオープンするかどうかのフラグを設定（true: 新ウィンドウでオープンする。false: しない）
			actiongotor.setNewWindowFlag(false);
			// アクションの設定
			outlineActionGoToR.setAction(actiongotor);

			// アウトラインタイトルの色を設定
			outlineActionGoToR.setColor(PtlColorDeviceRGB(0.0f, 0.0f, 1.0f));
			// アウトラインフラグを設定
			outlineActionGoToR.setFlags(PtlOutline::FLAG_NORMAL);
			// PDF表示時の子アウトラインをオープンするかどうかの設定
			outlineActionGoToR.setOpen(false);
			// 子アウトラインの追加
			outlineActionGoTo.appendLastChild(outlineActionGoToR);
		}
	}

	PtlOutline outlineActionLaunch;
	{
		outlineActionLaunch.setTitle("ActionLaunch");
		// アクション
		PtlActionLaunch actionlaunch; // PtlActionLaunch : Launchアクション<アプリケーションの起動、通常、ファイルを開
		// 起動ファイル名を設定
		actionlaunch.setFileName("test.jpg");
		// 宛先文書を新ウィンドウでオープンするかどうかのフラグを設定（true: 新ウィンドウでオープンする false: しない）
		actionlaunch.setNewWindowFlag(true);
		// アクションの設定
		outlineActionLaunch.setAction(actionlaunch);
		// アウトラインタイトルの色を設定
		outlineActionLaunch.setColor(PtlColorDeviceRGB(0.0f, 1.0f, 1.0f));
		// アウトラインフラグを設定
		outlineActionLaunch.setFlags(PtlOutline::FLAG_BOLD);
		// PDF表示時の子アウトラインをオープンするかどうかの設定
		outlineActionLaunch.setOpen(false);
		// 子アウトラインの追加
		outlineRoot.appendLastChild(outlineActionLaunch);
	}

	PtlOutline outlineActionURI;
	{
		// アウトラインタイトル文字列を設定
		outlineActionURI.setTitle("ActionURI");
		// アクション
		PtlActionURI actionuri; // PtlActionURI : URIアクション
		// URIを設定
		actionuri.setURI("http://www.antenna.co.jp/");
		// アクションの設定
		outlineActionURI.setAction(actionuri);
		// アウトラインタイトルの色を設定
		outlineActionURI.setColor(PtlColorDeviceRGB(.01f, 0.5f, 0.0f));
		// アウトラインフラグを設定
		outlineActionURI.setFlags(PtlOutline::FLAG_BOLD | PtlOutline::FLAG_ITALIC);
		// PDF表示時の子アウトラインをオープンするかどうかの設定
		outlineActionURI.setOpen(true);
		// 子アウトラインの追加
		outlineRoot.appendLastChild(outlineActionURI);
	}
}
