こんにちは。株式会社リンクネット、ソリューション事業部の高橋です。
電子帳簿保存法が2022年に改正され、今まで紙で保管する必要があった書類も電子データで保管できるようになり、
様々な書類を電子データで作成させる需要が高まってきております。
電子帳簿保存法で保存可能な拡張子の中でもPDFファイルは電子署名が可能なことから、改ざんから保護された状態で保管が可能です。
PDFの機能の一つであるPDFフォームは、Adobe Acrobatソフトウェアを使用して作成されるPDF形式の文書で、ユーザー入力に応じて欄を埋めることができます。
このPDFフォームは、電子帳簿保存法においても書類として認められています。
本記事ではPDFフォームをPHPで操作し、WEBシステムで入力させたPDFを生成する方法を共有します。
$ sail artisan -V
Laravel Framework 8.82.0
$ sail php -v
PHP 8.1.5 (cli) (built: Apr 21 2022 10:15:06) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies
with Zend OPcache v8.1.5, Copyright (c), by Zend Technologies
with Xdebug v3.1.2, Copyright (c) 2002-2021, by Derick Rethans
今回、サンプルとして利用するPDFは下記になります。
今回のカスタマイズの目的はPDFを操作するライブラリであるpdftk
をインストールします。
Dockerfileに下記の内容を追加しました。
+ && apt-get -y install pdftk \
pdftk
コマンドを使用してPDFファイルのフォームの名称、入力ルールを取得します。
$sail sehll
sail@95a980a7d0e2:/var/www/html$ pdftk sample.pdf dump_data_fields > fieldname.txt
取得したフォームのうちテキストボックスの名称、入力ルールは下記のテキストになります。
PDFフォームを操作するにはFieldName
を参照します。
下記のFieldName
は住所
となり、これは数値参照文字のため、
Unicodeへの変換を行うと住所
になります。
---
FieldType: Text
FieldName: 住所
FieldFlags: 12582912
FieldJustification: Left
---
プルダウンメニューの場合は下記になります。
---
FieldType: Choice
FieldName: お見積り
FieldFlags: 131072
FieldValue:  ▼選択してください
FieldValueDefault:  ▼選択してください
FieldJustification: Left
FieldStateOption:  ▼選択してください
FieldStateOption: お見積りは必要です
FieldStateOption: お見積りは不要です
---
上記のFieldName
はお見積り
となり、これは数値参照文字のため、
Unicodeへの変換を行うとお見積り
になります。
FieldValue
は選択されている値、
FieldValueDefault
は初期値で▼選択してください
、
FieldStateOption
は選択肢のオプションとなります。
オプションはそれぞれ▼選択してください
、お見積りは必要です
、お見積りは不要です
となります。
下記のようにPHPでPDFフォームを操作し値を入力します。
今回、PDFを操作するライブラリはmikehaertl\pdftk
を利用します。
インストール方法は下記になります。
$sail composer require mikehaertl/php-pdftk
mikehaertl\pdftk
を使用してPDFを操作するソースコードは下記になります。
use mikehaertl\pdftk\Pdf;
$pdf_path = $sample_path."/sample.pdf";
$pdf = new Pdf($pdf_path);
$result = $pdf->fillForm([
'名前かな' => 'ヤマダ タロウ',
'名前漢字' => '山田 太郎',
'住所番号' => '9218163',
'住所' => '石川県金沢市横川7丁目35番地1',
'電話1' => '076',
'電話2' => '245',
'電話3' => '3001',
'メルアド1' => 'pdftest',
'メルアド2' => 'link-nt.co.jp',
'相談' => '0',
'電話' => 'On',
'ファックス' => 'On',
'メール' => 'On',
'訪問' => 'On',
'お見積り' => 'お見積りは必要です。',
])
->needAppearances()
->saveAs($sample_path.'/sample_filled.pdf');
実行結果は下記となります。
今回はPDFフォームをPHPで操作する方法をまとめました。
通常はHTMLやエクセルファイルで一からPDFを作成することが多く、
PDFフォームを利用することは少ないですが、
官公庁等が公開している電子帳票はPDFフォームのものも多数あるため、
今後のプロジェクトにも活かしていけると考えております。