2.2.1 テキスト透かしの挿入

images/TextWaterMarkAppend-top.png

狙い・効果

PDF文書の指定したページにテキスト透かしを挿入します。

処理の概要

本プログラム例はテキスト透かしを入れるページ範囲を指定する文字列と透かしとして使う文字列をコマンドラインから入力します。

また、本プログラム例ではテキスト透かしの属性を固定にしています。テキスト透かしの属性設定は次項以降を参照してください。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class TextWaterMarkAppend {
    // そのクラスのusageを表示する関数
    public static void printUsage(){
        System.out.print("usage: java TextWaterMarkAppend in-pdf-file out-pdf-file");
        System.out.println(" watermark-text watermark-page-range");
        System.out.println("watermark-page-range:");
        System.out.println("透かしを配置するページの範囲を指定する文字列。0が先頭。");
        System.out.println("例:『0,2-4』 と指定すると、1ページと3から5ページに透かしが入ります。");
    }

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

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

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

    public static void appendTextWaterMark(PtlPDFDocument doc, String contentOfWaterMark,
                                           String pageRange)
        throws PtlException, Exception, Error
    {
        try (PtlParamWaterMarkText waterMarkText = new PtlParamWaterMarkText())
        {
            // 透かしに指定する文字列の設定
            waterMarkText.setString(contentOfWaterMark);
            // 透かしを入れるページの範囲の設定 PAGE_RANGE_CUSTOM : ページ範囲指定
            waterMarkText.setCustomPageRange(pageRange);
            waterMarkText.setPageRange(PtlParamWaterMark.PAGE_RANGE.PAGE_RANGE_CUSTOM);

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

プログラムファイル名

TextWaterMarkAppend.java

入出力操作の例

images/TextWaterMarkAppend.png

この例では透かしに使うテキストとして「CookBook_Water_Mark」を入力しています。

images/TextWaterMarkAppend-example.png

図2・7 テキスト透かし設定例