2.2.5 フォントの設定

images/TextWaterMarkSetFont-top.png

狙い・効果

透かしの文字列にフォント属性を指定します。

処理の概要

透かしの文字列に指定できるフォント属性は次のとおりです。

  1. フォントファミリー名
  2. フォントのサイズ…文字の大きさをポイント単位で指定します。
  3. フォント埋め込みの有無
  4. イタリックの指定
  5. フォントウェイトの指定…次表の列挙型定数で指定します。
表2・3 フォントウェイトのパラメータ
列挙型定数説明
WEIGHT_BOLDボールド
WEIGHT_EXTRABOLDエクストラボールド
WEIGHT_EXTRALIGHTエクストラライト
WEIGHT_HEAVYヘビー
WEIGHT_LIGHTライト
WEIGHT_MEDIUMミディアム
WEIGHT_NORMALノーマル
WEIGHT_SEMIBOLDセミボールド

本プログラムでは、このうちのフォントファミリー名・フォントのサイズ・イタリックの指定・フォントウェイトの指定を設定します。フォント埋め込みの有無については次項の2.2.6 フォントの埋め込み設定を参照してください。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class TextWaterMarkSetFont {
    // そのクラスのusageを表示する関数
    public static void printUsage(){
        System.out.print("usage: java TextWaterMarkSetFont in-pdf-file out-pdf-file");
        System.out.println(" font-family font-size set-italic set-weight");
        System.out.println("set-italic : ");
        System.out.println("0:字体をイタリックにしない  1:イタリックにする");
        System.out.println("set-weight : ");
        System.out.println("PtlParamFont.WEIGHTに含まれる名前で指定してください。");
    }

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

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

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

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

    public static void appendTextWaterMarkSetFont(PtlPDFDocument doc, String fontFamily,
                                                   float fontSize, boolean setItalic,
                                                   String fontWeight)
        throws PtlException, Exception, Error
    {
        try (PtlParamWaterMarkText waterMarkText = new PtlParamWaterMarkText())
        { 
            // 透かしに指定するフォントの設定
            try (PtlParamFont font = new PtlParamFont(fontFamily, fontSize,
                                                      PtlParamFont.WEIGHT.valueOf(fontWeight),
                                                      setItalic, true))
            {
                waterMarkText.setFont(font);
            }
            catch (IllegalArgumentException ex){//PtlParamFont.WEIGHTに無いフォントを指定した場合
                System.out.println(ex.getMessage());
                System.out.print("ERROR : set-weightには");
                System.out.println("PtlParamFont.WEIGHTに含まれる名前を指定してください。");
                ex.printStackTrace();
            }
        ...【WaterMarkSetRect.javaのappendWaterMarkSetRect()と同じ処理のため省略。
           配置位置はWaterMarkSetPageRange.javaのappendWaterMarkSetPageRange()のものを共通とする。
             ・フォント以外の、テスト用テキスト透かしに共通の設定をセットする。
             ・設定項目:配置位置・名前・Zオーダー・ページ範囲・不透明度・文字列・
              タイリング・フォント・文字の色・縁取りの色・対角線配置の有無・配置角度
             ・PtlPDFDocument docにテキスト透かしを設定する】...
        }
    }
        ...【readBoolArgs()の処理はWaterMarkSetPageRange.javaと共通のため省略。
             ・0 または1 を入力されたargs により、true またはfalse を返すメソッド。
             ・argsが0か1でなかった場合に出力されるエラーメッセージを指定する。】...
}

プログラムファイル名

TextWaterMarkSetFont.java

入出力操作の例

images/TextWaterMarkSetFont.png

次図は上が「Arial Rounded MT Bold」フォントの24ポイント、ウェイトはライトを指定、下が「Arial Bold」フォントの36ポイント、ウェイトはノーマル指定です。

images/TextWaterMarkSetFont-example.png

図2・11 透かしのフォント設定