3.2.3 文字装飾のフォーマットを指定する(テキストボックス)

TBoxDrawWithFormat_Top

狙い・効果

テキストボックスの文字について、テキストボックス上付き文字、下付き文字、化学式といった文字の描画フォーマットを指定します。

処理の概要

PtlParamWriteStringTextBoxでは上付き文字、下付き文字、化学式といった文字の描画フォーマットを設定できます。

具体的にはsetFormat()で指定し、表3.2の列挙型定数の中から描画フォーマットを選択します。

化学式フォーマットを選択した場合は、入力された文字のうち数字は自動的に下付きになります。また、アルファベットを含むその他の文字は通常の大きさになります。

サンプルプログラムでは、上付き文字、下付き文字、化学式を利用した文字列を指定した矩形に挿入します。文字列は固定です。その他の項目に関してはTBoxDrawTextBox.javaと同一の動作をします。

『PDF Tool API』の主な機能

表3.2 PtlParamWriteStringTextBox.FORMAT_TYPEで指定可能な描画フォーマット
列挙型定数
フォーマットタイプ
FORM_CHEM
化学式
FORM_NORMAL
ノーマル(デフォルト)
FORM_SUB
下付き
FORM_SUP
上付き

プログラム例

package cookbook;

import java.io.*;
import jp.co.antenna.ptl.*;


public class  TBoxDrawWithFormat{

    // そのクラスのusageを表示する関数
    private static void printUsage() {
            System.out.println("usage: java TBoxDrawWithFormat in-pdf-file out-pdf-file page-num");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3) {
            printUsage();
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument();
             BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            // PDFファイルをロードします。
            doc.load(inputFile);

            // コマンドライン引数の読み取り・判定
            int pageToAdd = Integer.parseInt(args[2]);
            int numPages = doc.getPageCount();
            System.out.println("ページ数:" + numPages);
            if((numPages < 0)||(numPages < pageToAdd)) {
                System.err.println("テキスト挿入ページは全ページ数よりも小さい正の値を指定してください。");
                return;
            }

            try (PtlPages pages = doc.getPages()) {//ページコンテナの取得
                // ページコンテナが空かどうか
                if (pages.isEmpty()) {
                    System.err.println("ページコンテナが空");
                    return;
                }

                try (PtlPage page = pages.get(pageToAdd - 1);// ページの取得(パラメータindexは0が先頭のため1を引く)
                     PtlContent content = page.getContent();// ページコンテントの取得
                     PtlRect outputRect = new PtlRect();// 出力矩形の初期化
                     PtlTextBox textBox = content.drawTextBox(setRectCoordinate(br, outputRect), PtlContent.ALIGN.ALIGN_CENTER, 210, 297);
                     PtlParamWriteStringTextBox paramFormat = new PtlParamWriteStringTextBox();
                     PtlParamWriteStringTextBox paramFormat_sup = new PtlParamWriteStringTextBox();
                     PtlParamWriteStringTextBox paramFormat_sub = new PtlParamWriteStringTextBox();
                     PtlParamWriteStringTextBox paramFormat_chem = new PtlParamWriteStringTextBox()) {// 文字描画のパラメータクラス。

                    paramFormat.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_NORMAL);
                    paramFormat_sup.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_SUP);
                    paramFormat_sub.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_SUB);
                    paramFormat_chem.setFormat(PtlParamWriteStringTextBox.FORMAT_TYPE.FORM_CHEM);
                    // 文字列出力(上付き文字)
                    textBox.writeString("これは上付き文字を使った表現です。", paramFormat);
                    textBox.writeNL();
                    textBox.writeString("2", paramFormat);
                    textBox.writeString("10", paramFormat_sup);
                    textBox.writeString(" = 1024", paramFormat);
                    textBox.writeNL();
                    textBox.writeString("Microsoft", paramFormat);                    
                    textBox.writeString("Ⓡ", paramFormat_sup);

                    // 文字列出力(下付き文字)
                    textBox.writeNL();
                    textBox.writeNL();
                    textBox.writeString("これは下付き文字を使った表現です。", paramFormat);
                    textBox.writeNL();
                    textBox.writeString("A", paramFormat);
                    textBox.writeString("i", paramFormat_sub);
                    textBox.writeString("+B", paramFormat);
                    textBox.writeString("i", paramFormat_sub);
                    textBox.writeString("=C", paramFormat);
                    textBox.writeString("i", paramFormat_sub);

                    // 文字列出力(化学式)
                    textBox.writeNL();
                    textBox.writeNL();
                    textBox.writeString("これは化学式を使った表現です。", paramFormat);
                    textBox.writeNL();
                    textBox.writeString("O2 + 2H2 →2H2O", paramFormat_chem);
                    textBox.writeNL();
                    textBox.writeString("Na+ + Cl- → NaCl", paramFormat_chem);
                    ex.printStackTrace();
                }
            }

            // ファイルに保存します。
            doc.save(outputFile);
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }

    public static PtlRect setRectCoordinate(BufferedReader br, PtlRect outputRect)
           throws IOException, PtlException, Exception, Error {
	...【TBoxDrawTextBox.javaと同じ処理のため省略
	   ・[top, bottom, left, right]を設定し、PtlRect型変数を返す関数】...
    }
}

プログラムファイル名

TBoxDrawWithFormat.java

入出力操作の例

C:\samples>java cookbook.TBoxDrawWithFormat 
usage: java TBoxDrawWithFormat in-pdf-file out-pdf-file page-num text-to-add text-align formatNum
FormatNum
0: ノーマル 1: 化学式 2: 下付き 3: 上付き

C:\samples>java cookbook.TBoxDrawWithFormat gray_landscape_A4blank.pdf Output_TBoxDrawWithFormat.pdf 1 
ページ数:1
指定する矩形の各数値を入力してください。
top (mm) : 120
bottom (mm) : 80
left (mm) : 50
right (mm) : 130
-- 完了 --

5-3-2-3_DrawWithFormat_0

図3.8 TBoxDrawWithFormatの実行結果(拡大図)