3.1.2 テキストボックス内で改行を入れる

TBoxDrawTextBoxSetNewLine_Top

狙い・効果

テキストボックス内の文字列に改行を入れることができます。

処理の概要

テキストボックスに任意の場所に改行を入れたり、改行の大きさを任意に指定します。

例えば呼び出したPtlTextBoxに対してテキストボックスで描画する内容を記述する際に、PtlTextBox.writeString()とPtlTextBox.writeString()の間にPtlTextBox.writeNL()を入れることで、テキストが指定した範囲をはみ出していなくても改行を挟むことができます。

改行の大きさはwriteNL()を数値で指定します。単位はフォントサイズです。

サンプルプログラムでは、テキストボックスに挿入する文字列を『text-to-add-line1』と『text-to-add-line2』の2つの引数に分けて指定し、サイズ指定した改行をその間に挿入します。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

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


public class TBoxDrawTextBoxSetNewLine{

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java TBoxDrawTextBox in-pdf-file out-pdf-file"
                + " page-num text-to-add-line1 text-to-add-line2 new-line-size text-align");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 7) {
            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;
            }

            String textToAdd  = args[3];
            String textToAdd2 = args[4];
            int nlSize = Integer.parseInt(args[5]);
            String textAlign  = args[6];

            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.valueOf(textAlign), 210, 297);
                     PtlParamWriteStringTextBox plainParam = new PtlParamWriteStringTextBox()) {// 文字描画のパラメータクラス。今回は何も設定しない。
                    // 文字列出力
                    textBox.writeString(textToAdd, plainParam);
                    textBox.writeNL(nlSize);
                    textBox.writeString(textToAdd2, plainParam);
                    textBox.terminate();
                }
                catch (IllegalArgumentException ex) {//PtlContent.ALIGN指定のエラー処理
                    System.out.println(ex.getMessage());
                    System.out.println("ERROR : alignにはPtlContent.ALIGNに含まれる名前を指定してください。");
                    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型変数を返す関数】...
    }
}

プログラムファイル名

TBoxDrawTextBoxSetNewLine.java

入出力操作の例

C:\samples>java cookbook.TBoxDrawTextBoxSetNewLine 
usage: java TBoxDrawTextBox in-pdf-file out-pdf-file page-num text-to-add-line1 text-to-add-line2 new-line-size text-align

C:\samples>java cookbook.TBoxDrawTextBoxSetNewLine gray_landscape_A4blank.pdf Output_TBoxDrawTextBoxSetNewLine.pdf 1 "これは1段目のテキストです。このテキスト終了後、25ポイントで指定した改行が入ります。" "これは2段目のテキストです。改行が入っているため段が分かれています。" 25 ALIGN_TOP_LEFT 
ページ数:1
指定する矩形の各数値を入力してください。
top (mm) : 120
bottom (mm) : 80
left (mm) : 50
right (mm) : 130
-- 完了 --

この操作例では『このテキスト終了後、25ポイントで指定した改行が入ります。』と『これは2段目のテキストです。』の間に25ポイントの改行が入っています。

5-3-1-2_DrawTextBoxSetNewLine_s

図3.2 改行が入ったテキストボックス(拡大図)。1段目と2段目は同じテキストボックスに入っている。