
マスク矩形指定マスクの矩形を指定し、マスク矩形塗りつぶし指定した色で塗りつぶします。
マスクを指定したいページ及び塗りつぶす色を指定し、指定矩形内のテキスト、画像、図形を削除して塗りつぶします。『PDF Tool API』における色指定は、色空間を指定した上で、色要素を指定、という2 段階になります。(詳細は「『PDF CookBook』(第1巻)2.1.3 文字の色指定」を参照してください)
本サンプルプログラムでは、色空間としてRGB カラーを使い、赤(R)、緑(G)、青(B)の3 原色それぞれの値を指定します。
PtlPage.APIsetMask(PtlParamSetMask paramSetMask): ページにマスクを設定する
PtlParamSetMask: マスク処理のパラメータを表現したクラス
PtlParamSetMask.APIappendRect(PtlRect rectMM): マスクする矩形を追加
PtlParamSetMask.APIsetMaskColor(PtlColor color): マスクの色を決定
package cookbook;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import jp.co.antenna.ptl.*;
public class SetMaskColor {
// そのクラスのusageを表示する関数
private static void printUsage() {
System.out.println("usage: java SetMaskColor in-pdf-file out-pdf-file" +
" page-num colorR colorG colorB");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 6) {
printUsage();
return;
}
// コマンドライン引数の読み取り
float colorR = Float.parseFloat(args[3]);
float colorG = Float.parseFloat(args[4]);
float colorB = Float.parseFloat(args[5]);
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;
}
try (PtlPages pages = doc.getPages()) {// ページコンテナの取得
// ページコンテナが空かどうか
if (pages.isEmpty()) {
System.out.println("ページコンテナが空\n");
return;
}
// ページの取得(パラメータindexは0が先頭のため1を引く)
try (PtlPage page = pages.get(pageToAdd - 1);
PtlParamSetMask paramSetMask = new PtlParamSetMask();
// 矩形の形を指定
PtlRect rect = new PtlRect( setRectCoordinate(br) );
// 矩形の色を指定
PtlColorDeviceRGB color = new PtlColorDeviceRGB(colorR,
colorG,
colorB)) {
// マスク設定
paramSetMask.appendRect(rect);
paramSetMask.setMaskColor(color);
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 {
float top, bottom, left, right;
boolean isValueOkay = false;
PtlRect outputRect = new PtlRect();
while(!isValueOkay) {
System.out.println("配置矩形の各数値を入力してください。");
System.out.print("top (mm) : ");
top = Float.parseFloat(br.readLine());
System.out.print("bottom (mm) : ");
bottom = Float.parseFloat(br.readLine());
if(top < bottom) {
System.out.println("topの値はbottomよりも大きい値を指定して" +
"再度入力してください。");
continue;
}
System.out.print("left (mm) : ");
left = Float.parseFloat(br.readLine());
System.out.print("right (mm) : ");
right = Float.parseFloat(br.readLine());
if(right < left) {
System.out.println("rightの値はleftよりも大きい値を指定して" +
"再度入力してください。");
continue;
}
//矩形を正しく指定できた場合の処理
isValueOkay = true;
outputRect.setLeft(left);
outputRect.setBottom(bottom);
outputRect.setRight(right);
outputRect.setTop(top);
}
return outputRect;
}
}
SetMaskColor.java
C:\samples>java cookbook.SetMaskColor usage: java SetMaskColor in-pdf-file out-pdf-file page-num colorR colorG colorB C:\samples>java cookbook.SetMaskColor novelText.pdf SetMaskColor.pdf 1 1 0 0 ページ数:2 配置矩形の各数値を入力してください。 top (mm) : 200 bottom (mm) : 150 left (mm) : 40 right (mm) : 90 -- 完了 --
指定した矩形範囲のテキストを削除し、矩形範囲を赤で塗りつぶします。
