Бесплатная библиотека Java для преобразования существующего PDF в PDF/A

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

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

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

iText
gnujpdf
PDF Box
ЧП
JFreeReport
PJX
JPedal
PDFjet
jPod
PDF Renderer

обновление

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

5 ответов


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

Это ответ на ваш вопрос, как первоначально сформулировано.

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

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

Apache FOP

другие респонденты предложили Apache ФОП, который!--9-->в контексте преобразования 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, .Net-порт iText, но это то же самое для Java) или с помощью Apache FOP, как предложили другие (который также использует iText внутренне при выводе в PDF, и хотя это является более раздутым, неэффективным и сложным в настройке, чем использование iText напрямую, это может дают лучшие результаты, чем пример iText-только один способ решить это, т. е. вы должны попробовать его на нескольких ваших XHTML-файлах в качестве образцов. :))


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

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

userAgent.getRendererOptions ().put ("pdf-A-mode", "PDF / A-1b");

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

обновление:

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

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

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

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

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

FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); 
foUserAgent.getRendererOptions().put("pdf-a-mode","PDF/A-1b");

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

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

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

Он не упоминал о PDF в PDF/A, но это может быть альтернативой с открытым исходным кодом.


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


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