Бесплатная библиотека Java для преобразования существующих PDF в PDF / A - PullRequest
15 голосов
/ 17 марта 2010

Я пытаюсь конвертировать PDF в PDF / A. В настоящее время я могу сделать это, используя OpenOffice плагин для просмотра PDF вместе с Jodconverter 2 . Но это довольно громоздко.

Кто-нибудь знает о каких-либо открытых / бесплатных библиотеках Java, которые я могу использовать для этого?

Пока я нашел эти библиотеки с открытым исходным кодом, но ни одна из них не поддерживает преобразование PDF в PDF / A

IText
gnujpdf
PDF Box
ФОП
JFreeReport
PJX
JPedal
PDFjet
jPod
PDF Renderer

UPDATE

Похоже, Apache FOP имеет возможность конвертировать документ (не PDF-документ, хотя) в PDF / A

Ответы [ 5 ]

14 голосов
/ 24 марта 2010

Преобразование из PDF в PDF / A

Это ответ на ваш вопрос в первоначальном виде.

Для решения, которое не предполагает повторного рендеринга с потерями , взгляните на http://www.opensubscriber.com/message/itext-questions@lists.sourceforge.net/8027900.html, похоже, что Форис Золтан смог получить что-то (не исчерпывающее, но, возможно, достаточное) для большинства PDF-файлов) использование iText без излишнего повторного рендеринга.

Если решение Золтана не является приемлемым / достаточным в соответствии с вашими требованиями, то вы застряли с повторной визуализацией . Вы можете придерживаться OpenOffice / JODConverter или пойти на меньше накладных расходов, предпочтительно используя GhostScript (мать их всех), отправив pdf2ps обратно в PDF / A- включено ps2pdf.

Apache FOP

Другие респонденты предложили Apache FOP, который в контексте преобразования PDF в PDF / A имеет следующие преимущества и недостатки:

  • преимущество : меньше «движущихся частей» по сравнению с комбинацией OpenOffice / JODCOnverter (например, сравнение внутрипроцессного FOP с демонизированным OO)
  • недостаток : вы отвечаете за преобразование из PDF в XSL-FO или иным образом рендеринг в FOP ( больше кодирования и / или интеграции требуется требуется от вас ), тогда как OpenOffice / JODCOnverter и Ghostscript могут потребовать меньше дополнительного кодирования.

Однако, если я не ошибаюсь, похоже, что вы используете PDF в качестве промежуточного формата , то есть то, что вы пытаетесь достичь, - Преобразование XHTML в PDF в PDF / A . При непосредственном преобразовании из XHTML в PDF / A процесс будет быстрее, будет потребляться меньше ресурсов (например, памяти) и не будет бесполезно снижать качество вывода (как это могут делать решения для повторного рендеринга) или потребовать глубоких знаний о формате PDF (как решение Золтана). делает.)

В этом случае , напрямую конвертирующее из XHTML в PDF / A , будет идеальным решением, либо с использованием iText напрямую (в примере используется iTextSharp, a .Net-порт iText, но он такой же для Java), или с использованием Apache FOP, как предлагали другие (который также использует iText для внутреннего использования при выводе в PDF, и хотя он более раздутый, неэффективный и сложный в настройке, чем непосредственное использование iText) , он может дать лучшие результаты, чем пример iText - только один способ решить эту проблему, то есть вы должны попробовать его на нескольких ваших файлах XHTML в качестве примеров. :))

6 голосов
/ 23 марта 2010

Seam PDF - это просто удобство для проектов, использующих Seam. Ничто не мешает вам использовать Apache FOP с Seam для создания PDF-файлов.

Я лично использовал Apache FOP для генерации файлов PDF / A в веб-приложении, и он отлично работает. Как говорит Лигги, ссылка уже проста, как

userAgent.getRendererOptions (). Положим ( "PDF-а-режим", "PDF / A-1b");

Поэтому я предлагаю использовать Apache FOP напрямую, а не заниматься преобразованием (что также имеет проблемы с производительностью)

Обновление:

Веб-сайт Apache FOP содержит список примеров того, как использовать его через код Java. http://xmlgraphics.apache.org/fop/0.95/embedding.html

Вот минимальное приложение командной строки , которое преобразует XML в PDF

Другой подход, который конкретно касается XHTML (а не только XML), заключается в использовании таблицы стилей xhtml2fo от Antenna.

Это пример: http://blog.platinumsolutions.com/node/216

Просто добавьте следующие две строки перед созданием объекта "FOP", и все готово.

FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); 
foUserAgent.getRendererOptions().put("pdf-a-mode","PDF/A-1b");
1 голос
/ 22 марта 2010

Вы упоминаете Apache FOP в своем списке API, но на этой странице - http://xmlgraphics.apache.org/fop/trunk/pdfa.html упоминается, что есть некоторая поддержка PDF / A:

PDF / A-1b реализован в той степени, в которой FOP поддерживает создание элементов, описанных в ISO 19005-1.

PDF / A-1a основан на PDF-A-1b и добавляет функции доступности (такие как Tagged PDF). Этот формат доступен в рамках ограничений, описанных на странице Доступность.

В нем ничего не упоминается о PDF в PDF / A, но, возможно, это альтернатива с открытым исходным кодом.

0 голосов
/ 29 июля 2015

Мы только что выпустили jPDFPreflight , библиотеку Java, которая может конвертировать файлы PDF в PDF / A. Есть некоторые ограничения в этой первой версии типа документов, которые могут быть преобразованы.

0 голосов
/ 17 февраля 2014

Есть проект, размещенный в gitHub pdf2htmlEX , который стоит посмотреть.это открытый код, написанный на C ++.

...