
矩形内の画像データを削除指定矩形内の画像データを部分削除します。
指定されたページを入力し、指定矩形に含まれる部分の画像を削除します。テキスト・パスデータ等画像以外のデータは削除されません。削除の様子が分かりやすいよう、矩形は半透明に設定されています。
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です。
