Это ответ на ваш вопрос в первоначальной формулировке.
Для решения, которое не включает потенциально убыточный повторный рендеринг, посмотрите на http://www.opensubscriber.com/message/itext-questions@lists.sourceforge.net/8027900.html, похоже, что Форис Золтан смог получить что-то (не исчерпывающее, но, возможно, достаточное для большинства PDF), используя iText без излишеств повторного рендеринга.
Если решение Золтана неприемлемо/недостаточно в соответствии с вашими требованиями, тогда вы застряли с повторным рендерингом. Вы можете использовать OpenOffice/JODConverter, или пойти на меньшие накладные расходы, предпочтительно используя GhostScript (мать их всех), соединяя pdf2ps
обратно в PDF/A-enabled ps2pdf
.
Другие респонденты предложили Apache FOP, который в контексте преобразования PDF в PDF/A имеет следующие преимущества и недостатки:
Однако, если я не ошибаюсь, похоже, что вы используете PDF в качестве промежуточного формата, т.е. то, чего вы пытаетесь достичь - это преобразование XHTML в PDF в PDF/A. Если конвертировать непосредственно из XHTML в PDF/A, процесс будет быстрее, будет использовать меньше ресурсов (например, памяти) и не будет без необходимости ухудшать качество вывода (как это могут делать решения по перерисовке) или требовать глубокого знания формата PDF (как это делает решение Золтана)
В этом случае прямое преобразование из XHTML в PDF/A было бы идеальным решением, либо используя iText напрямую (в примере используется iTextSharp, . Net порт iText, но это то же самое для Java), либо используя Apache FOP, как предлагали другие (который также использует iText внутренне при выводе в PDF, и хотя он более раздутый, неэффективный и сложный в настройке, чем использование iText напрямую, он может дать лучшие результаты, чем пример iText - только один способ решить это, т.е. вы должны попробовать его на нескольких ваших XHTML файлах в качестве образцов. :) )
Вы упоминаете 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, но, возможно, это может быть альтернативой с открытым исходным кодом.
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");