2.3.1 画像透かしの挿入

images/ImageWaterMarkAppend-top.png

狙い・効果

PDF文書にイメージ画像を透かしとして配置します。

処理の概要

任意のイメージ画像ファイルを透かしとしてPDF文書のページに挿入します。

透かしに使える画像ファイルの形式は、BMP、JPEG、PNG、GIF、TIFF、マルチTIFF形式です。マルチTIFF形式の場合は1ページ目が配置されます。

本プログラム例では画像ファイルの指定以外の設定項目は固定にしています。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class ImageWaterMarkAppend {
    // そのクラスのusageを表示する関数
    public static void printUsage() {
        System.out.print("usage: java ImageWaterMarkAppend in-pdf-file out-pdf-file");
        System.out.println(" watermark-image");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3) {
            printUsage(); // usageメッセージの表示
            return;
        }

        // コマンドライン引数の読み取り
        String pathImage = args[2];
        ...【WaterMarkSetMargin.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...

            // 透かしの追加
            appendImageWaterMark(doc, pathImage);
        ...【EncryptWithUserPass.javaと同じ処理のため省略
             ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
             ・PtlException, Exception, Error を catchするエラー処理
             ・finally文で"--完了--"と表示する処理】...
    }

    public static void appendImageWaterMark(PtlPDFDocument doc, String pathImage)
        throws PtlException, Exception, Error {
        try (PtlParamWaterMarkImage waterMarkImage = new PtlParamWaterMarkImage())
        {
            // 透かしに指定する画像の設定
            try (PtlParamInput inputImage = new PtlParamInput(pathImage)) {  // 画像ファイル
                // 画像描画パラメータに画像ファイルを設定
                waterMarkImage.setImageStream(inputImage);
            }
            // 透かしの倍率の設定
            waterMarkImage.setScale(0.8f);


            // 以下、画像透かし以外と共通するデフォルトの設定
            // 透かしの名前の設定
            waterMarkImage.setName("waterMarkImage");
            // 透かしを配置するときの余白の設定
            waterMarkImage.setMargin(10.0f, 10.0f, 10.0f, 10.0f);
            // 透かしの配置の設定
            waterMarkImage.setAlign(PtlParamWaterMark.ALIGN.ALIGN_CENTER);
            // 透かしのZオーダーの設定 ZORDER_FRONT = 1 
            waterMarkImage.setZorder(PtlParamWaterMark.ZORDER.ZORDER_FRONT);
            // 透かしの不透明度の設定
            waterMarkImage.setOpacity(0.5f);
            // 透かしをタイリングして配置するかどうかの設定
            // false : タイリングして配置しない
            waterMarkImage.setTiling(false);
            // デフォルトの設定終わり

            // 透かしを文書に設定する
            doc.appendWaterMark(waterMarkImage);
        }
    }

}

プログラムファイル名

ImageWaterMarkAppend.java

入出力操作の例

images/ImageWaterMarkAppend.png

下図は左が元のPDF文書と透かしにする画像で、右が画像透かしの挿入後です。画像に透明度を設定していますので、地の文字が透けて見えます。透かしは全ページに挿入されます。

images/ImageWaterMarkAppend-example.png

図2・15 画像透かしの挿入