2.1.2 透かしの配置の設定―その2

images/WaterMarkSetMargin-top.png

狙い・効果

表示矩形を基準にして透かしの配置領域を指定します。

処理の概要

表示矩形の内側に、上下左右の空白を設定します。

注意:

空白を設定した場合、その透かしはAcrobat®互換にすることができなくなります。透かしのAcrobat®互換の詳細に関しては「『PDF CookBook』(第5巻)第8章 透かしのAcrobat®互換対応と機能追加」を参照してください。

空きを確保した後の内側を透かしの配置領域とします。

配置領域に対して寄せを指定します。寄せの指定方法は2.1.1 透かしの配置の設定―その1を参照してください。

本プログラム例ではその他の設定項目は固定にしています。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;


public class WaterMarkSetMargin {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 7) {
            System.out.print("usage: java WaterMarkSetMargin in-pdf-file out-pdf-file watermark-align ");
            System.out.println("marginTop marginLeft marginBottom marginRight");
            return;
        }
        // コマンドライン引数の取得 
        String waterMarkAlign = args[2];
        float marginTop    = Float.parseFloat(args[3]);
        float marginLeft   = Float.parseFloat(args[4]);
        float marginBottom = Float.parseFloat(args[5]);
        float marginRight  = Float.parseFloat(args[6]);

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument()) {
            // PDFファイルをロードします。
            doc.load(inputFile);

            // 透かしの追加
            appendWaterMarkSetMargin(doc, waterMarkAlign,
                                     marginTop, marginLeft, marginBottom, marginRight);

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

    public static void appendWaterMarkSetMargin(PtlPDFDocument doc, String waterMarkAlign,
                                                float marginTop, float marginLeft,
                                                float marginBottom, float marginRight)
        throws PtlException, Exception, Error {
        //透かしの設定
        try (PtlParamWaterMarkText waterMarkText = new PtlParamWaterMarkText()) {
            // 透かしの配置の設定
            System.out.println("透かしの配置(watermark-align)を設定します。: " + waterMarkAlign);
            try {
                waterMarkText.setAlign(PtlParamWaterMark.ALIGN.valueOf(waterMarkAlign));
            }
            catch (IllegalArgumentException ex){ // PtlParamWaterMark.ALIGN以外の文字列のエラーメッセージ
                System.out.println(ex.getMessage());
                System.out.print("ERROR : ");
                System.out.println("alignにはPtlContent.ALIGNに含まれる名前を指定してください。");
                ex.printStackTrace();
            }
            // 透かしを配置するときの余白の設定
            System.out.println("表示矩形の内側の余白を指定します。");
            System.out.println("marginTop (mm) : " + marginTop);
            System.out.println("marginLeft (mm) : " + marginLeft);
            System.out.println("marginBottom (mm) : " + marginBottom);
            System.out.println("marginRight (mm) : " + marginRight);
            waterMarkText.setMargin(marginTop, marginLeft, marginBottom, marginRight);

        ...【WaterMarkSetRect.javaのappendWaterMarkSetRect()と同じ処理のため省略。
             ・透かしの配置以外の、テスト用テキスト透かしに共通の設定をセットする。
             ・設定項目:名前・Zオーダー・ページ範囲・不透明度・文字列・
              タイリング・フォント・文字の色・縁取りの色・対角線配置の有無・配置角度
             ・PtlPDFDocument docにテキスト透かしを設定する】...
        }
    }
}

プログラムファイル名

WaterMarkSetMargin.java

入出力操作の例

images/WaterMarkSetMargin.png

この例では、用紙の上下左右に30mmの余白を指定します。その内側の上に寄せて透かしを配置します。次図は先頭ページのみの例です。

images/WaterMarkSetMargin-example.png

図2・2 マージンを指定して上の位置に透かしを配置