社内のWebサイトで印刷用PDFを公開しています。最近、情報漏洩の予防から印刷と同時にユーザー名を印字できるようにせよとのことで調査しました。
まずはPDFのJavaScriptでユーザー名をidentity.loginNameとかで取得してそれをPDFに仕込んだフォームに出力する方法ですが、これはPDFの開くソフトがJavaScriptに対応していないとうまく動きません。そして今のところ対応しているのはAdobeのAcrobatぐらいで、逆にAcrobatに限定してJavaScriptが有効じゃないとコンテンツを見えなくする対策方法もありますけど、Acrobatがない環境はどうするのとか、この先も考えて採用は避けたほうがよさそうです。
次の方法としてPHPを使ってアクセスしてきたWindowsユーザー名を取得する方法は導入済みですので、リアルタイムにPDFを作成すれば、PDF本文にユーザー名など他の情報を入れ込むことができます。PHPでPDFを作成するというのは世界中で要望としてあるみたいで、よく使われているのがTCPDFになります。使い方もインクルードするだけ。CentOS 7でもEPELに含まれていたので、
にて関連パッケージも含めてインストールされて使えるようになりました。
使い方ですが、公式サイトの豊富な使用例や、こちらの翻訳サイト、そしてこちらの使い方案内などを参考にそれほど難しくなく目的とするPDFが作成できるようになりました。
気になる作成速度は、そんなに待たされる感じではありません。まあ、もとのPDFのサイズが1ページなのでファイルが軽いというのもありますが。パスワードを付けた暗号化を含めてもそれほど重い処理ではないです。
導入して最初に困ったのがSetKeywordsを使ってPDFプロパティのキーワード欄を設定するとキーワードが2重で登録される問題でした。調べるとこちらの投稿があって、解決方法としてtcpdf.phpのソースを修正せよとあるのですが、これは今後のバージョンアップとかも考えてなるべく避けたい。と、更に調べるとこちらの記事を見つけました。解決方法がズバリ記されていまして、キーワードをカンマ,で区切っているのを削除せよと。うちの環境もまさにこれに当てはまります。で、カンマを削除すると問題が解消されました。
ということで先人たちの知恵によりPHPでのリアルタムPDF作成ができるようになりました。感謝です。