4.1.1 フォントの統合

4-第1項フォントの統合

狙い・効果

重複するフォントリソースを統合します。

処理の概要

コマンドライン引数を用いてフォントリソースを統合する・しないを切り替えてPDFの最適化処理を行います。PDFのページの挿入などによって、同一PDFファイルに同じフォント情報が複数含まれてしまうことが起こりますが、これによりフォント情報を統合可能です。

最適化に使うパラメータクラスであるPtlParamOptimize及び最適化の詳細については5. PDFの最適化を参照してください。

PDF Tool APIの主な機能

PtlParamOptimize: 最適化に使うパラメータクラス

PtlParamOptimize.APIsetMergeFonts(boolean merge): フォントを統合

設定しない場合はデフォルト値としてfalseが使用されます。

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class OptimizeMargeFontInfo {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java OptimizeMargeFontInfo in-pdf-file out-pdf-file" +
                           " set-marge-font");
        System.out.println("set-marge-font : ");
        System.out.println("0:フォント情報を統合しない 1:フォント情報を統合する");
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3) {
            printUsage();
            return;
        }

        boolean setMargeFont = true;
        try {
            setMargeFont = readBoolArgs(args[2], "set-marge-fontは 1か0で指定してください。");
        }
        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);

            // 最適化の実行
            optimizeDocSetMargeFontInfo(doc, setMargeFont);
            // ファイルに保存します。
            doc.save(outputFile);
        }
        catch (PtlException pex) {
            System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() +
                               "\n  " + pex.getErrorMessage());
        }
        catch (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Error ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        finally {
            System.out.println("-- 完了 --");
        }
    }
    /**
     * PDFの最適化を行う。
     * フォントリソースの情報の統合を行うかどうかを選択する。
     * @param doc 処理を行うPDFの文書を表現したクラス
     * @param setMargeFont フォントリソース情報の統合実行についての可否
     * @throws PtlException PdfToolAPIを実行するときに発生した例外
     */
    public static void optimizeDocSetMargeFontInfo(PtlPDFDocument doc, boolean setMargeFont)
        throws PtlException {
        // 最適化パラメーターの取得
        try (PtlParamOptimize paramOptimize = new PtlParamOptimize()) {

            //各要素の最適化フラグを設定
            paramOptimize.setMergeFonts(setMargeFont);

            // 最適化
            doc.optimize(paramOptimize);
        }
    }
    /**
     * 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 {

	...【ExtractTextSetRect.javaと同じ処理のため省略】...

    }
}

プログラムファイル名

OptimizeMargeFontInfo.java

入出力操作の例

C:\samples>java cookbook.OptimizeMargeFontInfo 
usage: java OptimizeMargeFontInfo in-pdf-file out-pdf-file set-marge-font
set-marge-font : 
0:フォント情報を統合しない 1:フォント情報を統合する

C:\samples>java cookbook.OptimizeMargeFontInfo needMargeFonts.pdf OptimizeMargeFontInfo.pdf 1 
-- 完了 --