OEM販売のご相談
ご相談ください!

PDF Tool APIサンプルコード:上付き文字列・下付き文字列・化学式

機能イメージ

テキストボックスを用いて上付き文字と下付き文字の混在する文字列や数式、化学式を書きこんだPDFを出力します。

概要

サンプルコードの概要

テキストボックスで文字を追加するとき、PtlParamWriteString のフォーマットタイプを指定すれば、上付き文字・下付き文字や化学式を表現できます。

  • PtlParamWriteStringTextBox: TextBoxに使うパラメータクラス
  • PtlParamWriteStringTextBox.setFormat(): フォーマットの設定
  • PtlParamWriteStringTextBox::FORMAT_TYPE::FORM_NORMAL: ノーマル(デフォルト)
  • PtlParamWriteStringTextBox::FORMAT_TYPE::FORM_SUP: 上付き
  • PtlParamWriteStringTextBox::FORMAT_TYPE::FORM_SUB: 下付き
  • PtlParamWriteStringTextBox::FORMAT_TYPE::FORM_CHEM: 化学式

サンプルコード

/*
	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");
	}
}
            
/*
	Antenna House PDF Tool API V8.0
	Java Interface sample program

	概要:上付き文字列・下付き文字列・化学式

	Copyright 2025- Antenna House,Inc.
 */

package Sample;

import jp.co.antenna.ptl.*;

public class DrawTextBox_1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 2)
        {
            System.out.println("usage: java DrawTextBox_1 in-pdf-file out-pdf-file");
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument();)
        {

            doc.load(inputFile);

            try (PtlPages pages = doc.getPages();
                 PtlPage page0 = pages.get(0);     //1ページ目
                 PtlSize pageSize = page0.getSize();
                 PtlContent content = page0.getContent();
                 PtlParamFont fontNormal = new PtlParamFont("メイリオ", 36.0f, false, false, true);
                 PtlRect rect = new PtlRect(10, 10, pageSize.getWidth() - 10, pageSize.getHeight() - 50);
        		 PtlTextBox textBox = content.drawTextBox(rect, PtlContent.ALIGN.ALIGN_TOP_LEFT, 300, 400);)
            {
            	
                // 縁取りがテキストを囲むサイズに変わるよう指定しない
                textBox.fitToBBox(false);
            	
        		PtlParamWriteStringTextBox paramWriteString5 = new PtlParamWriteStringTextBox();
            	paramWriteString5.setFont(fontNormal);
                String text52 = ("上付き文字");
                paramWriteString5.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_SUP);
                textBox.writeString(text52, paramWriteString5);	// 文字列を出力
                String text53 = ("と");
                paramWriteString5.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_NORMAL);
                textBox.writeString(text53, paramWriteString5);	// 文字列を出力
                String text54 = ("下付き文字。");
                paramWriteString5.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_SUB);
                textBox.writeString(text54, paramWriteString5);	// 文字列を出力
                String text55 = ("通常文字。");
                paramWriteString5.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_NORMAL);
                textBox.writeStringNL(text55, paramWriteString5); 	// 文字列を出力して改行
                
        		textBox.writeNL();  // 改行

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

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

        		textBox.writeNL();  // 改行

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

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

        		textBox.writeNL();  // 改行

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

                textBox.terminate();

                doc.save(outputFile);
            }

        }
        catch (PtlException pex) {
            System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() + "\n  " + pex.getErrorMessage());
        }
        catch (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Error ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        finally {
            System.out.println("-- 完了 --");
        }
	}
}


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

	概要:上付き文字列・下付き文字列・化学式

	Copyright 2025- Antenna House,Inc.
*/

using System;

using PdfTkNet;

namespace DrawTextBox
{
    class DrawTextBox
    {
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("usage: drawTextBox_1.exe in-pdf-file out-pdf-file\n");
                return;
            }

            try
            {
                using (PtlParamInput input = new PtlParamInput(args[0]))
                using (PtlParamOutput output = new PtlParamOutput(args[1]))
                using (PtlPDFDocument doc = new PtlPDFDocument())
                {

                    doc.load(input);

                    using (PtlPages pages = doc.getPages())
                    using (PtlPage page0 = pages.get(0))
                    using (PtlSize pageSize = page0.getSize())
                    using (PtlContent content = page0.getContent())
                    using (PtlParamFont fontNormal = new PtlParamFont("メイリオ", 36.0f, false, false, true))
                    using (PtlRect rect = new PtlRect(10, 10, pageSize.getWidth() - 10, pageSize.getHeight() - 50))
                    using (PtlTextBox textBox = content.drawTextBox(rect, PtlContent.ALIGN.ALIGN_TOP_LEFT, pageSize.getWidth() - 20, pageSize.getHeight() - 60))
                    {

                        // 縁取りがテキストを囲むサイズに変わるよう指定しない
                        textBox.fitToBBox(false);

                        using (PtlParamWriteStringTextBox paramWriteString = new PtlParamWriteStringTextBox())
                        {
                            paramWriteString.setFont(fontNormal);

                            string text52 = ("上付き文字");
                            paramWriteString.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_SUP);    // 上付き指定
                            textBox.writeString(text52, paramWriteString);  // 文字列を出力

                            string text53 = ("と");
                            paramWriteString.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_NORMAL); // ノーマル指定
                            textBox.writeString(text53, paramWriteString);  // 文字列を出力

                            string text54 = ("下付き文字。");
                            paramWriteString.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_SUB);    // 下付き指定
                            textBox.writeString(text54, paramWriteString);  // 文字列を出力

                            string text55 = ("通常文字。");
                            paramWriteString.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_NORMAL); // ノーマル指定
                            textBox.writeStringNL(text55, paramWriteString);    // 文字列を出力して改行
                        }

                        textBox.writeNL();  // 改行

                        using (PtlParamWriteStringTextBox paramWriteString = new PtlParamWriteStringTextBox())
                        using (PtlParamWriteStringTextBox paramWriteStringSup = new PtlParamWriteStringTextBox())
                        {
                            paramWriteString.setFont(fontNormal);
                            paramWriteStringSup.setFont(fontNormal);
                            paramWriteStringSup.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_SUP); // 上付き指定

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

                        textBox.writeNL();  // 改行

                        using (PtlParamWriteStringTextBox paramWriteString = new PtlParamWriteStringTextBox())
                        {
                            paramWriteString.setFont(fontNormal);
                            // 化学式
                            paramWriteString.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_CHEM);

                            string text22 = ("(C4H8O2)");
                            textBox.writeStringNL(text22, paramWriteString);// 文字列を出力して改行

                            textBox.writeNL();  // 改行

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

                        textBox.terminate();
                    }
                    doc.save(output);

                    Console.WriteLine("-- 完了 --");
                }
            }
            catch (PtlException pex)
            {
                Console.WriteLine(pex.getErrorCode() + " : " + pex.getErrorMessageJP());
                pex.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
	}
}



            

サンプルコードのダウンロードはこちら

実行例

コマンドラインでの実行例

DrawTextBox_1.exe C:\in\blank.pdf C:\sav\outDrawTextBox_1.pdf
-- 完了 --
java -jar DrawTextBox_1.jar C:\in\blank.pdf C:\sav\outDrawTextBox_1.pdf
-- 完了 --
DrawTextBox_1.exe C:\in\blank.pdf C:\sav\outDrawTextBox_1.pdf
-- 完了 --

出力結果イメージ

上付き文字と下付き文字の混在する文字列や数式、化学式が表示されます。

出力イメージ

サンプルコードのダウンロード

サンプルコード

サンプルで使用した入出力PDF