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

	概要：画像透かし・PDF透かし：透かし画像・PDFをカスタム角度で挿入

	Copyright 2025- 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 < 5) {
		printf("usage: AppendWatermarkSetAngle.exe in-pdf-file out-pdf-file watermark-image watermark-pdf\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[4]);

		// ファイルに保存します。
		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.setAngle(-15);

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

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

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

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

void appendWatermarkPDF(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_BOTTOM_RIGHT = 9 /* 右下 */
	watermarkpdf.setAlign(PtlParamWaterMark::ALIGN_BOTTOM_RIGHT);

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

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

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

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

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

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

	// 透かしの角度の設定
	watermarkpdf.setAngle(15);

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

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

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

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

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

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