PDFフォームに外部からデータ入力する方法(PDFtk使用)
「PDFフォームに外部からデータを入力したい」、という質問を目にすることがあります。
たしかに、客先からテキストボックスやドロップダウンリスト、リストボックスやボタンなどのフォームフィールドがあらかじめ設定されているPDFファイルを渡されて、必要事項を記入後に返信する機会もありますし、そういった作業を自動化したいという需要も多くあるのでしょう。
製品版のAdobe Acrobatを使用しているのであれば、下記記事のようにVBAマクロを使って値を入力することもできますが、そうでない場合はどうすれば良いのか悩むところではあります。
Power Automate for desktopなどのRPAツールでマウスやキーボードを操作する方法もありますが、安定性に欠けるので個人的にはあまりお薦めはしません。
そこで今回は「PDFtk」を使ってPDFフォームにデータ入力する方法をご紹介します。
PDFtkとは
Wikipediaに概要が記載されていたので、こちらを引用させていただきます。
PDFtkのインストール方法
PDFtkには有料版の「PDFtk Pro」と無料版の「PDFtk Free」があり、それぞれで利用可能な機能が分かれていますが、今回は「PDFtk Free」を使用します。
インストール方法は下記のサイトで詳しく書かれていたので、こちらが参考になるでしょう。
PDFtkの本体は通常 C:\Program Files (x86)\PDFtk\bin\pdftk.exe にインストールされるため、本記事でもこちらに実行ファイルがある前提で説明していきます。
各フィールドの情報を取得
インストールが終わったら、さっそくPDFtkを使用していきます。
※今回は処理をすべてコマンドプロンプトで行っていきます。
対象ファイル
今回はテスト用に下図のPDFファイルを用意しました。
「氏名」「年齢」「連絡先」の3つのテキストフィールドだけがあるシンプルなファイルです(C:\Test\PDF\SampleField.pdf)。
データを入力するにあたり、“どこに入力するのか?”を知る必要があるため、まずは各フィールドの名前を取得します。
フィールド情報を取得するコマンド
"C:\Program Files (x86)\PDFtk\bin\pdftk.exe" "C:\Test\PDF\SampleField.pdf" dump_data_fields_utf8 output "C:\Test\PDF\dump.txt"
「dump_data_fields_utf8」オプションで各フィールドの情報を出力でき(日本語対応)、「output」オプションを付けることで、指定した場所にファイルとして結果を保存できます。
上記コマンドを実行した結果、以下のテキスト(dump.txt)が出力されました。これを見ると、文字通り「FieldName」として各フィールドの名前が出力されていることが分かります。
---
FieldType: Text
FieldName: 氏名
FieldNameAlt: 氏名
FieldFlags: 4096
FieldJustification: Left
---
FieldType: Text
FieldName: 年齢
FieldNameAlt: 年齢
FieldFlags: 4096
FieldJustification: Left
---
FieldType: Text
FieldName: 連絡先
FieldNameAlt: 連絡先
FieldFlags: 4096
FieldJustification: Left
各フィールドへのデータ入力
フィールドに入力するデータファイルの作成
各フィールドの名前が分かったので、次は入力するデータファイルを準備します。
今回は「XFDF」という形式のXMLファイルを使用します。
(XFDFの詳細については下記サイトをご参照ください。)
メモ帳などのテキストエディターで下記XMLファイルを作成します(C:\Test\PDF\SampleField_data.xfdf、文字コード:UTF-8)。
<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="氏名">
<value>ほげ田ほげ子</value>
</field>
<field name="年齢">
<value>18</value>
</field>
<field name="連絡先">
<value>hoge@***.com</value>
</field>
</fields>
</xfdf>
上記の通り、field要素のname属性の値としてフィールドの名前を、value要素で入力する値を指定しています。
フィールドにテータ入力するコマンド
"C:\Program Files (x86)\PDFtk\bin\pdftk.exe" "C:\Test\PDF\SampleField.pdf" fill_form "C:\Test\PDF\SampleField_data.xfdf" output "C:\Test\PDF\output.pdf" need_appearances
「fill_form」オプションで作成したxfdfファイルを指定します。
このとき「need_appearances」オプションを付けることで、文字化けすることなく日本語も入力することができます。
上記コマンドを実行した結果は下図の通りです(output.pdf)。
ちゃんと指定した値が入力されているようです。
以上のようにPDFtkを使用することでPDFフォームに外部からデータを入力することができます。
PDFフォームへの入力でお困りの方は是非お試しください!