印鑑の画像を追加印鑑の画像(印影画像)を用意しておき所定の位置に貼り付けます。
PDF文書のページ上で印鑑を捺印する矩形範囲を指定します。
矩形範囲に印影画像を配置します。
印鑑は文字の上に重ねて配置するときには白地から文字が透けて見える必要がありますので、印影画像は地の部分に透明を指定しておきます。
package cookbook; import jp.co.antenna.ptl.*; public class AddStampOnReceipt { /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 3) { System.out.println("usage: java AddStampOnReceipt in-pdf-file out-pdf-file insert-image-file"); return; } try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlParamOutput outputFile = new PtlParamOutput(args[1]); PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); //コマンドライン引数の取得 String imageURI = args[2]; ...【RemovePages.javaと同じ処理のため省略 ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得 ・ページコンテナが空だった場合にエラーを出力して終了】... try (PtlPage page = pages.get(0);// ページの取得(パラメータindexは0が先頭のため1を引く) PtlContent content = page.getContent();// ページコンテントの取得 PtlRect outputRect = new PtlRect(150, 40, 180, 60);// 出力矩形の設定 PtlParamDrawImage paramDrawImage = new PtlParamDrawImage(); //画像の描画に使うパラメータクラス PtlParamInput insertImage = new PtlParamInput(imageURI)) //画像指定に使うパラメータクラス { //入力画像ストリームの設定 paramDrawImage.setImageStream(insertImage); // 画像出力 content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_BOTTOM_LEFT, 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文で"--完了--"と表示する処理】... } }
AddStampOnReceipt.java
印鑑のイメージ画像を用意して領収書に捺印した例は図のようになります。印鑑画像(sample_stamp.png)は地の部分を透明にしています。なお、PDF1.3までは透明が使えませんので、PDF 1.3以前で捺印を表現するにはステンシルマスクを使います。