it-swarm.com.ru

Преобразование файлов 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, поэтому я понятия не имею, что возможно, а что нет.

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

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

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

122
panschk

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

70
Mark

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

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

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

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

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

44
Mic

Проверить 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();
40
fred-o

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

3
Ólafur Waage

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

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

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


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

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

2
Peter Boughton

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

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

1
rojoca

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

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

0
PhiLho

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

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

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

0
yms