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
ダウンロード
出力結果イメージ
サンプルコード
/* 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を処理 IEnumerablefiles = 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("-- 完了 --"); } } } }