「DioDocs for PDF(ディオドック)」では、PDFフォームのフィールドにデータを入力することができます。
var doc = new GcPdfDocument();
var fc = new FontCollection();
// フォントを設定
fc.RegisterFont("Fonts\\ipaexg.ttf");
fc.RegisterFont("Fonts\\ipaexm.ttf");
doc.FontCollection = fc;
// PDFを読み込み
doc.Load(new FileStream("mescius_order_template.pdf", FileMode.Open, FileAccess.Read));
// PDFフォームへ入力するデータ
var kvp = new KeyValuePair<string, IList<string>>[]
{
new KeyValuePair<string, IList<string>>("氏名", new string[] { "葡萄城 太郎" }),
new KeyValuePair<string, IList<string>>("会社名", new string[] { "ディオドック株式会社" }),
new KeyValuePair<string, IList<string>>("フリガナ", new string[] { "ブドウジョウ タロウ" }),
new KeyValuePair<string, IList<string>>("TEL", new string[] { "022-777-8888" }),
new KeyValuePair<string, IList<string>>("部署名", new string[] { "ピノタージュ" }),
new KeyValuePair<string, IList<string>>("住所", new string[] { "M県S市広瀬区花京院3-1-4" }),
new KeyValuePair<string, IList<string>>("郵便番号", new string[] { "981-9999" }),
new KeyValuePair<string, IList<string>>("Email", new string[] { "tarou.budojo@mescius.com" })
};
// データをPDFフォームへ入力
doc.ImportFormDataFromCollection(kvp);
// PDFを保存
doc.Save("mescius_order_embed.pdf");
しかし、このままではPDFファイルを受け取る側でもPDFフォームのフィールドに入力されたデータを編集することが可能な状態です。
このようなデータが入力済みのPDFフォームを編集できないようにする機能として「PDFフォームのフラット化」があります。これにより、入力済みのデータを受け取る側で編集することを防止することができます。
// フォームフィールドに値が設定済みのPDFを読み込み
doc.Load(new FileStream("mescius_order_embed.pdf", FileMode.Open, FileAccess.Read));
// 元となるPDFのすべてのページと注釈を新しいPDFに描画
var newdoc = new GcPdfDocument();
foreach (var srcPage in doc.Pages)
{
var page = newdoc.Pages.Add(srcPage.Size);
// 元のPDFのForm XObjectをソースにする
var fxo = new FormXObject(newdoc, srcPage);
// Form XObjectを描画
page.Graphics.DrawForm(fxo, page.Bounds, null, ImageAlign.Default);
// フォームフィールドを含むページ上のすべての注釈を描画
srcPage.DrawAnnotations(page.Graphics, page.Bounds);
}
// PDFを保存
newdoc.Save("mescius_order_embed_flatten.pdf");
実行すると以下のように、PDFフォームのデータが描画されて編集不可な状態になります。PDFフォームを編集可能なままで受け渡しを実施したくない要件で活用できるかと思います。
上記コードを実装しているサンプルはこちらです。
さいごに
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。