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

	概要：テキストボックス：枠の線種設定

	Copyright 2021-2025 Antenna House, Inc.
*/

#include < PdfTk.h >

using namespace std;
using namespace PdfTk;

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

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

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

		PtlPages& pages = aDoc.getPages();

		PtlPage page0 = pages.get(0);
		PtlSize pageSize = page0.getSize();

		// TextBoxを書き込む領域矩形はページサイズより上下左右80ポイント小さいものにする
		PtlRect rect(80, 80, pageSize.getWidth() - 80, pageSize.getHeight() - 80);

		PtlContent& content = page0.getContent();

		float fontSize = 24.0f;
		PtlParamString fontname = "ＭＳ ゴシック";

		PtlParamFont fontNormal(fontname, fontSize, false, false, true);

		PtlColorDeviceRGB colorBlack = PtlColorDeviceRGB(0.0f, 0.0f, 0.0f);
		PtlColorDeviceRGB colorRed = PtlColorDeviceRGB(1.0f, 0.0f, 0.0f);
		PtlColorDeviceRGB colorBlue = PtlColorDeviceRGB(0.0f, 0.0f, 1.0f);
		PtlColorDeviceRGB colorWite = PtlColorDeviceRGB(1.0f, 1.0f, 1.0f);
		PtlColorDeviceRGB colorYellow = PtlColorDeviceRGB(1.0f, 1.0f, 0.0f);

		// 実線
		{
			// rectに200×200のTextBoxを左上に書く
			PtlTextBox& textBox = content.drawTextBox(rect, PtlContent::ALIGN_TOP_LEFT, 200, 200);

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

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

			const char* text1("実線赤・背景色なし（テキストを囲むサイズ）");
			textBox.writeStringNL(PtlParamString(text1), paramWriteString);

			textBox.terminate();
		}
		// 破線
		{
			// rectに200×200のTextBoxを左下に書く
			PtlTextBox& textBox = content.drawTextBox(rect, PtlContent::ALIGN_RIGHT, 200, 200);

			// TextBoxの線スタイル
			textBox.setOutlineStyle(PtlTextBox::OUTLINE_STYLE_DASHED);
			// TextBoxの縁取りを付ける
			textBox.setOutlineColor(colorBlue);
			// TextBoxの塗りつぶし色
			textBox.setBackColor(colorWite);
			// 縁取りがテキストを囲むサイズに変わるよう指定
			textBox.fitToBBox(false);

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

			const char* text1("破線青・背景色白");
			textBox.writeStringNL(PtlParamString(text1), paramWriteString);

			textBox.terminate();
		}
		// 縁取りなし
		{
			// rectに200×200のTextBoxを左下に書く
			PtlTextBox& textBox = content.drawTextBox(rect, PtlContent::ALIGN_BOTTOM_LEFT, 200, 200);

			// TextBoxの塗りつぶし色
			textBox.setBackColor(colorYellow);
			// 縁取りがテキストを囲むサイズに変わるよう指定
			textBox.fitToBBox(true);

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

			const char* text1("縁取り線なし・背景色黄（テキストを囲むサイズ）");
			textBox.writeStringNL(PtlParamString(text1), paramWriteString);

			textBox.terminate();
		}

		aDoc.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");
	}
}