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を処理
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("-- 完了 --");
}
}
}
}

