矩形内の画像データを削除指定矩形内の画像データを部分削除します。
指定されたページを入力し、指定矩形に含まれる部分の画像を削除します。テキスト・パスデータ等画像以外のデータは削除されません。削除の様子が分かりやすいよう、矩形は半透明に設定されています。
PtlParamSetMask.APIsetRemoveElement(int remove): マスクの削除対象とするエレメントを設定
static int PtlParamSetMask.REMOVE_IMAGE: 画像を削除対象とする
package cookbook; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import jp.co.antenna.ptl.*; public class RemoveImageInMask { // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java RemoveImageInMask 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_IMAGE); // マスク設定 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; } }
RemoveImageInMask.java
C:\samples>java cookbook.RemoveImageInMask usage: java RemoveImageInMask in-pdf-file out-pdf-file page-num C:\samples>java cookbook.RemoveImageInMask countImage.pdf removeimageout.pdf 3 ページ数:3 配置矩形の各数値を入力してください。 top (mm) : 142 bottom (mm) : 52 left (mm) : 50 right (mm) : 130 -- 完了 --
下図左のcountImage.pdfの3ページから指定した矩形領域の画像を削除します。右が削除結果のPDFです。