2017年2月2日木曜日

PHPでPDF生成する方法を調査

php_pdfユーザーが入力したデータを帳票にして送信する仕組みを作っているときの覚書。8年ぐらい前にも調査した続編。

有力候補たち

名称 説明
TCPDF

公式サイト
PHPライブラリ。
サンプルが充実していて使い方も簡単。迷ったらこれ。
wkhtmltopdf

公式サイト
WebKit HTML to PDF
ウェブサイトをPDF化してくれるコマンドラインツール。
要インストールなため自サーバーが必要。
HTMLでレイアウトを生成しておけばPDFに変換できるので楽。プレビュー → ダウンロード時にコマンド実行するだけ。
PHPから利用するためのライブラリもある。
Google Drive
(Google Sheets)

開発者向けサイト
Google Driveにスプレッドシートを作っておいて、
コピー → セルに値を挿入 → PDFに変換ダウンロード
というアイデア。
エクセルにも変換できるし応用がきく。学習コストは高め。
他のサービスに依存するのでAPI仕様変更とかが恐い。容量制限もあるので注意。

Google Drive APIを試したいけど、API利用規約とかも考えるとリスクが高い。

 

TCPDFは何度も使っていて面白くないので、wkhtmltopdfを試してみる予定。

 

< 2017/02/07 追記 >
wkhtmltopdfを実装してみた感想。

PHPからwkhtmltopdfをexecで呼び出して、渡すURLも自分自身のPDF用HTMLを動的に生成するPHPアドレスにした。

wkhtmltopdfが一度に複数呼び出されると処理が追いつかずタイムアウトする。

これを安定運用するには

  • wkhtmltopdfに渡すのは動的PHPではなくローカルのHTMLとして事前に出力しておく
  • wkhtmltopdfを複数起動しないようにキュー管理する
  • 自前で実装するのではなくて、URLからPDF作成サービスがあるのでそちらを利用する
  • やっぱりTCPDFにする

帳票のフォーマットが決まっているなら、テンプレートを読み込んで流し込む方がいい。

今試そうと思っているアイデアはHTMLをテキストでデータベースに保存して、生成したPDFもBlob型でデータベースに保存する方法。

実行中かどうかはシェルコマンドで判定する。

HTML(PHP)で作成したのがそのままPDFに出来るのは本当に楽。開発も修正も。

 

< Related Posts >

コメントを投稿
Related Posts Plugin for WordPress, Blogger...

Blog Archives