10.1.1 ドキュメントのフォント情報取得

GetDocInfoWithFontInfo_Top

狙い・効果

フォント文書プロパティに含まれるフォント情報を取得する。

処理の概要

PDFが持つ文書プロパティからフォントに関する情報を取得できます。具体的にはフォント名、フォントタイプ、エンコーディング名、エンコーディングタイプ、フォント埋め込みがされているか否かです。これは「4.1.2 PtlEditTextの情報を取得」で取得可能なフォント情報と同一です。

文書プロパティから取得可能なその他の情報に関しては「『PDF CookBook』(第4巻)7.1.1 文書情報の取得」を参照してください。

サンプルプログラムでは、フォント情報を含む入力PDFの情報を表示します。このプログラムのフォント情報以外の項目に関しては「『PDF CookBook』(第4巻)7.1.1 文書情報の取得」と同一の内容です。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class GetDocInfoWithFontInfo {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java GetDocInfoWithFontInfo in-pdf-file");
     }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 1) {
            printUsage();
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlPDFDocument doc = new PtlPDFDocument()) {
            // PDFファイルをロード
            doc.load(inputFile);

            try (PtlDocProperty docProperty = doc.getDocProperty(); //PDFの文書プロパティ
                 PtlDocInfo docinf = docProperty.getDocInfo();    //PDFの文書情報
                 // PDFのカスタムプロパティ
                 PtlCustomProperties customProperties = docProperty.getCustomProperties();
                 //フォント情報を扱うコンテナ
                 PtlFontInfos fontInfos =  docProperty.getFontInfos()   ) {
                //フォント情報を取得
                getDocFontInfo(fontInfos);

                // タイトル取得
                System.out.println("Title : " + docinf.getTitle());
                // 著者取得
                System.out.println("Author : " + docinf.getAuthor());
                // サブジェクト取得
                System.out.println("Subject : " + docinf.getSubject());
                // キーワード取得
                System.out.println("Keywords : " + docinf.getKeywords());
                // クリエータ取得
                System.out.println("Creator : " + docinf.getCreator());
                // プロデューサ取得
                System.out.println("Producer : " + docinf.getProducer());
                // 作成日付を取得
                try (PtlDate dateCreate = docinf.getCreationDate()) {
                    System.out.println("CreationDate : "
                        + dateCreate.getYear()
                        + "/" + dateCreate.getMonth()
                        + "/" + dateCreate.getDay()
                        + " " + dateCreate.getHour()
                        + ":" + dateCreate.getMin()
                        + ":" + dateCreate.getSec());
                }

                // 更新日付を取得
                try (PtlDate dateMod = docinf.getModDate()) {
                    System.out.println("ModDate : "
                        + dateMod.getYear()
                        + "/" + dateMod.getMonth()
                        + "/" + dateMod.getDay()
                        + " " + dateMod.getHour()
                        + ":" + dateMod.getMin()
                        + ":" + dateMod.getSec());
                }

                // カスタムプロパティが空かどうか判定
                System.out.println("");
                if(customProperties.isEmpty()) {
                    //空の場合はそう表示する
                    System.out.println("このPDFにカスタムプロパティは設定されていません。");
                }else {  // カスタムプロパティが空でない場合に内容を取得する
                    System.out.println("このPDFのカスタムプロパティを表示します。");
                    int propertiesNum = customProperties.getCount();
                    for(int i = 0; i < propertiesNum; i++){
                        System.out.println("Custom Property No." + (i+1) +":");
                        try(PtlCustomProperty customProperty = customProperties.get(i)){
                            System.out.println("名前 : " + customProperty.getName());
                            System.out.println("値 : " + customProperty.getValue());
                            System.out.println("");
                        }
                    }
                }
            }
        }
        catch (PtlException pex) {
            System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() +
                               "\n  " + pex.getErrorMessage());
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }


    /**
     * ドキュメントが持つフォント情報を全て表示する関数。
     * @param fontInfos
     * @throws PtlException
     * @throws Exception
     * @throws Error 
     */
    private static void getDocFontInfo(PtlFontInfos fontInfos)
    throws PtlException, Exception, Error {
        System.out.println("Font : ");
        //フォント情報の有無を確認する
        if(fontInfos.isEmpty()) {
            System.out.println("  このドキュメントにフォント情報はありません。");

        }else {
            //フォント情報がある場合の処理を行う
            int fontNum = fontInfos.getCount();
            System.out.println("  フォント総数 : " + fontNum);
            for(int i = 0; i < fontNum; i++) {
                try(PtlFontInfo fontInfo = fontInfos.get(i)) {
                    System.out.println("  --Font index No: " + i);
                    System.out.println("  フォント名:" + fontInfo.getFontName());
                    System.out.println("  フォントタイプ:" +  fontInfo.getFontType());
                    System.out.println("  エンコーディング名:" + fontInfo.getEncodingName());
                    System.out.println("  エンコーディングタイプ:" + fontInfo.getEncodingType());
                    if(fontInfo.isEmbedded()) {
                        System.out.println("  フォント埋め込み:あり");
                    }else {
                        System.out.println("  フォント埋め込み:なし");
                    }
                }
            }
        }
    }
}

プログラムファイル名

GetDocInfoWithFontInfo.java

入出力操作の例

C:\samples>java cookbook.GetDocInfoWithFontInfo 
usage: java GetDocInfoWithFontInfo in-pdf-file

C:\samples>java cookbook.GetDocInfoWithFontInfo sample_overlap_text.pdf 
Font : 
  フォント総数 : 3
  --Font index No: 0
  フォント名:BMXSQV+MS-PGothic
  フォントタイプ:FONT_CID_TRUETYPE
  エンコーディング名:Identity-H
  エンコーディングタイプ:ENCODING_NAME
  フォント埋め込み:あり
  --Font index No: 1
  フォント名:PWJWUM+YuMincho-Regular
  フォントタイプ:FONT_CID_TRUETYPE
  エンコーディング名:Identity-H
  エンコーディングタイプ:ENCODING_NAME
  フォント埋め込み:あり
  --Font index No: 2
  フォント名:RWOPWG+MS-UIGothic
  フォントタイプ:FONT_CID_TRUETYPE
  エンコーディング名:Identity-H
  エンコーディングタイプ:ENCODING_NAME
  フォント埋め込み:あり
Title : 
Author : 
Subject : 
Keywords : 
Creator : 
Producer : Antenna House PDF Driver V8.0 MR6 (8.0.6.0)
CreationDate : 2023/6/15 16:54:48
ModDate : 2023/6/15 17:23:17

このPDFにカスタムプロパティは設定されていません。
-- 完了 --

操作例では「9.2.1重なり合う同じ文字を除外して抽出する」に使用したPDFのフォント情報を読み取っています。

他のPDFビューワで読み取ったフォント情報と比較するとこのような形になります。

5-10-1-1_GetDocInfoWithFontInfo

図10.1 PDFビューワAdobe Acrobatで表示した操作例PDFのフォント情報