Перетворення HTML-файлів у PDF [закрито]


128

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

Оскільки я звик працювати в Java, то рішення, яке легко використовувати в Java-проекті, є кращим. Однак він повинен працювати лише на системах Windows.

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

Я також швидко ознайомився з Jrex, Java-API для використання механізму візуалізації Gecko.

Чи може бути спосіб відібрати відредаговану сторінку з механізму візуалізації Internet Explorer і автоматично надіслати її інструменту PDF-принтер? Я не маю досвіду програмування OLE у Windows, тому я не маю поняття, що можливо, а що ні.

У вас є ідея?


3
Нещодавно я створив docbag бібліотеки Java, який може конвертувати xhtml в PDF-документи. Поточна версія не є нічого просунутого, але якщо ваші шаблони xhtml прості, ця бібліотека може стати в нагоді.
Якуб Торбицький

Я думаю, що шлях - використовувати можливості браузерів для перекладу. Дивіться stackoverflow.com/q/25574082/39998
Девід Хофманн

Я застряг у створенні pdf з html, який містить букви кирилиці. Усе добре, крім кирилицьких літер, які пропущені. Хто-небудь, хто має цю якусь проблему?
Крістіян Ілієв

@krisiliev: У мене були подібні проблеми, і наскільки я пам’ятаю, шрифт, який використовується, був дуже важливим. Більшість шрифтів не підтримують повноцінні символи UTF8, але такі: "сімейство шрифтів: Arial Unicode MS;" (CSS). Також обов'язково використовуйте правильне кодування (я б радив завжди використовувати UTF-8)
panschk

2
це пов'язані між собою допомогли мені hmkcode.com/itext-html-to-pdf-using-java
Матін

Відповіді:


73

Проект візуалізації Flying Saucer XHTML має підтримку для виведення XHTML в PDF. Подивіться приклад тут .


20
Справжня проблема літаючого саузера полягає в тому, що він використовує itext для візуалізації PDF, що є ліцензованою ліцензією AGPL v3
Девід Хофманн

11
Версія itext, яка використовується Flying Saucer, є 2.0.8, яка була доступна під LGPL. Лише номери версій 5 або вище мають більш обмежувальну ліцензію. stackoverflow.com/questions/2692000/…
Gary

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 з відкритим кодом. Обидва безкоштовні.

Ми поставили невеликий підручник тут

EDIT (2017):

Якби сьогодні щось побудувати, я б більше не пішов по цьому маршруту.
Але використовував би http://pdfkit.org/ замість цього.
Можливо, позбавивши його від усіх своїх вузлів залежностей, щоб запустити у браузері.


16
Для прямого перетворення html-сторінки в pdf це краще, ніж все, що я бачив, безкоштовне чи комерційне.
MGOwen

Чи працює це на ОС Mac, яка не працює?
Еран Медан

1
@Eran, ми використовуємо його на Linux. Думаю, є і версія для Windows
Mic

1
@Mic Так, версія Windows також є.
Вікарі

тестується на 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/… ) і була недостатньою для моїх потреб. Навпаки, Летюча тарілка була ідеальною.
Піно

Ви можете використовувати версію LGPL, яку можна знайти на сайті github.com/albfernandez/itext2
Володимир Рожков

4

Якщо у вас є фінансування, принц XML нічого не перевершує, як показує це відео


1
Якщо ви шукаєте більш дешеву альтернативу для принца, спробуйте DocRaptor.com. Він використовує Прінс як двигун.
Джулі

І якщо ви хочете дешевше, але з більшою кількістю варіантів, спробуйте htm2pdf.co.uk - він використовує webkit та реальних користувачів WYSIWIG
user1914292

3

Чи може бути спосіб відібрати відредаговану сторінку з механізму візуалізації Internet Explorer і автоматично надіслати її інструменту PDF-принтер?

Так працює ActivePDF , що добре означає, що ви знаєте, що отримаєте, і насправді має розумну підтримку стилів.

Це також один із небагатьох знайдених мені пакетів (коли я дивився кілька років тому), який фактично підтримує різні команди CSS-перерви сторінки.


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

В даний час в бета-версії є нова версія, яка повинна бути набагато кращою, але я насправді не мав можливості її спробувати, тому не знаю, наскільки це покращення.


Дякуємо за корисну відповідь. Я не думаю, що ActivePDF дуже підходить через ціну, але добре знати, що існує щось подібне.
панщик

API GrabzIt в HTML в PDF: grabz.it/html-to-pdf-image-api.aspx Працює так само, як він перетворює HTML у браузері, а потім створює PDF, що забезпечує набагато більш точні перетворення PDF.
користувач1474090

2

Ви можете використовувати безголовий firefox з розширенням. Бігати дуже прикро, але це дає хороші результати.

Перегляньте цю відповідь для отримання додаткової інформації.


Це не звучить як дуже масштабоване рішення, якщо потрібно паралельно конвертувати сторінки на льоту в PDF. Якщо через кілька запитів надійде конверсія за допомогою FF, ваш сервер втратить кілька GIG пам'яті просто для обслуговування кількох конвертованих сторінок. Це відкриє ваш сервер для DOS.
мП.

Краще, але схоже: github.com/ariya/phantomjs/wiki/Screen-Capture (згідно з we-love-php.blogspot.com/2012/12/… . Pdf має справжній текст, не растрований)
nafg

0

Якщо ви подивитеся на бічну панель свого питання, ви побачите багато пов’язаних питань ...

У вашому контексті більш простим методом може бути встановлення драйвера друку PDF, наприклад PDFCreator, та просто надрукування сторінки на цей вихід.


Як це рішення Java? Це драйвер для друку Windows.
Сірий

В ОП чітко згадується Windows. І я припускаю, що для інших систем є подібні драйвери. ОП згадувала лише Яву як можливе рішення ...
PhiLho

0

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

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

застосовується звичайна відмова від відповідальності

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.