easy-pdf-merge で java.io.IOException: Missing root object specification in trailer エラー
easy-pdf-merge という npm で java.io.IOException: Missing root object specification in trailer エラーが発生したら内部で利用している Java ライブラリ Apache PDFBox のバージョンが古い可能性があります。
Error: Command failed: java -jar "/path/to/myapp/node_modules/easy-pdf-merge/jar/pdfbox.jar" PDFMerger "/tmp/a.pdf" "/tmp/b.pdf"
Exception in thread "main" java.io.IOException: Missing root object specification in trailer.
org.apache.pdfbox.pdfparser.COSParser.parseTrailerValuesDynamically(COSParser.java:2156)
org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:222)
org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:271)
org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:987)
org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:943)
org.apache.pdfbox.debugger.PDFDebugger.parseDocument(PDFDebugger.java:1369)
org.apache.pdfbox.debugger.PDFDebugger.readPDFFile(PDFDebugger.java:1283)
org.apache.pdfbox.debugger.PDFDebugger.readPDFFile(PDFDebugger.java:1266)
org.apache.pdfbox.debugger.PDFDebugger.main(PDFDebugger.java:254)
org.apache.pdfbox.tools.PDFBox.main(PDFBox.java:85)
Google 検索してみると [PDFBOX-3717] java.io.IOException: Missing root object specification in trailer - ASF JIRA の issue を見つけました。どうやら PDFBox のバグを踏んだようです。
Fix Version/s: 2.0.6 と書かれているので、修正されているバージョン 2.0.6 以上に上げることを検討します。
普通だったら easy-pdf-merge をアップデートすれば解決するはずなのですが、easy-pdf-merge 本家 repository はメンテナンスされてないので、
のどちらかで対応することを検討しました。
今回は fork されている repository に使えるものがあったのでそれを利用することにしました。調査の過程について、詳しく説明していきます。
package.json を以下のようにして npm install したとき、
"easy-pdf-merge": "0.1.3",
インストールされる PDFBox を確認してみると、バージョンは 2.0.1 でした。
java -jar node_modules/easy-pdf-merge/jar/pdfbox.jar -version
PDFBox version: "2.0.1"
fork している repository の中から最終更新日が直近な f2fgroup/easy-pdf-merge を使ってみます。
直近の commit log を確認してみると PDFBox version 2.0.8 を利用しているみたいです。
rebuild 2.0.8 · f2fgroup/easy-pdf-merge@2931462
実際に、package.json を以下のようにして npm install すると、
"easy-pdf-merge": "git://github.com/f2fgroup/easy-pdf-merge.git#ed345e23f2aef9a9dab62fcae5a85a1b15af3189",
インストールされる PDFBox はちゃんと version 2.0.8 なことを確認できました。
java -jar node_modules/easy-pdf-merge/jar/pdfbox.jar -version
PDFBox version: "2.0.8"
以上、PDFBox のバグを踏んで easy-pdf-merge をアップデートした現場からお送りしました。