/*
	Antenna House PDF Tool API V8.0
	C++ Interface sample program

	概要：テキストオブジェクトの挿入

	Copyright 2013-2025 Antenna House, Inc.
*/

#include <PdfTk.h>
#include <stdio.h>

using namespace PdfTk;

void writeString(PtlPage& page);

int main(int argc, char* argv[])
{
	if (argc < 3) {
		printf("usage: WriteString.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);

		// テキスト追加
		writeString(page);

		// ファイルに保存します。
		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 writeString(PtlPage& page)
{
	//ページコンテントの取得
	PtlContent& content = page.getContent();

	//絵文字列出力
	{
		//出力矩形
		PtlRect rect(0.0f, 250.0f, 300.0f, 500.0f);

		//文字の描画に使うパラメータクラス
		PtlParamWriteString writestring;

		//フォント指定に使うパラメータクラス
		PtlParamFont font;

		//フォント名の設定
		font.setName("Segoe UI Emoji");

		//サイズの設定
		font.setSize(80.0f);

		//フォントの設定
		writestring.setFont(font);

		//文字色設定
		writestring.setTextColor(PtlColorDeviceRGB(1.0f, 0.0f, 0.0f));

		std::wstring stdwstr = L"\U0001f31d\U0001f31e\U0001f404\U0001f408\U0001f409";

		//文字列出力
		content.writeString(rect, PtlContent::ALIGN_CENTER, PtlParamString((CP_UChar*)stdwstr.c_str()), writestring);
	}

	//文字列出力
	{
		//出力矩形
		PtlRect rect(0.0f, 0.0f, 300.0f, 250.0f);

		//文字の描画に使うパラメータクラス
		PtlParamWriteString writestring;

		//フォント指定に使うパラメータクラス
		PtlParamFont font;

		//フォント名の設定
	#ifdef _WIN32
		font.setName("ＭＳ明朝");
	#else
		font.setName("Times-Roman");
	#endif

		//サイズの設定
		font.setSize(80.0f);

		//フォントの設定
		writestring.setFont(font);

		//文字色設定
		writestring.setTextColor(PtlColorDeviceRGB(1.0f, 0.0f, 0.0f));

		//文字列出力
		content.writeString(rect, PtlContent::ALIGN_CENTER, "writeString Test 1", writestring);
	}

	//文字列回転出力
	{
		//出力矩形
		PtlRect rect(0.0f, 0.0f, 300.0f, 250.0f);

		//文字の描画に使うパラメータクラス
		PtlParamWriteString writestring;

		//フォント指定に使うパラメータクラス
		PtlParamFont font;

		//フォント名の設定
	#ifdef _WIN32
		font.setName("MS-Gothic");
	#else
		font.setName("Courier");
	#endif

		//サイズの設定
		font.setSize(40.0f);

		//フォントの設定
		writestring.setFont(font);

		//文字色設定
		writestring.setTextColor(PtlColorDeviceRGB(0.0f, 1.0f, 0.0f));

		//文字列出力
		content.writeString(rect, PtlContent::ALIGN_BOTTOM_LEFT, 45.0f, "writeString Test 2", writestring);
	}

	//縦書きの文字列出力
	{
		//出力矩形
		PtlRect rect(0.0f, 0.0f, 300.0f, 200.0f);

		//文字の描画に使うパラメータクラス
		PtlParamWriteString writestring;

		//フォント指定に使うパラメータクラス
		PtlParamFont font;

		//フォント名の設定
	#ifdef _WIN32
		font.setName("MSP-Mincho");
	#else
		font.setName("Helvetica");
	#endif

		//サイズの設定
		font.setSize(60.0f);

		//ウエイトの設定
		font.setWeight(PtlParamFont::WEIGHT_HEAVY);

		//フォントの設定
		writestring.setFont(font);

		//文字色設定
		writestring.setTextColor(PtlColorDeviceRGB(0.0f, 0.0f, 1.0f));

		//文字列出力
		content.writeStringV(rect, PtlContent::ALIGN_TOP_LEFT, "writeString Test 3", writestring);
	}
}
