Преобразование файлов HTML в PDF

Мне нужно автоматически сгенерировать файл PDF из существующего (X)HTML-документа. Входные файлы (отчеты) используют довольно простую, основанную на таблицах компоновку, поэтому поддержка действительно фантастических вещей JavaScript/CSS, вероятно, не требуется.

Поскольку я привык работать в Java, решение, которое можно легко использовать в java-проекте, является предпочтительным. Это только должно работать на системах Windows, все же.

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

Я также быстро взглянул на Jrex, Java-API для использования движка рендеринга Gecko.

Может быть, есть способ получить отрендеренную страницу из механизма рендеринга в Internet Explorer и автоматически отправить ее в инструмент PDF-Printer? У меня нет опыта в программировании OLE в Windows, поэтому я понятия не имею, что возможно, а что нет.

У тебя есть идея?

РЕДАКТИРОВАТЬ: FlyingSaucer/iText вещь выглядит очень многообещающе. Я постараюсь пойти с этим.

Спасибо за ответы на все вопросы

8 ответов

Решение

Проект рендеринга Flying Saucer XHTML поддерживает вывод XHTML в PDF. Посмотрите на пример здесь.

Вы пробовали WKHTMLTOPDF?

Это простая утилита оболочки, реализация WebKit с открытым исходным кодом. Оба бесплатны.

Мы установили небольшой учебник здесь

РЕДАКТИРОВАТЬ ( 2017):

Если бы сегодня было что-то построить, я бы больше не пошел этим путем.
Но вместо этого использовал бы http://pdfkit.org/.
Вероятно, удалив его из всех зависимостей nodejs для запуска в браузере.

Проверьте iText; это чистый Java PDF инструментарий, который поддерживает чтение данных из HTML. Я использовал его недавно в проекте, когда мне нужно было извлечь контент из нашей CMS и экспортировать его в PDF-файлы, и все было довольно просто. Поддержка CSS и тегов стилей довольно ограничена, но она отображает таблицы без каких-либо проблем (хотя мне никогда не удавалось установить ширину столбца).

Создание PDF из HTML выглядит примерно так:

Document doc = new Document(PageSize.A4);
PdfWriter.getInstance(doc, out);
doc.open();
HTMLWorker hw = new HTMLWorker(doc);
hw.parse(new StringReader(html));
doc.close();

Может быть, есть способ получить отрендеренную страницу из механизма рендеринга в Internet Explorer и автоматически отправить ее в инструмент PDF-Printer?

Вот как работает ActivePDF, что хорошо означает, что вы знаете, что получите, и у него действительно есть разумная поддержка стилей.

Это также один из немногих пакетов, которые я нашел (если посмотреть несколько лет назад), который на самом деле поддерживает различные CSS-команды для разрыва страницы.


К сожалению, программное обеспечение ActivePDF очень разочаровывает - так как для конверсий приходится запускать браузер IE в фоновом режиме, оно может быть довольно медленным и также не особенно стабильным.

В настоящее время в бета-версии есть новая версия, которая должна быть намного лучше, но на самом деле у меня не было возможности опробовать ее, так что не знаю, насколько это улучшение.

Если у вас есть финансирование, ничто не сравнится с Prince XML, как показывает это видео

Вы можете использовать безголовый Firefox с расширением. Работать довольно неприятно, но дает хорошие результаты.

Проверьте этот ответ для получения дополнительной информации.

Amyuni WebkitPDF можно использовать с JNI для решения только для Windows. Это библиотека преобразования HTML в PDF/XAML, бесплатная для коммерческого и некоммерческого использования.

Если выходные файлы не нужны сразу, для лучшей масштабируемости может быть лучше иметь очередь и несколько фоновых процессов, которые отбирают элементы оттуда, преобразуют их и затем сохраняют в базе данных или файловой системе.

применяется обычный отказ от ответственности

Если вы посмотрите на боковую панель вашего вопроса, вы увидите много связанных вопросов...

В вашем контексте, более простой способ может быть установить драйвер печати PDF, такой как PDFCreator, и просто распечатать страницу для этого вывода.

Другие вопросы по тегам