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

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

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

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

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

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

У вас есть идея?

EDIT: FlyingSaucer/iText выглядит очень многообещающе. Я постараюсь пойти с этим.

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

Ответ 1

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

Ответ 2

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

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

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

EDIT (2017):

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

Ответ 3

Отъезд 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();

Ответ 5

Есть ли способ захватить сделанная страница из Интернета движок рендеринга проводника и отправить его к инструменту PDF-Printer автоматически?

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

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


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

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

Ответ 6

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

За дополнительной информацией обращайтесь к этому вопросу.

Ответ 7

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

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

Ответ 8

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

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

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