矩形内のパスデータを削除線や図形などのパスデータについては、パスデータ全体が矩形内に指定された場合に削除します。
指定されたページを入力し、指定矩形に含まれるパスデータを削除します。テキスト・画像等パスデータ以外のデータは削除されません。3.2.3 画像:矩形内の画像データを部分削除とは異なり、パスデータ全体が矩形に含まれていた場合のみ削除されます。削除の様子が分かりやすいよう、矩形は半透明に設定されています。
PtlParamSetMask.APIsetRemoveElement(int remove): マスクの削除対象とするエレメントを設定
static int PtlParamSetMask.REMOVE_PATH: パスを削除対象とする
package cookbook; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import jp.co.antenna.ptl.*; public class RemovePathInMask { // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java RemovePathInMask in-pdf-file out-pdf-file" + " page-num"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 3) { 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 pageToEdit = Integer.parseInt(args[2]); int numPages = doc.getPageCount(); System.out.println("ページ数:" + numPages); if((numPages < 0)||(numPages < pageToEdit)) { System.err.println("page-numは入力PDFの全ページ数よりも小さい正の値を" + "指定してください。"); return; } try (PtlPages pages = doc.getPages()) {// ページコンテナの取得 // ページコンテナが空かどうか if (pages.isEmpty()) { System.out.println("ページコンテナが空\n"); return; } // ページの取得(パラメータindexは0が先頭のため1を引く) try (PtlPage page = pages.get(pageToEdit - 1); PtlParamSetMask paramSetMask = new PtlParamSetMask(); // 矩形の形を指定 PtlRect rect = new PtlRect(setRectCoordinate(br))) { // 削除対象をパスデータのみに設定 paramSetMask.setRemoveElement(PtlParamSetMask.REMOVE_PATH); // マスク設定 paramSetMask.appendRect(rect); paramSetMask.setOpacity(0.3f); page.setMask(paramSetMask); } } // ファイルに保存します。 doc.save(outputFile); } ...【ExtractText.javaと同じ処理のため省略 ・エラーメッセージ処理と出力】... } /** * 矩形の各値を入力してその座標値をもつ矩形を返す関数。 * 原点はPDFの左下端。 * bottomよりtopが大きい、leftよりもrightが大きいなどの矛盾した数値は入力できない。 * 特に外部からの呼び出しを想定しないためprivateとする。 * * @param br BufferedReader。数値の読み取りに使う。 * @return 指定したleft, bottom, right, topの数値を持つPtlRect */ private static PtlRect setRectCoordinate(BufferedReader br) throws IOException, PtlException, Exception, Error { ...【SetMaskColor.javaと同じ処理のため省略】... } return outputRect; } }
RemovePathInMask.java
C:\samples>java cookbook.RemovePathInMask usage: java RemovePathInMask in-pdf-file out-pdf-file page-num C:\samples>java cookbook.RemovePathInMask removepathinmask.pdf removepathinmaskout.pdf 1 ページ数:1 配置矩形の各数値を入力してください。 top (mm) : 250 bottom (mm) : 20 left (mm) : 15 right (mm) : 160 -- 完了 --
指定した矩形領域に収まるパスを削除します。下図左がremovepathinmask.pdfで右が削除結果のPDFです。