PDF文書のページ上に直線を描画します。
PDF文書の中で、直線を描くページ位置を指定します。
指定したページを読み込みます。
線の開始位置と終了位置を指定します。
線の属性を指定します。
直線を書き込み、PDF文書を保存します。
package cookbook; import java.io.*; import jp.co.antenna.ptl.*; public class AddLine { /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 9) { System.out.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity"); System.out.println("line-style:\n 0: 実線, 1: 破線"); System.out.println("line-width:\n 0: 細い, 1: 中, 2:太い"); return; } // line-styleの判定 int lineStyle = Integer.parseInt(args[3]); switch(lineStyle){ case 0: case 1: break; default : System.err.println("line-styleには0か1の数値を指定してください。"); System.err.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity"); System.err.println("line-style:\n 0: 実線, 1: 破線"); System.err.println("line-width:\n 0: 細い, 1: 中, 2:太い"); return; } // line-widthの判定 int lineWidth = Integer.parseInt(args[4]); switch(lineWidth){ case 0: case 1: case 2: break; default : System.err.println("line-widthには0から2の数値を指定してください。"); System.err.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity"); System.err.println("line-style:\n 0: 実線, 1: 破線"); System.err.println("line-width:\n 0: 細い, 1: 中, 2:太い"); 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("page-numは入力PDFの全ページ数よりも小さい正の値を指定してください。"); return; } float colorR = Float.parseFloat(args[5]); float colorG = Float.parseFloat(args[6]); float colorB = Float.parseFloat(args[7]); float opacity = Float.parseFloat(args[8]); ...【RemovePages.javaと同じ処理のため省略 ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得 ・ページコンテナが空だった場合にエラーを出力して終了】... // フォームの描画処理() try (PtlPage page = pages.get(pageToAdd - 1))// ページの取得(パラメータindexは0が先頭のため1を引く) { drawLineOnPage(page, lineStyle, lineWidth, colorR, colorG, colorB, opacity, br); } } ...【AppendPages.javaと同じ処理のため省略 ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力 ・PtlException, Exception, Error を catchするエラー処理 ・finally文で"--完了--"と表示する処理】... } public static void drawLineOnPage(PtlPage page, int lineStyle, int lineWidth, float colorR, float colorG, float colorB, float opacity, BufferedReader br) throws PtlException, Exception, Error{ System.out.println("線の始点を設定します。"); try(PtlPoint startPoint = new PtlPoint(setPoint(br)) ) // 始点の設定(setPointを用いて初期化) { System.out.println("線の終点を設定します。"); try(PtlPoint endPoint = new PtlPoint(setPoint(br)) ) // 始点の設定(setPointを用いて初期化) { try(PtlContent content = page.getContent(); // ページコンテントの取得 PtlColorDeviceRGB colorRGB = new PtlColorDeviceRGB(colorR, colorG, colorB); //色を指定 PtlParamDrawShape paramDrawShape = new PtlParamDrawShape()) // 線の描画用パラメータクラス { paramDrawShape.setLineColor(colorRGB); // 線の色を指定色に設定 paramDrawShape.setOpacity(opacity); // 透明度を設定 // lineStyleの設定 switch(lineStyle){ case 0: paramDrawShape.setLineStyle(PtlParamDrawShape.LINE_STYLE.LINE_STYLE_SOLID); break; case 1: paramDrawShape.setLineStyle(PtlParamDrawShape.LINE_STYLE.LINE_STYLE_DASHED); break; } // lineWidthの設定 switch(lineWidth){ case 0: paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_THIN); break; case 1: paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_MIDDLE); break; case 2: paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_THICK); break; } // 指定ページの挿入 content.drawLine(startPoint, endPoint, paramDrawShape); } } } } public static PtlPoint setPoint(BufferedReader br) throws IOException, PtlException, Exception, Error{ float x, y; System.out.println("x座標、y座標を入力してください。原点は用紙の左下です。"); System.out.print("x (mm) : "); x = Float.parseFloat(br.readLine()); System.out.print("y (mm) : "); y = Float.parseFloat(br.readLine()); PtlPoint pointToSet = new PtlPoint(x,y); return pointToSet; } }
AddLine.java