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

	概要：PDF透かしの挿入

	Copyright 2013-2021 Antenna House, Inc.
*/

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

using namespace PdfTk;

void appendWatermark(PtlPDFDocument& doc, const char* pathPdf);

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

		PtlPDFDocument doc;

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

		// 透かしの追加
		appendWatermark(doc, argv[3]);

		// ファイルに保存します。
		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 appendWatermark(PtlPDFDocument& doc, const char* pathPdf)
{
	PtlPDFDocument doc_watermark;

	PtlParamInput watermark(pathPdf);

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

	// ページコンテナの取得
	PtlPages& pages = doc_watermark.getPages();
	// ページコンテナが空かどうか
	if (pages.isEmpty()) {
		printf("ページコンテナが空\n");
		return;
	}

	// 透かしの設定
	PtlParamWaterMarkPDF watermarkpdf;

	// 透かしの名前の設定
	watermarkpdf.setName("透かしの名前");

	// 透かしの配置の設定 ALIGN_CENTER = 5 /* 中央 */
	watermarkpdf.setAlign(PtlParamWaterMark::ALIGN_CENTER);

	// 透かしのZオーダーの設定 ZORDER_FRONT = 1 /* 前面 */
	watermarkpdf.setZorder(PtlParamWaterMark::ZORDER_FRONT);

	// 透かしを入れるページの範囲の設定 PAGE_RANGE_ALL = 0 /* 全ページ */
	watermarkpdf.setPageRange(PtlParamWaterMark::PAGE_RANGE_ALL);

	// 先頭ページに透かしを配置しない設定の範囲の設定
	watermarkpdf.setNotInFirst(false);

	// 最終ページに透かしを配置しない設定の設定
	watermarkpdf.setNotInLast(false);

	// PDF表示時に透かしを表示する指定の設定
	watermarkpdf.setDisplayWaterMark(true);

	// PDF印刷時に透かしを印刷する指定の設定
	watermarkpdf.setPrintWaterMark(true);

	// 透かしの不透明度の設定
	watermarkpdf.setOpacity(0.5f);
		
	// 透かしをタイリングして配置するかどうかの設定
	watermarkpdf.setTiling(false);

	// 透かしに使用するページの取得
	PtlPage page = pages.get(0);

	// 透かしに使用するPDF文書ページを設定
	watermarkpdf.setPage(page);

	// 透かしの倍率の設定
	watermarkpdf.setScale(0.5f);

	// 透かしの設定
	doc.appendWaterMark(watermarkpdf);
}
