縦書きの文字列を追加します。
package cookbook; import java.io.*; import jp.co.antenna.ptl.*; public class AddTextVertical{ /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 5) { System.out.println("usage: java AddTextVertical in-pdf-file out-pdf-file page-num text-to-add text-align"); 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]; ...【RemovePages.javaと同じ処理のため省略 ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得 ・ページコンテナが空だった場合にエラーを出力して終了】... try (PtlPage page = pages.get(pageToAdd - 1);// ページの取得(パラメータindexは0が先頭のため1を引く) PtlContent content = page.getContent();// ページコンテントの取得 PtlRect outputRect = setOutputRect(br);// 出力矩形の設定(setOutputRectを用いて初期化) PtlParamFont font = new PtlParamFont();// フォント指定用パラメータクラス PtlParamWriteString plainParam = new PtlParamWriteString()) // 文字描画のパラメータクラス。今回は何も設定しない。 { plainParam.setFont(font); //デフォルトのフォントを設定。 // 文字列出力 content.writeStringV(outputRect, PtlContent.ALIGN.valueOf(textAlign), textToAdd, plainParam); } catch (IllegalArgumentException ex){//PtlContent.ALIGNの指定が誤っていた場合のエラーメッセージ System.out.println(ex.getMessage()); System.out.println("ERROR : alignにはPtlContent.ALIGNに含まれる名前を指定してください。"); ex.printStackTrace(); } } ...【AppendPages.javaと同じ処理のため省略 ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力 ・PtlException, Exception, Error を catchするエラー処理 ・finally文で"--完了--"と表示する処理】... } public static PtlRect setOutputRect(BufferedReader br) throws IOException, PtlException, Exception, Error{ float top, bottom, left, right; boolean isValueOkay = false; PtlRect outputRect = new PtlRect(); while(!isValueOkay) { System.out.println("文字列の配置矩形の各数値を入力してください。"); System.out.print("top (mm) : "); top = Float.parseFloat(br.readLine()); System.out.print("bottom (mm) : "); bottom = Float.parseFloat(br.readLine()); if(top < bottom) { System.out.println("topの値はbottomよりも大きい値を指定して再度入力してください。"); continue; } System.out.print("left (mm) : "); left = Float.parseFloat(br.readLine()); System.out.print("right (mm) : "); right = Float.parseFloat(br.readLine()); if(right < left) { System.out.println("rightの値はleftよりも大きい値を指定して再度入力してください。"); continue; } //矩形を正しく指定できた場合の処理 isValueOkay = true; outputRect.setLeft(left); outputRect.setBottom(bottom); outputRect.setRight(right); outputRect.setTop(top); } return outputRect; } }
AddTextVertical.java
C:\samples>java cookbook.AddTextVertical usage: java AddTextVertical in-pdf-file out-pdf-file page-num text-to-add text-align C:\samples>java cookbook.AddTextVertical blankPage.pdf addTextSetVertical.pdf 1 縦書きテキストを入力します ALIGN_TOP ページ数:1 指定する矩形の各数値を入力してください。 top (mm) : 100 bottom (mm) : 20 left (mm) : 50 right (mm) : 70 -- 完了 --