PDFに追記する方法

事務手続きで書類を提出するときに、PDFを印刷し、そこに手書きして提出するということがよくある。
コンピュータであらかじめテキストを入力しておくことはできないものか。
MacならPreview.appでできる。そうMacならね。
だけどMacの独自機能に頼るのはちょっと不安。(Macは好きだけどね。)
というわけでどうにか出来ないか調べてみた。


まず、途中で諦めた方法。(うまくできる方法はこの後に。)

PostScriptに変換して編集

GhostScriptでPSに変換できる。ただ普通に変換するとASCII85というエンコードをされていて、テキスト編集できない。
小一時間調べた所CompressPagesを無効化することによって読める形式で出力してくれるとわかった。

gs -o doc.ps  -dNOCACHE -sDEVICE=ps2write -dCompressPages=false doc.pdf

あとは、テキストエディタで編集。
だが、PostScriptはよくわからないのでどう編集すればよいのかさっぱりだった。
分かる人いないかなあ。

追記するPDFを作る

この方法は面倒だが、一応うまく行っている。
1ページしかない場合を想定する。

inkscapeで追記したいベクタイメージを作成する。そして、pdftkの機能によって元PDFと合成するという算段である。
postscript - overlay one pdf or ps file on top of another - Stack Overflow
inkscapeで追記するときは、元PDFのラスタイメージを下敷きにすることによって位置を正確に把握できる。

必要なツール:ghostscript, inkscape, pdftk

まず、PNG等のラスタ化したファイルを作る。

gs -o doc.png -dNOCACHE -sDEVICE=png48 -r300 doc.pdf

これはあくまで下敷き用画像なのでDPIは好みな値で構わない。

inkscapeで開く

inkscape doc.png

開くときに、画像をリンクするか埋め込むか聞かれるので、リンクを選択する。(あとで除去するため)

開いたら、画像を30%に縮小し、ドキュメントサイズもそれに合わせる。
この操作はしなくてもさほど問題は無いが、オリジナルのサイズを保ちたいのであれば行うこと。
今回300dpiで変換したが、dpiを変える場合は比率も変わる。例えば72dpiでは125%となる。

追記したいものを描く。

SVGとして保存。

テキストエディタにてSVGを開き、doc.pngをリンクしているタグを探す。
それをコメントアウトあるいは削除する。

SVGをPDFに変換する。

inkscape -z -f doc.svg -A overlay.pdf

pdftkにより合成する。

pdftk overlay.pdf background doc.pdf output out.pdf


Preview.appよりも細かく編集できるので、何かの時に役に立つかもしれない。

その他

PDFSharp
pyPDF
Foxit Reader
とりあえず書いておいた。