8.2.2 複数行のテキストの行揃えを指定する

TextWaterMarkSetTextAlign_Top

狙い・効果

Acrobat互換のテキスト透かし挿入の際に透かし(Acrobat互換)複数行のテキストの行揃えを指定します。

処理の概要

Acrobat互換の設定で複数行のテキスト透かしを挿入する際、setTextAlignで行揃えを指定します。指定できるのは左揃え、中央揃え、右揃えの3種類です。

複数行のテキスト透かしを挿入する場合はテキストに角度をつけないでください。テキストの角度が0°以外で指定されているとテキスト透かしの改行が無視されます。その場合、改行が行われないため行揃え設定も反映されません。

サンプルプログラムでは、入力PDFに3行のテキスト透かしを入れ、行揃え(左揃え・中央揃え・右揃え)を指定します。テキスト透かしの文面は固定です。テキストには傾きが設定されていません。また、挿入されるテキスト透かしはAcrobat互換の設定になっています。

また、傾き以外のテキスト透かしの属性は固定にしています。この固定された内容は本書「8.1.1 透かしをAcroabtで加工可能にする」と同一です。

『PDF Tool API』の主な機能

enum型及びint型の対応する値は以下の通りです。

表8.1 PtlParamWaterMarkText.TEXT_ALIGNの種別
列挙型定数
行揃え
TEXT_ALIGN_LEFT = 0
左寄せ
TEXT_ALIGN_CENTER = 1
中央寄せ
TEXT_ALIGN_RIGHT = 2
右寄せ

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class TextWaterMarkSetTextAlign {
    // そのクラスのusageを表示する関数
    public static void printUsage() {
        System.out.print("usage: java TextWaterMarkSetTextAlign in-pdf-file out-pdf-file");
        System.out.println("set-text-align");
        System.out.println("set-text-align : ");
        System.out.println("0 : 左寄せ  1 : 中央寄せ  2 : 右寄せ");
    }

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

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

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

    public static void appendTextWaterMarkSetTextAlign(PtlPDFDocument doc,
                                                       String textAlign)
        throws PtlException, Exception, Error {
        try (PtlParamWaterMarkText waterMarkText = new PtlParamWaterMarkText()) {
            //waterMarkText.setTextAlign();
            switch(textAlign) {
                case "0"://左寄せ
                    waterMarkText.setTextAlign(PtlParamWaterMarkText.TEXT_ALIGN.TEXT_ALIGN_LEFT.value());
                    break;
                case "1"://中央寄せ
                    waterMarkText.setTextAlign(PtlParamWaterMarkText.TEXT_ALIGN.TEXT_ALIGN_CENTER.value());
                    break;
                case "2"://右寄せ
                    waterMarkText.setTextAlign(PtlParamWaterMarkText.TEXT_ALIGN.TEXT_ALIGN_RIGHT.value());
                    break;
                default:
                    throw new IllegalArgumentException("set-text-alignは0から2の整数で入力して下さい");
            }

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

            // 複数行で透かしを表示するためには傾きが0度である必要がある
            waterMarkText.setTextAngle(0.0f);

            //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 line1 \n Another Line watermarkText line2 \n line3");
            // 透かしに指定するフォントの設定
            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);
            }
            // デフォルトの設定終わり

            // 透かしを文書に設定する
            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を返す関数】...
    }
}

プログラムファイル名

TextWaterMarkSetTextAlign.java

入出力操作の例

C:\samples>java cookbook.TextWaterMarkSetTextAlign 
usage: java TextWaterMarkSetTextAlign in-pdf-file out-pdf-fileset-text-align
set-text-align : 
0 : 左寄せ  1 : 中央寄せ  2 : 右寄せ

C:\samples>java cookbook.TextWaterMarkSetTextAlign novelText.pdf Output_TextWaterMarkSetTextAlign.pdf 2 
-- 完了 --

この操作例ではテキスト透かしを右揃えで指定しています。

5-8-2-2_TextWaterMarkSetTextAlign

図8.3 右揃えのテキスト透かしを挿入した例