テキストボックスの文字にテキストボックス下線・取り消し線を設定します。
PtlParamWriteStringTextBoxはテキストボックスに挿入する文字について、下線を引くか引かないかをsetUnderline()で、取り消し線を引くか引かないかをsetStrikeOut()でパラメータ設定できます。
サンプルプログラムでは、テキストボックスで線を引かない文字列と線を引く文字列を挿入します。
下線、取り消し線の線引きの可否は引数で指定します。その他の項目に関してはTBoxDrawTextBox.javaと同一の動作をします。
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 -- 完了 --
次は下線と取り消し線を同時に指定した例です。
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 -- 完了 --