2.2.4 透かしの挿入角度

images/TextWaterMarkSetAngle-top.png

狙い・効果

テキスト透かしの挿入角度を設定します。

処理の概要

PDF Tool API V5では、テキスト透かしを用紙の対角線上に配置するかどうかを選択できます。また、対角線上に配置しないとき任意の挿入角度を指定できます。但し、透かしをタイリングするときとテキストを改行するとき透かしの挿入角度設定は無効となります(PDF Tool API V5の機能制限)。

本プログラム例では対角線上に配置するかどうかを選択し、テキスト透かしの挿入角度を指定できます。対角線上に配置する場合は、挿入角度を指定しても無視されます。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class TextWaterMarkSetAngle {
    // そのクラスのusageを表示する関数
    public static void printUsage(){
        System.out.print("usage: java TextWaterMarkSetAngle in-pdf-file out-pdf-file");
        System.out.println(" write-diagonal [text-angle]");
        System.out.println("write-diagonal : ");
        System.out.println("0:透かしのテキストを対角線上に配置しない  1:配置する");
        System.out.println("write-diagonalが1の場合、text-angleを指定しても無視されます。");
    }

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

        // コマンドライン引数の読み取り
        boolean writeDiagonal;
        try
        {
            writeDiagonal = readBoolArgs(args[2], "write-diagonalは0か1で指定してください。");
        }
        catch (IllegalArgumentException ex) {
            System.out.println(ex.getMessage());
            printUsage(); // usageメッセージの表示
            return;
        }
        float textAngle = Float.parseFloat(args[3]);

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

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

    public static void appendTextWaterMarkSetAngle(PtlPDFDocument doc, boolean writeDiagonal,
                                                   float textAngle)
        throws PtlException, Exception, Error
    {
        try (PtlParamWaterMarkText waterMarkText = new PtlParamWaterMarkText())
        {
            // 透かしのテキストを対角線上に配置する設定
            // true: 対角線上に配置する false : 対角線上に配置しない
            waterMarkText.setWriteDiagonal(writeDiagonal);
            // 透かしのテキストを任意の角度で配置する設定
            waterMarkText.setTextAngle(textAngle);

        ...【WaterMarkSetRect.javaのappendWaterMarkSetRect()と同じ処理のため省略。
           配置位置はWaterMarkSetPageRange.javaのappendWaterMarkSetPageRange()のものを共通とする。
             ・対角線配置設定・配置角度以外の、テキスト透かしに共通の設定をセットする。
             ・設定項目:配置位置・名前・Zオーダー・ページ範囲・不透明度・文字列・
              タイリング・フォント・文字の色・縁取りの色
             ・PtlPDFDocument docにテキスト透かしを設定する】...
        }
    }
        ...【readBoolArgs()の処理はWaterMarkSetPageRange.javaと共通のため省略。
             ・0 または1 を入力されたargs により、true またはfalse を返すメソッド。
             ・argsが0か1でなかった場合に出力されるエラーメッセージを指定する。】...
}

プログラムファイル名

TextWaterMarkSetAngle.java

入出力操作の例

images/TextWaterMarkSetAngle.png

次図は左が透かしの角度を15°に設定、右が対角線に設定しています。

images/TextWaterMarkSetAngle-example.png

図2・10 透かしの角度設定