フォント文書プロパティに含まれるフォント情報を取得する。
PDFが持つ文書プロパティからフォントに関する情報を取得できます。具体的にはフォント名、フォントタイプ、エンコーディング名、エンコーディングタイプ、フォント埋め込みがされているか否かです。これは「4.1.2 PtlEditTextの情報を取得」で取得可能なフォント情報と同一です。
文書プロパティから取得可能なその他の情報に関しては「『PDF CookBook』(第4巻)7.1.1 文書情報の取得」を参照してください。
サンプルプログラムでは、フォント情報を含む入力PDFの情報を表示します。このプログラムのフォント情報以外の項目に関しては「『PDF CookBook』(第4巻)7.1.1 文書情報の取得」と同一の内容です。
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ビューワで読み取ったフォント情報と比較するとこのような形になります。