Преобразование файлов HTML в PDF [закрыто]

128

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

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

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

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

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

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

panschk
источник
3
Недавно я создал пакет документов для библиотеки Java, который может конвертировать документы xhtml в pdf. Текущая версия не является чем-то продвинутым, но если ваши шаблоны xhtml простые, эта библиотека может пригодиться.
Якуб Торбицки 08
Я думаю, что лучше всего использовать возможности браузеров для перевода. См. Stackoverflow.com/q/25574082/39998
Дэвид Хофманн
Я застрял в создании pdf из html, который содержит кириллические буквы. Все нормально, кроме кириллических букв, которые пропущены. У кого-нибудь была такая проблема?
Кристиан Илиев
@krisiliev: У меня были похожие проблемы, и насколько я помню, используемый шрифт был очень важен. Большинство шрифтов не поддерживают полные символы UTF8, но следующие должны: 'font-family: Arial Unicode MS;' (CSS). Также обязательно используйте правильную кодировку (я бы посоветовал всегда использовать UTF-8)
panschk
2
эта ссылка помогла мне hmkcode.com/itext-html-to-pdf-using-java
Mateen

Ответы:

73

Проект визуализатора XHTML « Летающая тарелка » поддерживает вывод XHTML в PDF. Взгляните на пример здесь .

отметка
источник
20
Настоящая проблема с летающим саузером заключается в том, что он использует itext для рендеринга PDF, который является лицензированной библиотекой AGPL v3
Дэвид Хофманн,
11
Версия itext, используемая Flying Saucer, - 2.0.8, которая была доступна под LGPL. Только версия с номером 5 или выше входит в более ограничительную лицензию. stackoverflow.com/questions/2692000/…
Гэри
8
Я бы сказал, что настоящая проблема с Flying Saucer заключается в том, что для нее требуется правильно сформированный и действительный XML-документ. Легко случайно нарушить рендеринг PDF, включив что-то вроде амперсанда в ваш HTML или какой-то код javascript, который делает визуализированный HTML не строгим XHTML. Хотя это можно смягчить с помощью автоматических тестов или некоторого процесса, который включает проверку XML.
SteveT
3
@LateralFractal Насколько я могу судить, Flying Saucer 9.0.8 (я думаю, последняя версия) использует iText 2.1.7, которая является последней версией iText с разрешающей лицензией --- LGPL. mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf/…
Джонатан Кросмер,
2
@JonathanCrosmer Ага. Есть два пакета FlyingSaucer для PDF, один для iText v2 и один для iText v5. Предполагая, что оба имеют одинаковую функциональность; риск AGPL можно избежать.
Боковой фрактал
49

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

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

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

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

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

микрофон
источник
16
Для прямого преобразования HTML-страницы в PDF это лучше, чем все, что я видел, бесплатное или коммерческое.
MGOwen
Работает ли он на Mac OS?
Эран Медан
1
@Eran, мы используем его в linux. Думаю, есть и версия для Windows
Mic
1
@Mic Да, есть и версия для Windows.
Viccari,
протестирован на Windows XP (версия 0.9.9) и работает очень хорошо. Кроме того, для установки не требуются права администратора на машине.
Кристофер Махан
44

Проверьте 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();
Фрэд-о
источник
9
Это AGPL, кажется, даже хуже, чем GPL, вам нужно иметь открытый исходный код, даже если вы просто обслуживаете PDF, а iText находится на стороне сервера.
Эран Медан
10
@Eran, просто используйте последнюю не-AGPL версию (com.lowagie: itext: 2.1.7 в Maven).
Nowaker
1
HTMLWorker устарел в новых версиях IText в пользу XMLWorker; однако поддержка CSS в обоих случаях оставляет желать лучшего (см. demo.itextsupport.com/xmlworker/itextdoc/… ) и не соответствует моим потребностям. Напротив, летающая тарелка была идеальной.
Pino
Вы можете использовать версию LGPL, которую можно найти на github.com/albfernandez/itext2
Владимир Рожков
4

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

Олафур Вааге
источник
1
Если вы ищете более дешевую альтернативу Prince, попробуйте DocRaptor.com. Он использует Prince в качестве двигателя.
Julie
А если вы хотите подешевле, но с большим количеством возможностей, попробуйте htm2pdf.co.uk - он использует webkit, а пользователи - настоящий WYSIWIG
user1914292
3

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

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

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


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

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

Питер Ботон
источник
Спасибо за полезный ответ. Я не думаю, что ActivePDF действительно подходит из-за цены, но хорошо знать, что что-то подобное существует.
panschk
API GrabzIt из HTML в PDF: grabz.it/html-to-pdf-image-api.aspx Работает так же, как визуализирует HTML в браузере, а затем создает PDF, что обеспечивает более точное преобразование PDF.
user1474090
2

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

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

rojoca
источник
Не похоже на очень масштабируемое решение, если нужно параллельно конвертировать страницы в pdf. Если поступит несколько запросов, которые приведут к преобразованию с использованием FF, ваш сервер потеряет несколько гигабайт памяти только для обслуживания нескольких преобразованных страниц. Это откроет ваш сервер для DOS.
М.П.
Лучше, но похоже: github.com/ariya/phantomjs/wiki/Screen-Capture (согласно we-love-php.blogspot.com/2012/12/… PDF имеет реальный текст, а не растеризованный)
nafg
0

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

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

PhiLho
источник
Как это решение Java? Это драйвер печати для Windows.
Грей,
OP явно упомянул Windows. И, полагаю, есть аналогичные драйверы для других систем. OP только упомянул Java как возможное решение ...
PhiLho
0

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

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

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

YMS
источник