テキストボックスのテキストボックス行間・字間を設定します。
PtlParamWriteStringTextBoxで描画する行間・字間を数値で設定します。
行間の指定にはsetLineSpacing()を、字間はsetCharSpacing()を使用します。
サンプルプログラムでは、テキストボックスで文字列を描画する際に行間・字間を数値で指定します。その他の項目に関してはTBoxDrawTextBox.javaと同一の動作をします。
package cookbook; import java.io.*; import jp.co.antenna.ptl.*; public class TBoxDrawWithSpacing{ // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java TBoxDrawWithSpacing in-pdf-file out-pdf-file" + " page-num text-to-add text-align" + " line-spacing-num char-spacing-num"); System.out.println("line-spacing-num : 行間の設定。フォントサイズに対する倍数で、" + "-1~3の値で設定(小数可)"); System.out.println("char-spacing-num : 文字間隔の設定。フォントサイズに対する倍数で、" + "-1~2の値で設定(小数可)"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 7) { printUsage(); return; } //line-spacing-num、char-spacing-numの引数の判定 float lineSpacingNum = Float.parseFloat(args[5]); if(lineSpacingNum < -1 || 3 < lineSpacingNum ){ System.out.println("ERROR:line-spacing-numは-1~3の数値で設定して下さい。"); printUsage(); // usageメッセージの表示 return; } float charSpacingNum = Float.parseFloat(args[6]); if(charSpacingNum < -1 || 2 < charSpacingNum ){ System.out.println("ERROR:char-spacing-numは-1~2の数値で設定して下さい。"); printUsage(); // usageメッセージの表示 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 textAlign = args[4]; 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 paramSpacing = new PtlParamWriteStringTextBox()) {// 文字描画のパラメータクラス。 paramSpacing.setLineSpacing(lineSpacingNum); //行間の設定 paramSpacing.setCharSpacing(charSpacingNum); //文字間隔の設定 // 文字列出力 textBox.writeString(textToAdd, paramSpacing); 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型変数を返す関数】... } }
TBoxDrawWithSpacing.java
C:\samples>java cookbook.TBoxDrawWithSpacing usage: java TBoxDrawWithSpacing in-pdf-file out-pdf-file page-num text-to-add text-align line-spacing-num char-spacing-num line-spacing-num : 行間の設定。フォントサイズに対する倍数で、-1~3の値で設定(小数可) char-spacing-num : 文字間隔の設定。フォントサイズに対する倍数で、-1~2の値で設定(小数可) C:\samples>java cookbook.TBoxDrawWithSpacing gray_landscape_A4blank.pdf Output_TBoxDrawWithSpacing2020.pdf 1 "テキストボックス入力文章。このようにテキストボックスに入力された文章は折り返されます。" ALIGN_CENTER 2.0 2.0 ページ数:1 指定する矩形の各数値を入力してください。 top (mm) : 120 bottom (mm) : 80 left (mm) : 50 right (mm) : 130 -- 完了 --
この操作例では行間に2.0を指定し、字間に2.0を指定しています。
行間に1.0、字間に-1.0を指定した場合は次のようになります。
C:\samples>java cookbook.TBoxDrawWithSpacing gray_landscape_A4blank.pdf Output_TBoxDrawWithSpacing10-10.pdf 1 "テキストボックス入力文章。このようにテキストボックスに入力された文章は折り返されます。" ALIGN_CENTER 1.0 -1.0 ページ数:1 指定する矩形の各数値を入力してください。 top (mm) : 120 bottom (mm) : 80 left (mm) : 50 right (mm) : 130 -- 完了 --