
モノクロ2値画像でステンシルマスクを実現します。
モノクロ2値画像の白の部分が透明、黒の部分が元のPDF文書上に表示されます。本来PDF 1.3までは画像の透明を使えませんが、この方法で透明効果を表現できます。なお、入力画像の黒の部分は任意のカラーで指定・着色できます。
本サンプルプログラムではRGBで色を指定していますが、他の色空間での色指定も可能です。
package cookbook;
import jp.co.antenna.ptl.*;
public class AddImageSetStencilMask {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 6)
{
System.out.println("usage: java cookbook.AddImageSetStencilMask in-pdf-file out-pdf-file insert-image-file mask-colorR mask-colorG mask-colorB");
return;
}
...【AppendPages.javaと同じ処理のため省略
・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
・PtlParamOutputを用いて出力PDF名を指定】...
//コマンドライン引数の取得
String imageURI = args[2];
int numPages = doc.getPageCount();
System.out.println("ページ数:" + numPages);
float maskColorR = Float.parseFloat(args[3]);
float maskColorG = Float.parseFloat(args[4]);
float maskColorB = Float.parseFloat(args[5]);
...【RemovePages.javaと同じ処理のため省略
・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得
・ページコンテナが空だった場合にエラーを出力して終了】...
try (PtlPage page = pages.get(0);// 先頭ページの取得(パラメータindexは0が先頭)
PtlContent content = page.getContent();// ページコンテントの取得
PtlRect outputRect = page.getViewBox(); // 出力矩形の設定。(ページの大きさを得るためにViewBoxを取得する)
PtlParamInput insertImage = new PtlParamInput(imageURI); //画像指定に使うパラメータクラス
PtlColorDeviceRGB colorRGB = new PtlColorDeviceRGB(maskColorR, maskColorG, maskColorB); // ステンシルマスクに使う色(RGB)を指定。
PtlParamDrawImage paramDrawImage = new PtlParamDrawImage()) //画像の描画に使うパラメータクラス
{
//入力画像ストリームの設定
paramDrawImage.setImageStream(insertImage);
paramDrawImage.setMaskColor(colorRGB,PtlParamDrawImage.MASK_TYPE.MASK_STENCIL);
// 画像出力
content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_CENTER, paramDrawImage);
}
catch (IllegalArgumentException ex){//PtlContent.ALIGNの指定が誤っていた場合のエラーメッセージ
System.out.println(ex.getMessage());
System.out.println("ERROR : alignにはPtlContent.ALIGNに含まれる名前を指定してください。");
ex.printStackTrace();
}
}
...【AppendPages.javaと同じ処理のため省略
・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
・PtlException, Exception, Error を catchするエラー処理
・finally文で"--完了--"と表示する処理】...
}{{AddImageSetStencilMask.png}}
}
AddImageSetStencilMask.java
C:\samples>java cookbook.AddImageSetStencilMask usage: java cookbook.AddImageSetStencilMask in-pdf-file out-pdf-file insert-image-file mask-colorR mask-colorG mask-colorB C:\samples>java cookbook.AddImageSetStencilMask A4sample.pdf A4-stencil-mono.pdf ahlogo_mono.bmp 0.5 0.5 0.5 ページ数:1 -- 完了 -- C:\samples>java cookbook.AddImageSetStencilMask A4sample.pdf A4-stencil-color.pdf ahlogo_mono.bmp 1 0 0 ページ数:1 -- 完了 --
ステンシルマスクにつかう画像自体はモノクロですが、マスクの塗りつぶし箇所に色を指定できます。図の左は塗りつぶし色に灰色、右は赤を指定した結果です。
