/*
	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.exe in-pdf-file out-pdf-file \n");
		return 1;
	}

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

		PtlPages& pages = doc.getPages();

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


		// TextBoxを書き込む領域矩形
		PtlRect rect(10, 10, pageSize.getWidth() - 10, pageSize.getHeight() - 50);

		PtlContent& content = page0.getContent();

		PtlParamFont fontNormal("メイリオ", 36.0f, false, false, true);

		// rectに300×400のTextBoxを左上に書く
		PtlTextBox& textBox = content.drawTextBox(rect, PtlContent::ALIGN_TOP_LEFT, 300, 400);
		
		// 縁取りがテキストを囲むサイズに変わるよう指定しない
		textBox.fitToBBox(false);

		PtlParamWriteStringTextBox paramWriteString5;
		const char*  text52("上付き文字");
		paramWriteString5.setFont(fontNormal);
		paramWriteString5.setFormat(PtlParamWriteStringTextBox::FORM_SUP);
		textBox.writeString(PtlParamString(text52), paramWriteString5);	// 文字列を出力
		const char*  text53("と");
		paramWriteString5.setFormat(PtlParamWriteStringTextBox::FORM_NORMAL);
		textBox.writeString(PtlParamString(text53), paramWriteString5);	// 文字列を出力
		const char*  text54("下付き文字。");
		paramWriteString5.setFormat(PtlParamWriteStringTextBox::FORM_SUB);
		textBox.writeString(PtlParamString(text54), paramWriteString5);	// 文字列を出力
		const char*  text55("通常文字。");
		paramWriteString5.setFormat(PtlParamWriteStringTextBox::FORM_NORMAL);
		textBox.writeStringNL(PtlParamString(text55), paramWriteString5);	// 文字列を出力して改行

		textBox.writeNL();  // 改行

		PtlParamWriteStringTextBox paramWriteString6;
		PtlParamWriteStringTextBox paramWriteStringSup6;
		paramWriteString6.setFont(fontNormal);
		paramWriteStringSup6.setFont(fontNormal);
		paramWriteStringSup6.setFormat(PtlParamWriteStringTextBox::FORMAT_TYPE::FORM_SUP); // 上付き指定

		const char* textabc = ("((a+b+c)");
		textBox.writeString(textabc, paramWriteString6);     // 文字列を出力
		const char* text2 = ("2");
		textBox.writeString(text2, paramWriteStringSup6);    // 上付き文字列を出力
		const char* texta = ("=a");
		textBox.writeString(texta, paramWriteString6);       // 文字列を出力
		textBox.writeString(text2, paramWriteStringSup6);    // 上付き文字列を出力
		const char* textb = ("+b");
		textBox.writeString(textb, paramWriteString6);       // 文字列を出力
		textBox.writeString(text2, paramWriteStringSup6);    // 上付き文字列を出力
		const char* textc = ("+c");
		textBox.writeString(textc, paramWriteString6);       // 文字列を出力
		textBox.writeString(text2, paramWriteStringSup6);    // 上付き文字列を出力
		const char* text2abc = ("+2ab+2bc+2ca)");
		textBox.writeStringNL(text2abc, paramWriteString6);  // 文字列を出力して改行

		textBox.writeNL();  // 改行

		PtlParamWriteStringTextBox paramWriteString7;
		paramWriteString7.setFont(fontNormal);
		// 化学式
		paramWriteString7.setFormat(PtlParamWriteStringTextBox::FORMAT_TYPE::FORM_CHEM);

		const char* text22 = ("(C4H8O2)");
		textBox.writeStringNL(text22, paramWriteString7);// 文字列を出力して改行

		textBox.writeNL();  // 改行

		const char* text33 = ("H2SO4→2H++SO42-");
		textBox.writeStringNL(text33, paramWriteString7);// 文字列を出力して改行

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