2.2.6 フォントの埋め込み設定

images/TextWaterMarkSetEmbedFont-top.png

狙い・効果

透かし文字列にフォントの埋め込みを指定します。

処理の概要

PDF文書に挿入する透かしの文字列にフォント埋め込みをするかどうかを設定します。フォントの埋め込みは本文テキストと同じです。

本プログラム例では、フォントファミリー名とフォント埋め込みの可否のそれぞれをコマンドライン引数で指定します。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class TextWaterMarkSetEmbedFont {
    // そのクラスのusageを表示する関数
    public static void printUsage(){
        System.out.print("usage: java TextWaterMarkSetEmbedFont in-pdf-file out-pdf-file");
        System.out.println(" font-family set-embed");
        System.out.println("set-embed : ");
        System.out.println("0:透かし文字にフォント埋め込みをしない  1:フォント埋め込みをする");
    }

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

        // コマンドライン引数の読み取り(jit-lock-function 2254)
        String fontFamily = args[2];
        boolean setEmbed = true;
        try
        {
            setEmbed = readBoolArgs(args[3], "set-embedは 1か0で指定してください。");
        }
        catch (IllegalArgumentException ex) {
            System.out.println(ex.getMessage());
            printUsage(); // usageメッセージの表示
            return;
        }
        ...【WaterMarkSetMargin.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...

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

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

プログラムファイル名

TextWaterMarkSetEmbedFont.java

入出力操作の例

images/TextWaterMarkSetEmbedFont.png

次図は上が透かしの文字列にフォントを埋め込まないPDF文書のプロパティ、下がフォントを埋め込んだPDF文書のプロパティです。

images/TextWaterMarkSetEmbedFont-example.png

図2・12 PDFのプロパティ