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

	概要：矩形内で折り返す文字列

	Copyright 2025- Antenna House, Inc.
*/

#include < PdfTk.h >

using namespace std;
using namespace PdfTk;

int main(int argc, char* argv[])
{
	if (argc != 3)
	{
		printf("usage: DrawTextBox_3.exe in-pdf-file out-pdf-file \n");
		return 1;
	}

	try {
		PtlParamInput input(argv[1]);
		PtlParamOutput output(argv[2]);
		PtlPDFDocument doc;
		doc.load(input);

		PtlOption option;
		option.setUnit(PtlOption::UNIT_PT);

		PtlParamString fontname = "メイリオ";
		float fontSize = 24.0f;

		PtlParamFont fontNormal(fontname, fontSize, false, false, true);
		PtlParamFont fontBoldItalic(fontname, fontSize, true, true, true);
		PtlColorDeviceRGB colorBlack = PtlColorDeviceRGB(0.0f, 0.0f, 0.0f);
		PtlColorDeviceRGB colorRed = PtlColorDeviceRGB(1.0f, 0.0f, 0.0f);

		PtlPages& pages = doc.getPages();
		PtlPage page0 = pages.get(0);
		PtlSize pageSize = page0.getSize();
		PtlContent& content = page0.getContent();

		// TextBoxを書き込む領域矩形はページサイズより上下左右20ポイント小さいものにする
		PtlRect rect(20, 20, pageSize.getWidth()-20, pageSize.getHeight()-20);
		// rectに300×400のTextBoxを左上に書く
		PtlTextBox& textBox = content.drawTextBox(rect, PtlContent::ALIGN_TOP_LEFT, 400, 400);

		// TextBoxの縁取りを付ける
		textBox.setOutlineColor(colorRed);
		// 縁取りがテキストを囲むサイズに変わるよう指定
		textBox.fitToBBox(true);

		PtlParamWriteStringTextBox paramWriteString;
		paramWriteString.setFont(fontNormal);
		paramWriteString.setTextColor(colorBlack);

		const char* text1("長いテキストは折り返されます。");
		textBox.writeString(text1, paramWriteString);	// 文字列を出力

		const char* text2 = "「これは、私が小さいときに、村の茂平というおじいさんからきいたお話です。むかしは、私たちの村のちかくの、中山というところに小さなお城があって、中山さまというおとのさまが、おられたそうです。その中山から、少しはなれた山の中に、「ごん狐」という狐がいました。」（新美南吉「ごん狐」）";
		textBox.writeStringNL(text2, paramWriteString); // 文字列を出力して改行

		textBox.writeNL();  // 改行

		const char* text3 = ("英字は途中で折り返されません。TextBoxはPtlParamWriteStringTextBoxを使います。");
		textBox.writeStringNL(text3, paramWriteString); // 文字列を出力して改行

		textBox.terminate();

		doc.save(output);

		printf("-- 完了 --\n");

	} catch (PtlException e) {
		fprintf(stderr, "Error code : %d\n %s\n", e.getErrorCode(), e.getErrorMessage().c_str());

	} catch (...) {
		printf("Exception\n");
	}
}