社内のデータ共有システムで印刷用にPDFファイルを自動作成しています。そのPDFに対して以下のような操作を実施していました。
- 背景に定形の画像を入れる
- プロパティの情報を編集する
- 印刷のみ許可として他は制限をかける
などです。今まではCentOS 6上でコマンドラインで実行できるPDFtkを使っていました。現在ではPDFtk Serverという名前ですかね。
会社の環境でCentOS 6から7への移行を計画中なのですが、いちばん困ったのがこのPDFtkでした。このツールはLinuxではGCCのJava、libgcjが必須なところ、最近、GCCからJavaは削除されましてCentOS 7からもlibgcjのパッケージは提供されていません。こちらのスレッドが詳しい感じですかね。他にもPDFtkとCentOS 7のキーワードで検索するとあちこちで報告されています。
それらの対策を参考にすると過去のlibgcjをrpmの-forceオプションを付けて依存性を無視して導入とか、個人が公開してくれているrpmを導入という方法があるようですが、その場しのぎのやり方なような気がして今後のことも考えてそこは避けたい。開発元がlibgcjを使わないバージョンにとりかかっているとの情報もありますが、もう2年以上前の話ですので期待できなさそう。
となるとPDFtkをあきらめて他のツールを探しました。中でも商用の利用でもフリーなところでApache PDFBoxが候補に上がりました。もとはJavaからPDFを操作するライブラリーですがjarファイルも用意されていて、java経由でコマンドラインツールとして利用できます。PDFを重ねる方法として
$ java -jar pdfbox-app-2.0.4.jar Overlay input.pdf overlay.pdf output.pdf
みたいな感じでこちらのページにマニュアルと使用例がありますのでそれほど難しくなく、上記1と3のやりたいことが可能となりました。
あとは2のPDFのプロパティを変更する方法ですが、これはEPELに用意されているperlのImage::ExifToolで書き換えられることを確認しました。ExifというとJPEGの付加情報を思い出すのですが、様々なファイルのメタデータの編集に対応しています。もともとPDFのメタファイルがXMP方式だからみたいですね。
PDFのバージョンによって挙動が変わったり、書き込むタグの種類によってはうまくいかなかったり試行錯誤が必要ですが、なんとかまあPDFのプロパティ情報をperlのスクリプトで書き換えられるようになりました。キーワードに日本語を入れていますがUTF-8で問題ない感じです。