PDFドキュメント中の注釈について、マークアップ注釈とポップアップ注釈の情報を表示します。
PDFドキュメント内の注釈について、マークアップ注釈であるか否かを判定できます。また、マークアップ注釈のそれぞれについてポップアップ注釈を持っているか否かを判定でき、ポップアップ注釈の情報を取得できます。
本サンプルプログラムでは、入力PDFのページ毎に付与された注釈について、マークアップ注釈であるか否かを判定し、さらにポップアップ注釈を持っていれば、それらマークアップ注釈、ポップアップ注釈の情報を取得して表示します。
package cookbook; import jp.co.antenna.ptl.*; public class ShowAnnotMarkupInfo { // そのクラスのusageを表示する関数 private static void printUsage(){ System.out.println("usage: java ShowAnnotMarkupInfo in-pdf-file"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 1) { printUsage(); return; } String outpathAttach = ""; if (args.length == 2) { outpathAttach = args[1]; } try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); try (PtlPages pages = doc.getPages()) { //ページコンテナの取得 // ページコンテナが空かどうか if (pages.isEmpty()) { System.out.println("ページコンテナが空\n"); return; } int numPages = pages.getCount(); for(int i=0; i<numPages; i++) { System.out.println("ページ" + (i+1)); try (PtlPage page = pages.get(i)) { // 注釈コンテナが空かどうか if (!page.hasAnnots()) { System.out.println("注釈なし"); continue; } try (PtlAnnots annots = page.getAnnots()) { // 注釈数の取得 int numAnnots = annots.getCount(); System.out.println("注釈数 : " + numAnnots); for(int j=0; j<numAnnots; j++) { System.out.println("index num : " + j + "について、マークアップ注釈か否かを" + "判定します。"); try (PtlAnnot annot = annots.get(j)) { if (annot.isMarkup()) { System.out.println("マークアップ注釈です。" + "情報を表示します。"); showAnnotMarkup(annot); }else { System.out.println("マークアップ注釈では" + "ありません。"); } } } } } } } } ...【AppendAnnotStampDefault.javaと同じ処理のため省略 ・エラーメッセージ処理と出力】... } public static void showAnnotMarkup(PtlAnnot annot) throws PtlException, Exception, Error { PtlAnnotMarkup annotMarkup = (PtlAnnotMarkup)annot; System.out.println("MarkUpTitle = \ "" + annotMarkup.getMarkUpTitle() + "\ "" ); System.out.println("MarkUpSubj = \ "" + annotMarkup.getMarkUpSubj() + "\ "" ); try (PtlDate date = annotMarkup.getMarkUpDate()) { int year = date.getYear(); int month = date.getMonth(); int day = date.getDay(); int hour = date.getHour(); int min = date.getMin(); int sec = date.getSec(); System.out.printf("MarkUpDate : %d/%d/%d %d:%d:%d\n", year, month, day, hour, min, sec); } System.out.printf("MarkUpCA : %f\n", annotMarkup.getMarkUpCA()); if (annotMarkup.hasAnnotPopup()) { try (PtlAnnotPopup popup = annotMarkup.getAnnotPopup()) { System.out.println("ポップアップ注釈が含まれていました。" + "その情報を表示します。"); showPopup(popup); } } } public static void showPopup(PtlAnnot annot) throws PtlException, Exception, Error { System.out.println("ANNOT_TYPE = Popup"); PtlAnnotPopup annotPopup = (PtlAnnotPopup)annot; showAnnotCommon(annotPopup); boolean openState = annotPopup.getOpenState(); if (openState) System.out.println("OPEN_STATE == true" ); else System.out.println("OPEN_STATE == false" ); } public static void showAnnotCommon(PtlAnnot annot) throws PtlException, Exception, Error { ...【ShowAnnotCommonInfo.javaと同じ処理のため省略 ・全ての注釈にあてはまる項目の情報を表示する】... } public static void showColor(PtlColor color) throws PtlException, Exception, Error { ...【ShowAnnotCommonInfo.javaと同じ処理のため省略 ・PtlColorに含まれるカラータイプを判別し、その内容を表示する。】... } } }
ShowAnnotMarkupInfo.java
C:\samples>java cookbook.ShowAnnotMarkupInfo usage: java ShowAnnotMarkupInfo in-pdf-file C:\samples>java cookbook.ShowAnnotMarkupInfo blank-annots.pdf ページ1 注釈数 : 15 index num : 0について、マークアップ注釈か否かを判定します。 マークアップ注釈です。情報を表示します。 MarkUpTitle = "koba" MarkUpSubj = "タイプライターテキスト" MarkUpDate : 2019/8/1 15:48:40 MarkUpCA : 1.000000 … 2番目以降省略 …