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

14
задан Shervin Asgari 18 January 2011 в 09:38
поделиться

3 ответа

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

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

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

Если решение Золтана неприемлемо/недостаточно в соответствии с вашими требованиями, тогда вы застряли с повторным рендерингом. Вы можете использовать OpenOffice/JODConverter, или пойти на меньшие накладные расходы, предпочтительно используя GhostScript (мать их всех), соединяя pdf2ps обратно в PDF/A-enabled 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, . Net порт iText, но это то же самое для Java), либо используя Apache FOP, как предлагали другие (который также использует iText внутренне при выводе в PDF, и хотя он более раздутый, неэффективный и сложный в настройке, чем использование iText напрямую, он может дать лучшие результаты, чем пример iText - только один способ решить это, т.е. вы должны попробовать его на нескольких ваших XHTML файлах в качестве образцов. :) )

15
ответ дан 1 December 2019 в 12:38
поделиться

Вы упоминаете 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 to PDF/A, но, возможно, это может быть альтернативой с открытым исходным кодом.

1
ответ дан 1 December 2019 в 12:38
поделиться

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

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

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

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

Обновление:

Веб-сайт Apache FOP содержит список примеров того, как использовать его с помощью кода Java. {{1} } 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");
6
ответ дан 1 December 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: