OEM販売のご相談
ご相談ください!

PDF Tool APIサンプル集: 各ページの注釈の日付とコメントを取得し一覧にしCSV形式で出力する

PDFの各ページの注釈の日付とコメントを取得し一覧にしてCSVの形式で出力するコンソールアプリケーションです。

概要

サンプルコードの概要

1)注釈を取得したいPDFを開きます
2)ページごとに注釈コンテナを取得します
3)注釈の詳細を取得します
4)取得した詳細から文字列を取得します
5)注釈コンテナにある注釈の数だけ3)4)を繰り返します
6)ページの数だけ2)から5)を繰り返します
7)取得した文字列をCSVとして出力して終了します

コマンドラインでの実行例

sample.exe c:\in\test14.pdf c:\sav\output14.pdf

ダウンロード

サンプルコード

/*
   antenna house pdf tool api v7.0
   c# interface sample program

   概要:各ページの注釈の日付とコメントを取得し一覧にしCSV形式で出力する

   copyright 2024 antenna house,inc.

 ・ソースコードは、複製・改変・再頒布できます。

 ・ソースコードについて、pdf tool apiに関してのお問い合わせは受付ます。
  その他の部分につきましては、お客様にて動作確認等行ってください。
  弊社にて動作を保証するものではありません。
*/
using PdfTkNet;
using System;
using System.IO;
using System.Text;

namespace sampleapi14_cs
{
    internal class sampleapi14_cs
    {
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("usage: sampleapi14_cs.exe in-pdf-file out-csv-file");
                return;
            }
            String outpathAttach = "";
            try
            {
                using (PtlParamInput inputFile = new PtlParamInput(args[0]))
                using (StreamWriter sw = new StreamWriter(args[1], false, Encoding.UTF8))
                using (PtlPDFDocument doc = new PtlPDFDocument())
                {
                    //PDFファイルをロードします。
                    doc.load(inputFile);

                    // タイトル行
                    sw.WriteLine("ページ,ANNOT_TYPE,Date,TextContents,MarkUpTitle");

                    //ページコンテナの取得
                    using (PtlPages pages = doc.getPages())
                    {
                        //ページコンテナが空かどうか
                        if (pages.isEmpty())
                        {
                            Console.WriteLine("ページコンテナが空");
                            return;
                        }

                        int numPages = pages.getCount();
                        for (int i = 0; i < numPages; i++)
                        {
                            Console.WriteLine("ページ : " + (i + 1));
                            using (PtlPage page = pages.get(i)) //ページの取得
                            using (PtlAnnots annots = page.getAnnots()) //注釈コンテナの取得
                            {
                                //注釈コンテナが空かどうか
                                if (annots.isEmpty())
                                {
                                    Console.WriteLine("注釈コンテナが空");
                                }
                                else
                                {
                                    //注釈数の取得
                                    int numAnnots = annots.getCount();
                                    Console.WriteLine("注釈数 : " + numAnnots);
                                    for (int j = 0; j < numAnnots; j++)
                                    {
                                        // 注釈タイプ取得
                                        using (PtlAnnot annot = annots.get(j))
                                        {
                                            StringBuilder sb = new StringBuilder();
                                            sb.Append(i + 1);
                                            if (showAnnot(annot, outpathAttach, sb))
                                            {
                                                sw.WriteLine(sb.ToString());
                                            }
                                            sb.Clear();
                                        }
                                    }
                                }
                            }
                        }
                    }
                    sw.Close();
                }
            }
            catch (PtlException pex)
            {
                Console.WriteLine(pex.getErrorCode() + " : " + pex.getErrorMessageJP());
                pex.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.WriteLine("-- 完了 --");
            }
        }

        static bool showAnnot(PtlAnnot annot, String outpathAttach, StringBuilder sb)
        {
            bool ret = false;
            PtlAnnot.ANNOT_TYPE annotType = annot.getType();
            sb.Append(",\"" + annotType + "\"");
            switch (annotType)
            {
                case PtlAnnot.ANNOT_TYPE.TYPE_TEXT:
                    PtlAnnotText annotText = (PtlAnnotText)annot;
                    showAnnotCommon(annotText, sb);
                    showAnnotMarkup(annotText, sb);
                    ret = true;
                    break;
                case PtlAnnot.ANNOT_TYPE.TYPE_LINK:
                    // 今回は対象外
                    //PtlAnnotLink annotLink = (PtlAnnotLink)annot;
                    //showAnnotCommon(annotLink, sb);
                    //ret = true;
                    break;
                case PtlAnnot.ANNOT_TYPE.TYPE_STAMP:
                    PtlAnnotStamp annotStamp = (PtlAnnotStamp)annot;
                    showAnnotCommon(annotStamp, sb);
                    showAnnotMarkup(annotStamp, sb);
                    ret = true;
                    break;
                case PtlAnnot.ANNOT_TYPE.TYPE_FILE_ATTACHMENT:
                    PtlAnnotFileAttachment annotFileAttachment = (PtlAnnotFileAttachment)annot;
                    showAnnotCommon(annotFileAttachment, sb);
                    showAnnotMarkup(annotFileAttachment, sb);
                    ret = true;
                    break;
                default:
                    showAnnotCommon(annot, sb);
                    if (annot.isMarkup())
                    {
                        showAnnotMarkup(annot, sb);
                    }
                    ret = true;
                    break;
            }
            return ret;
        }

        static void showAnnotCommon(PtlAnnot annot, StringBuilder sb)
        {
            using (PtlDate date = annot.getDate())
            {
                int year = date.getYear();
                int month = date.getMonth();
                int day = date.getDay();
                int hour = date.getHour();
                int min = date.getMin();
                int sec = date.getSec();
                sb.Append("," + year + "/" + month + "/" + day + " " + hour + ":" + min + ":" + sec);
                sb.Append(",\"" + annot.getTextContents() + "\"");
            }
        }

        static void showAnnotMarkup(PtlAnnot annot, StringBuilder sb)
        {
            PtlAnnotMarkup annotMarkup = (PtlAnnotMarkup)annot;
            sb.Append(",\"" + annotMarkup.getMarkUpTitle() + "\"");
        }
    }
}