/*
	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 addAnnotText(PtlPage& page);

int main(int argc, char* argv[])
{
	if (argc < 3) {
		printf("usage: AppendAnnotText.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);

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

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

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

		// 注釈の追加		
		addAnnotText(page);
		PtlContent content = page.getContent();
		PtlParamWriteString param;
		PtlParamFont font;
		param.setFont(font);
		content.writeString(PtlRect(0.0, 0.0, 100.0, 100.0), PtlContent::ALIGN_CENTER, "test",param);
		doc.setSaveOption(PtlPDFDocument::SAVE_INCREMENTAL_UPDATE);
		// ファイルに保存します。
		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 addAnnotText(PtlPage& page)
{
	// 注釈コンテナの取得 PtlPage::getAnnots
	PtlAnnots& annots = page.getAnnots();

	// PDFのテキスト注釈
	PtlAnnotText annottext;

	//------------------------------------------------------------

	// アイコンタイプ設定 ICON_COMMENT = 1, /* コメント */
	annottext.setIconType(PtlAnnotText::ICON_NOTE);

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

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

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

	// 日時の設定(2013/01/01 00:00:00)
	annottext.setDate(PtlDate(2013, 1, 1, 0, 0, 0));

	// 注釈フラグを設定（論理和） FLAG_NOROTATE = 0x00000010, /* 注釈の外観をページにあわせて回転しません。 */
	annottext.setAnnotFlags(PtlAnnotText::FLAG_NOROTATE);

	// 色を設定 setColor(const PtlColorDeviceRGB& color);
	annottext.setColor(PtlColorDeviceRGB(0.0f, 0.0f, 1.0f));

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

	// 境界線幅を設定 BORDER_WIDTH_THIN = 1, /* 細い */
	annottext.setBorderWidth(PtlAnnotText::BORDER_WIDTH_THIN);

	//------

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

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

	// 注釈生成日時の設定(2012/12/31 23:59:59)
	annottext.setMarkUpDate(PtlDate(2012, 12 , 31, 23, 59, 59));

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

	//------

	//■PtlAnnotPopup
	PtlAnnotPopup annotpopup;

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

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

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

	//------


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

