/*
	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 appendWatermarkImage(PtlPDFDocument& doc, const char* pathImage);
void appendWatermarkPDF(PtlPDFDocument& doc, const char* pathImage);

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

		PtlPDFDocument doc;

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

		// 透かしの設定
		appendWatermarkImage(doc, argv[3]);
		//appendWatermarkPDF(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 appendWatermarkImage(PtlPDFDocument& doc, const char* pathImage)
{
	// 透かしの設定
	PtlParamWaterMarkImage watermarkimage;

	// 入力画像ストリームの設定
	PtlParamInput inputimage(pathImage);
	watermarkimage.setImageStream(inputimage);
	inputimage.close();

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

	// 透かしを配置するときの余白の設定
	watermarkimage.setMargin(10.0f, 10.0f, 10.0f, 10.0f);

	// 透かしの配置の設定 ALIGN_TOP_LEFT = 1 /* 左上 */
	watermarkimage.setAlign(PtlParamWaterMark::ALIGN_TOP_LEFT);

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

	// 透かしを入れるページの範囲の設定 PAGE_RANGE_ODD = 3 /* 奇数ページ */
	watermarkimage.setPageRange(PtlParamWaterMark::PAGE_RANGE_ODD);

	// 透かしの不透明度の設定
	watermarkimage.setOpacity(0.9f);

	// 透かしをタイリングして配置するかどうかの設定
	watermarkimage.setTiling(false);

	// 透かしの倍率の設定
	watermarkimage.setScale(0.8f);

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

void appendWatermarkPDF(PtlPDFDocument& doc, const char* pathImage)
{
	// 透かしの設定
	PtlParamWaterMarkPDF watermarkpdf;

	// 透かしに使用する画像ページを設定
	PtlParamImagePage imagepage;

	// 用紙タイプの設定 PAPER_IMAGE_SIZE /* 画像サイズに合わせる */
	imagepage.setPaperType(PtlParamImagePage::PAPER_IMAGE_SIZE);

	// 画像の描画に使うパラメータクラス
	PtlParamDrawImage paramDrawImage;

	// 入力画像ストリームの設定
	PtlParamInput inputimage(pathImage);
	paramDrawImage.setImageStream(inputimage);
	inputimage.close();

	// ページに挿入する画像パラメータの設定。
	imagepage.setImage(paramDrawImage);

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

	// 画像ページの追加
	pages.append(imagepage);

	// 指定位置にあるページを取得
	PtlPage page = pages.get(0);

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

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

	// 透かしを配置するときの余白の設定
	watermarkpdf.setMargin(10.0f, 10.0f, 10.0f, 10.0f);

	// 透かしの配置の設定 ALIGN_TOP_LEFT = 1 /* 左上 */
	watermarkpdf.setAlign(PtlParamWaterMark::ALIGN_TOP_LEFT);

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

	// 透かしを入れるページの範囲の設定 PAGE_RANGE_ODD = 3 /* 奇数ページ */
	watermarkpdf.setPageRange(PtlParamWaterMark::PAGE_RANGE_ODD);

	// 透かしの不透明度の設定
	watermarkpdf.setOpacity(0.9f);

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

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

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