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

PDF Tool APIサンプル集:指定したフォルダ内のPDFからXFDFファイルを出力しそれらのXFDFの情報を収集し一覧にしてCSV形式で出力する

指定したフォルダ内のPDFからXFDFファイルを出力し
それらのXFDFの情報を収集し一覧にしてCSV形式で出力するコンソールアプリケーションです。

概要

サンプルコードの概要

1)フォームの情報を取得するPDFを開く
2)PDF Tool API の exportFormFieldsToXFDF を使用して
  PDFのフォーム情報をXFDFファイルに出力
3)出力されたXFDFファイルを読み込んでデータとして利用
  ここでは C# の System.Xml.Linq.Xelement を使用して
  CSVファイルにデータを登録
4)PDFの数だけ繰り返してCSVを保存して終了

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

sample.exe c:\in c:\sav\output15.csv

ダウンロード

出力結果イメージ

出力XFDFイメージ

サンプルコード

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

   概要:フォルダ内のPDFのフォームの内容をPDFごとにXFDFに出力し
        そのXFDFを読み込みデータを抽出して1つのCSVを出力します

   copyright 2024 antenna house,inc.

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

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

namespace sampleapi15_cs
{
    internal class sampleapi15_cs
    {
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("usage: case2_FormFieldsToXFDF in-pdf-folder out-xfdf-file");
                return;
            }
            try
            {
                string in_pdffolder = args[0];
                string out_csvfile = args[1];
                using (StreamWriter sw = new StreamWriter(out_csvfile, false, Encoding.UTF8))
                {
                    // フォルダ内のPDFを処理
                    IEnumerable files =
                    System.IO.Directory.EnumerateFiles(
                        in_pdffolder, "*.pdf", System.IO.SearchOption.AllDirectories);

                    // 値を取得する項目(タイトル行にも使用)
                    string[] itemname = { "", "Text_nen", "Text_tsuki", "Text_hi", "Group1", "Group2", "Group3", "Group4", "Check_piano", "Check_gen", "Check_suisou", "Check_oke", "Check_koto", "Check_gasshou", "Check_opera", "Check_musical", "Check_geki", "Check_puppet", "Check_ballet", "Check_dance", "Check_nichibu", "Check_roudoku", "Check_other", "Text4" };
                    sw.WriteLine(string.Join(@",", itemname));      //ファイルを列挙する
                    foreach (string fl in files)
                    {
                        string flpath = fl.Substring(0, fl.LastIndexOf(@"\")+1);
                        string flname = fl.Substring(fl.LastIndexOf(@"\")+1);
                        string outxfdffilename = flname.Substring(0, flname.LastIndexOf(@".")) + ".xfdf";

                        // PDFから FDFファイルにフォームの内容をエクスポートする
                        using (PtlParamInput inputFile = new PtlParamInput(fl))
                        using (PtlPDFDocument doc = new PtlPDFDocument())
                        using (PtlParamOutput outputFile = new PtlParamOutput(flpath + outxfdffilename))
                        {
                            // PDFファイルをロードします。
                            doc.load(inputFile);

                            // ファイルに保存します。
                            doc.exportFormFieldsToXFDF(outputFile);
                        }
                        // XFDFファイルを読み込んでCSVの形式で書き出す
                        {
                            // XFDFファイルの読み込み
                            XDocument xml_ = XDocument.Load(flpath + outxfdffilename);
                            //ルートの取得
                            XElement root_element_ = xml_.Element("xfdf");
                            IEnumerable elems = xml_.Descendants("{http://ns.adobe.com/xfdf/}field");
                            string[] ivalue = new string[itemname.Count() + 1];
                            // 一行目はタイトル行
                            ivalue[0] = flname;
                            // CSVのタイトル順に値を取得する 
                            for (int i = 0; i < itemname.Count(); i++)
                            {
                                foreach (XElement elem in elems)
                                {
                                    //タイトルとフィールド名が合致するときに値を取得
                                    if (itemname[i].Equals(elem.Attribute("name").Value))
                                    {
                                        //チェック無し時に"Off"が入るので空欄にする
                                        if(!elem.Value.Equals("Off"))
                                        {
                                            ivalue[i] = "\"" + elem.Value + "\"";
                                        }
                                    }
                                }
                            }
                            //カンマ区切りで書き出す
                            sw.WriteLine(string.Join(@",", ivalue));
                        }
                    }
                    sw.Close();
                }
            }
            catch (FileNotFoundException fnfx)
            {
                Console.WriteLine("FileNotFoundException : ErrorCode = " + fnfx.Message +
                                   "\n  " + fnfx.StackTrace);
            }
            catch (PtlException pex)
            {
                Console.WriteLine("PtlException : ErrorCode = " + pex.getErrorCode() +
                                   "\n  " + pex.getErrorMessage());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                Console.WriteLine("-- 完了 --");
            }
        }
    }
}