2.2.4 印鑑画像を捺印

images/AddStampOnReceipt-top.png

狙い・効果

印鑑の画像を追加印鑑の画像(印影画像)を用意しておき所定の位置に貼り付けます。

処理の概要

透過画像を利用し、PDF文書のページ上で印鑑を捺印する矩形範囲を指定します。

なお、PDF 1.3までのバージョンのPDFでは透過画像を利用することができません。そのため、ステンシルマスクなどの処理で代用する必要があります。詳細は本巻「2.2.7 マスク処理:ステンシルマスク」を参照してください。

本サンプルプログラムでは矩形範囲に印影画像を配置します。

印鑑は文字の上に重ねて配置するときには白地から文字が透けて見える必要があります。そのため、地の部分を透明にした印影画像を用意する必要があります。

『PDF Tool API』の主な機能

プログラム例

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

入出力操作の例

C:\samples>java cookbook.AddStampOnReceipt 
usage: java AddStampOnReceipt in-pdf-file out-pdf-file insert-image-file

C:\samples>java cookbook.AddStampOnReceipt form-out.pdf stamped-on-form.pdf stamp-transparent.png 
-- 完了 --

印鑑のイメージ画像を用意して領収書に捺印した例は図のようになります。印鑑画像(sample_stamp.png)は地の部分を透明にしています。なお、PDF1.3までは透明が使えませんので、PDF 1.3以前で捺印を表現するにはステンシルマスクを使います。

images/AddStampOnReceipt-example.png

図2・12 領収書に画像で捺印した例