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 のバージョンが古い可能性があります。
突然発生した IOException
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 をアップデートすれば解決するはずなのですが、easy-pdf-merge 本家 repository はメンテナンスされてないので、
- 自分で fork する
- fork されている中からアップデートされている repository を探す
のどちらかで対応することを検討しました。
今回は fork されている repository に使えるものがあったのでそれを利用することにしました。調査の過程について、詳しく説明していきます。
easy-pdf-merge 本家は PDFBox v2.0.1
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" |
easy-pdf-merge fork 版は PDFBox v2.0.8
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 をアップデートした現場からお送りしました。