モノクロ画像でステンシルマスクを実現します。
モノクロ画像の白の部分が透明、黒の部分が元のPDF文書上に表示されます。PDF 1.3までは画像の透明を使えませんが、透明効果をステンシルマスクで表現できます。なお、黒の部分は指定のカラーで着色できます。
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
ステンシルマスクにつかう画像自体はモノクロですが、マスクの塗りつぶし箇所に色を指定できます。図の左は塗りつぶし色に灰色、右は赤を指定した結果です。