3.2.4 下線・取り消し線を設定する(テキストボックス)

TBoxDrawWithLine_Top

狙い・効果

テキストボックスの文字にテキストボックス下線・取り消し線を設定します。

処理の概要

PtlParamWriteStringTextBoxはテキストボックスに挿入する文字について、下線を引くか引かないかをsetUnderline()で、取り消し線を引くか引かないかをsetStrikeOut()でパラメータ設定できます。

サンプルプログラムでは、テキストボックスで線を引かない文字列と線を引く文字列を挿入します。

下線、取り消し線の線引きの可否は引数で指定します。その他の項目に関してはTBoxDrawTextBox.javaと同一の動作をします。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

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


public class  TBoxDrawWithLine{

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java TBoxDrawWithLine in-pdf-file out-pdf-file page-num"
                + " text-to-add text-with-line text-align"
                + " setStrikeOut setUnderline");
        System.out.println("setStrikeOut\n 0: 取り消し線を引かない 1: 取り消し線を引く");
        System.out.println("setUnderline\n 0: 下線を引かない 1: 下線を引く");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 8) {
            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 textToAddWithLine = args[4];
            String textAlign = args[5];
            boolean setStrikeOut = true;
            try {
                setStrikeOut =
                    readBoolArgs(args[6], "setStrikeOut は 0か1で指定してください。");
            }
            catch (IllegalArgumentException ex) {
                System.out.println(ex.getMessage());
                printUsage(); // usageメッセージの表示
                return;
            }


            boolean setUnderline = true;
            try {
                setUnderline =
                    readBoolArgs(args[7], "setStrikeOut は 0か1で指定してください。");
            }
            catch (IllegalArgumentException ex) {
                System.out.println(ex.getMessage());
                printUsage(); // usageメッセージの表示
                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.valueOf(textAlign), 210, 297);
                     PtlParamWriteStringTextBox paramNormal = new PtlParamWriteStringTextBox();
                     PtlParamWriteStringTextBox paramLine = new PtlParamWriteStringTextBox()) {// 文字描画のパラメータクラス。今回は何も設定しない。
                    paramLine.setStrikeOut(setStrikeOut);
                    paramLine.setUnderline(setUnderline);

                    // 文字列出力
                    textBox.writeString(textToAdd, paramNormal);
                    textBox.writeString(textToAddWithLine, paramLine);
                    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型変数を返す関数】...
    }

    public static boolean readBoolArgs(String args, String errorMessage)
        throws IllegalArgumentException {
	...【FixUpPDFASetSaveOption.javaと同じ処理のため省略
	   ・0または1を読み取り、boolean型のfalseまたはtrueを返す関数】...
    }
}

プログラムファイル名

TBoxDrawWithLine.java

入出力操作の例

C:\samples>java cookbook.TBoxDrawWithLine 
usage: java TBoxDrawWithLine in-pdf-file out-pdf-file page-num text-to-add text-with-line text-align setStrikeOut setUnderline
setStrikeOut
 0: 取り消し線を引かない 1: 取り消し線を引く
setUnderline
 0: 下線を引かない 1: 下線を引く

C:\samples>java cookbook.TBoxDrawWithLine gray_landscape_A4blank.pdf Output_TBoxDrawWithLine10.pdf 1 "この次の一文に線が入ります。" "これは、線が引かれた文章です。" ALIGN_CENTER 1 0 
ページ数:1
指定する矩形の各数値を入力してください。
top (mm) : 120
bottom (mm) : 80
left (mm) : 50
right (mm) : 130
-- 完了 --

C:\samples>java cookbook.TBoxDrawWithLine gray_landscape_A4blank.pdf Output_TBoxDrawWithLine01.pdf 1 "この次の一文に線が入ります。" "これは、線が引かれた文章です。" ALIGN_CENTER 0 1 
ページ数:1
指定する矩形の各数値を入力してください。
top (mm) : 120
bottom (mm) : 80
left (mm) : 50
right (mm) : 130
-- 完了 --

5-3-2-4_DrawWithLine_01_10.png

図3.9 左図:テキストに下線を引いた例、右図:テキストに取り消し線を引いた例

次は下線と取り消し線を同時に指定した例です。

C:\samples>java cookbook.TBoxDrawWithLine gray_landscape_A4blank.pdf Output_TBoxDrawWithLine11.pdf 1 "この次の一文に線が入ります。" "これは、線が引かれた文章です。" ALIGN_CENTER 1 1 
ページ数:1
指定する矩形の各数値を入力してください。
top (mm) : 120
bottom (mm) : 80
left (mm) : 50
right (mm) : 130
-- 完了 --

5-3-2-4_DrawWithLine_11

図3.10 テキストに下線と取り消し線を同時に指定した例(拡大図)