2.2.2 透かしの改行

images/TextWaterMarkAppendWithLF-top.png

狙い・効果

透かしに使う文字列の中のテキスト透かしの改行コード改行コードをサポートします。

処理の概要

テキスト透かしでは文字列中に改行コードがあると、改行コードに続くテキストを2行目に配置します。

本プログラム例ではコマンドラインから透かしの文字列を入力する際に、改行コードの代わりに"¥¥"を挿入することで、2行以上に渡る透かしを作成できます。

複数行のテキスト透かしを挿入するときは透かしの角度の設定は無視されます。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class TextWaterMarkAppendWithLF {
    // そのクラスのusageを表示する関数
    public static void printUsage(){
        System.out.print("usage: java TextWaterMarkAppendWithLF in-pdf-file out-pdf-file");
        System.out.println(" watermark-text-with-LF watermark-page-range");
        System.out.println("watermark-text-with-LF:");
        System.out.println("改行付き透かしの文字列。含まれる『\\\\』を改行記号として扱います。");
        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 < 4)
        {
            printUsage(); // usageメッセージの表示
            return;
        }

        // コマンドライン引数の読み取り
        String argTextWithLF = args[2];
        String pageRange = args[3];

        // 文字列内の改行コード「\\」を\nに置き換え
        String contentOfWaterMark = argTextWithLF.replace("\\\\", "\n");

        ...【WaterMarkSetMargin.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...

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

    }

    public static void appendTextWaterMarkWithLF(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);
            // 改行付きの場合は角度は変更できない(0.0fで指定)
            waterMarkText.setTextAngle(0.0f);

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

プログラムファイル名

TextWaterMarkAppendWithLF.java

入出力操作の例

images/TextWaterMarkAppendWithLF.png

次図のとおり、コマンドライン中の"¥¥"により透かしのテキストを改行しています。

images/TextWaterMarkAppendWithLF-example.png

図2・8 テキスト透かしの改行設定例