8.2.1 テキスト透かしに下線を引く

TextWaterMarkSetUnderline_Top

狙い・効果

Acrobat互換のテキスト透かし挿入の際に下線を引きます。

処理の概要

Acrobat互換の透かし(Acrobat互換)テキスト透かしに下線を引くことができます。下線の有無はsetUnderline()で指定します。

  • setAcrobatCompatible()がtrueでないと下線を引くことはできません。
  • Acrobat互換でないテキスト透かしに下線を引こうとすると、プログラムはエラーコード200[Invalid parameter value]の例外を起こして停止します。

サンプルプログラムでは、入力PDFに定型文のテキスト透かしを入れる際に下線を引くか否かを設定します。下線以外のテキスト透かしの属性は、「8.1.1 透かしをAcroabtで加工可能にする」と同一です。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class TextWaterMarkSetUnderline {
    // そのクラスのusageを表示する関数
    public static void printUsage() {
        System.out.print("usage: java TextWaterMarkSetUnderline in-pdf-file out-pdf-file");
        System.out.println("set-underline");
        System.out.println("set-underline : ");
        System.out.println("0:下線を引かない  1:下線を引く");
    }

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

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

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument()) {
            // PDFファイルをロードします。
            doc.load(inputFile);
            // 透かしの追加
            appendTextWaterMarkSetUnderline(doc, setUnderline);
            // ファイルに保存します。
            doc.save(outputFile);
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }

    public static void appendTextWaterMarkSetUnderline(PtlPDFDocument doc,
                                                       boolean setUnderline)
        throws PtlException, Exception, Error {
        try (PtlParamWaterMarkText waterMarkText = new PtlParamWaterMarkText()) {
            // 透かしに指定する下線の設定
            waterMarkText.setUnderline(setUnderline);

            // setUnderline()の設定が正常に動くためにはAcrobatCompatibleをtrueにする必要がある。
            waterMarkText.setAcrobatCompatible(true);

            //setAcrobatCompatibleをtrueにしたときにPDF出力ができるため、以下の設定をする
            // PtlParamWaterMark.setCustomPageRange()では不連続なページを指定しない
            // PtlParamWaterMark.setMargin()を設定しない
            // PtlParamWaterMark.setRect()を設定しない
            // PtlParamWaterMark.setTiling()をfalseにする
            waterMarkText.setTiling(false);
            // PtlParamWaterMarkText.setOutlineColor()を設定しない
            // PtlParamWaterMarkText.setWriteDiagonal()をfalseにする
            waterMarkText.setWriteDiagonal(false);


            // 以下、その他の項目について透かしであることが分かりやすいようデフォルトの設定をする
            // 透かしの名前の設定
            waterMarkText.setName("waterMarkText");
            // 透かしの配置の設定
            waterMarkText.setAlign(PtlParamWaterMark.ALIGN.ALIGN_CENTER);
            // 透かしのZオーダーの設定 ZORDER_FRONT = 1 
            waterMarkText.setZorder(PtlParamWaterMark.ZORDER.ZORDER_FRONT);
            // 透かしの不透明度の設定
            waterMarkText.setOpacity(1.0f);
            // 透かしに指定する文字列の設定
            waterMarkText.setString("WaterMarkText test");
            // 透かしに指定するフォントの設定
            try (PtlParamFont font = new PtlParamFont("Times New Roman", 72.0f,
                                                      PtlParamFont.WEIGHT.WEIGHT_MEDIUM, false, true)) {
                waterMarkText.setFont(font);
            }
            // 透かしの文字に指定する色の設定
            try (PtlColorDeviceRGB colorText = new PtlColorDeviceRGB(1.0f, 0.0f, 0.0f)) {
                waterMarkText.setTextColor(colorText);
            }
            // 透かしのテキストを任意の角度で配置する設定
            waterMarkText.setTextAngle(15.0f);
            // デフォルトの設定終わり

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

    /**
     * 0または1を入力されたargsにより、trueまたはfalseを返すメソッド。
     * 
     * @param args 与えられるコマンドライン引数。0または1でtrueまたはfalseを指定する。
     * @param errorMessage argsが0か1でなかった場合に出力されるエラーメッセージを指定する。
     * @return argsの数値を読み取った結果を戻す
     * @throws java.lang.IllegalArgumentException argsが0か1でなかった場合に発生。
     */
    public static boolean readBoolArgs(String args, String errorMessage)
        throws IllegalArgumentException {
	...【FixUpPDFASetSaveOption.javaと同じ処理のため省略
	   ・0または1を読み取り、boolean型のfalseまたはtrueを返す関数】...
    }
}

プログラムファイル名

TextWaterMarkSetUnderline.java

入出力操作の例

C:\samples>java cookbook.TextWaterMarkSetUnderline 
usage: java TextWaterMarkSetUnderline in-pdf-file out-pdf-fileset-underline
set-underline : 
0:下線を引かない  1:下線を引く

C:\samples>java cookbook.TextWaterMarkSetUnderline novelText.pdf Output_TextWaterMarkSetUnderline.pdf 1 
-- 完了 --

5-8-2-1_TextWaterMarkSetUnderline

図8.2 テキスト透かしに下線を引いた例