Adobe PDFBox производит неожиданные изменения для загрузки с последующим сохранением - PullRequest
0 голосов
/ 12 апреля 2019

Я работаю над инструментом для автоматического создания файлов PDF на основе файла шаблона и других исходных данных. Я использую Mac OS 10.14.4, Java 1.8 и PDFBox версии 2.0.15.

В качестве базового теста я сократил код открытия и сохранения до двух строк, что имеет очевидную проблему для одного конкретного PDF-файла и более тонкие проблемы для всех других PDF-файлов, которые я пробовал:

PDDocument targetPDF = PDDocument.load(new File(templatePath));
targetPDF.save(targetFileName)

Наблюдаемая проблема для одного конкретного PDF заключается в том, что неожиданные символы вставляются вверху первой страницы. (Похоже, они написаны алфавитом, который иначе не используется, и обрезаются.) Другие PDF-файлы визуально похожи, но сильно отличаются, когда я запускаю их через diff. Это что-то хитрое, я должен сделать, чтобы сохранить файлы? Это проблема с этим одним файлом? PDFBox делает что-то странное?

Я искал похожие отчеты и нашел несколько, которые касаются размера выходных файлов: Почему в PDFBox размер файла становится чрезвычайно большим после сохранения? и Разделить и объединение PDF-файлов с использованием PDFBOX создает большой файл Я вижу заметное увеличение размера файла, но не так сильно, как сообщают эти вопросы. В случае one входные и выходные файлы визуально различаются. В других случаях diff -y --text template.pdf target.pdf сообщает о больших различиях, но я не вижу различий одним глазом. (Во встроенной программе просмотра документов «Предварительный просмотр» в Mac. В Adobe Acrobat создается взломанный файл «template.pdf». Я не знаю о неразрывных файлах.)

После сравнения с https://issues.apache.org/jira/browse/PDFBOX-2690 и http://useof.org/java-open-source/org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject Я попытался добавить targetPDF.close() после targetPDF.save(), но это не имело значения. https://pdfbox.apache.org/2.0/faq.html предлагает закрыть контент stream перед сохранением файла, но я не знаю, как это сделать. (Сам по себе File не имеет метода close(). Ни один из методов в PDDocument не имеет отношения к потокам или их закрытию, кроме самого PDDocument.close(), который препятствует сохранению.)

Я бы вставил сюда некоторые файлы журналов, но я не получаю никаких сообщений от классов PDFBox ....

...