なんじゃくにっき

プログラミングの話題中心。

PDFをプログラムで編集したい

既存のPDFにテキストを追加したい・・と思ったことありませんか?

今の時期なら国税庁が配布している確定申告書等のPDFに印字したい、とかでしょうか。

確定申告書等の様式・手引き等(令和5年分の所得税及び復興特別所得税の確定申告分)|国税庁

※なお、私はe-Taxで済ませたので実際のところは確定申告書を印刷したいわけではありません

画像として編集

PDFをjpgなりpngなりのラスター画像にして編集する方法。

画像にしてしまえばいくらでも文字を載せたりすることはできます。

が、欠点としては以下の点が挙げられます

  • 出力時の解像度が低いと印刷時に汚くなる
  • 出力時の解像度が高いとファイルサイズが大きくなる
  • テキストとしての情報が失われて画像になってしまうので再度の編集が難しくなる

ライブラリ

pdf.js

GitHub - mozilla/pdf.js: PDF Reader in JavaScript

pdf.jsはJavaScriptHTML5canvasにPDFを描画するためのライブラリ。

描画してからcanvasのtoDataURLを使うとPNGを出力できるが、当然テキストの情報は失われます。

無理やりpdf.jsが内部で持っているoperationのdataをいじれば内容は編集できるが、素のPDFの情報に近く、編集するのはかなり大変。

pdf-lib

https://github.com/Hopding/pdf-lib

jsのコードからテキストを追加できます。

ただしGUIはなく、位置を指定する必要がある(単位はポイント=1/72インチ?)。また文字ごとの間隔を調整したい場合は1文字ずつ印字、になりそう。

既存テキストの編集はできません(対応したいと言っているが3年位開発止まってる)。

HummusJS/MuhammaraJS

https://github.com/julianhille/MuhammaraJS

HummusJSが開発終了してMuhammaraJSに引き継がれた。

C++製ライブラリとそのjsラッパーなのでブラウザでは動作しない(だれかWebAssembly化して・・)

PDFBox

https://pdfbox.apache.org/

Java製ライブラリ。

テキストの追加は出来る。

まとめ

コードからPDFにテキスト追加できるライブラリはいくつかありましたが、既存テキストの編集は見つけられませんでした。

また、GUIからぽちぽちしてPDFを楽に編集できる方法はオープンソースのものでは見つけられませんでした。

GUIから操作したいときはAdobeAcrobatでも買いませう。