/*
	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 addAnnotFileAttachment(PtlPage& page, const PtlParamString& attachmentfilename);

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

		PtlPDFDocument doc;

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

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

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

		// ページの取得
		PtlPage page = pages.get(0);

		// 注釈の設定
		addAnnotFileAttachment(page, attachmentfilename);
		
		// ファイルに保存します。
		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 addAnnotFileAttachment(PtlPage& page, const PtlParamString& attachmentfilename)
{
	// 注釈コンテナの取得
	PtlAnnots& annots = page.getAnnots();

	// PDFのファイル添付注釈
	PtlAnnotFileAttachment annotfileattachment;

	// アイコンタイプ設定 ICON_PUSHPIN = 3, /* プッシュピン */
	annotfileattachment.setIconType(PtlAnnotFileAttachment::ICON_PUSHPIN);

	// アイコンサイズ
	PtlRect rectSize = annotfileattachment.getRect();

	// 矩形座標を設定 座標の単位はmmで原点(0,0)は左下
	annotfileattachment.setRect(PtlRect(50.0f, 50.0f, 50.0f+rectSize.getRight(), 50.0f+rectSize.getTop()));

	// 内容を設定（注釈用に表示されるテキスト・可読な形式での注釈コンテンツの代替説明）
	annotfileattachment.setTextContents("可読な形式での注釈コンテンツの代替説明");

	// 日時の設定(2000/5/5 12:00:00)
	annotfileattachment.setDate(PtlDate(2000, 5, 5, 12, 0, 0));

	// 色を設定
	annotfileattachment.setColor(PtlColorDeviceRGB(1.0f, 0.0f, 1.0f));

	// 境界線スタイルを設定 BORDER_SOLID = 1, /* 実線(注釈を囲む実線の矩形) */
	annotfileattachment.setBorderStyle(PtlAnnotText::BORDER_SOLID);

	// 境界線幅を取得 BORDER_WIDTH_THICK = 3 /* 太い */
	annotfileattachment.setBorderWidth(PtlAnnotText::BORDER_WIDTH_THICK);

	// ポップアップウィンドウのタイトル文字列設定
	annotfileattachment.setMarkUpTitle("ポップアップウィンドウのタイトル文字列");

	// サブジェクトの短い説明設定
	annotfileattachment.setMarkUpSubj("サブジェクトの短い説明設定");

	// 注釈生成日時の設定
	annotfileattachment.setMarkUpDate(PtlDate(2000, 4 , 1, 23, 59, 59));

	// 不透明度を設定 0.0 ～ 1.0。0.0が透明、1.0が不透明
	annotfileattachment.setMarkUpCA(1.0f);

	// 添付ファイル名設定
	annotfileattachment.setFileName(attachmentfilename);

	// 添付するファイルの読み込み
	PtlParamInput inpitAttach(attachmentfilename);
	annotfileattachment.readFile(inpitAttach);

	//------
	PtlAnnotPopup annotpopup;

	// 矩形座標を設定 座標の単位はmmで原点(0,0)は左下
	annotpopup.setRect(PtlRect(100.0f, 100.0f, 150.0f, 150.0f)); 

	// オープン状態を設定 true=オープン状態
	annotpopup.setOpenState(true);

	// ポップアップ注釈を設定
	annotfileattachment.setAnnotPopUp(annotpopup);

	//------

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