指定した矩形内の文字削除指定した矩形内の文字・矩形の線上の文字を削除します。
指定したページで指定矩形内のテキストを削除します。画像・パスデータ等テキスト以外のデータは削除されません。削除の様子が分かりやすいよう、矩形は半透明に設定されています。指定矩形の線上の文字も削除対象ですが、どれくらい重なっていたら削除対象とするかについては3.2.2 テキスト:削除時オプションの指定で説明します。
PtlParamSetMask.APIsetRemoveElement(int remove): マスクの削除対象とするエレメントを設定
static int PtlParamSetMask.REMOVE_TEXT: テキストを削除対象とする
package cookbook; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import jp.co.antenna.ptl.*; public class RemoveTextInMask { // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java RemoveTextInMask 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_TEXT); // マスク設定 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; } }
RemoveTextInMask.java
C:\samples>java cookbook.RemoveTextInMask usage: java RemoveTextInMask in-pdf-file out-pdf-file page-num C:\samples>java cookbook.RemoveTextInMask removetext.pdf removetextout.pdf 1 ページ数:1 配置矩形の各数値を入力してください。 top (mm) : 200 bottom (mm) : 110 left (mm) : 70 right (mm) : 145 -- 完了 --
指定した矩形領域のテキストだけを削除します。背景の画像は削除しません。