Я хотел конвертировать HTML в PDF.HTML может содержать некоторые JavaScript и CSS (с некоторыми внешними шрифтами)
Поскольку наше приложение работает на Java, я ищу Java API.Я нашел iTextPdf7, который может отображать HTML + CSS, но не Javascript.Как объяснил Бруно Лоуайдж здесь , iText не может выполнить Javascript.Чтобы сделать это, мы должны использовать любую реализацию движка браузера, такую как Webkit или Gecko.
Мы начали использовать wkhtmltopdf, основанный на QT Webkit.Теперь у него есть свои проблемы, такие как «разбивает таблицы и содержимое, когда они не помещаются на одной странице, что делает pdf неудобным».
Мы хотели «некоторый Java API, который работает на HTML + CSS + Javascript и дает намстрока или поток, который мы передадим в iText7, чтобы преобразовать его в pdf »или« API для преобразования HTML + CSS + Javascript в pdf ».Я не смог найти ни одного стандартного Java API для webkit или gecko.
Пожалуйста, дайте мне знать, если есть какая-либо реализация Java для webkit или gecko.
Мы исследовали Puppeteer,Мы можем сделать PDF, но неудовлетворительно.Например, взгляните на страницы Medium или NyTimes Chinese , на которых много динамического содержимого / шрифтов.Вот наш код.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.medium.com',{ waitUntil: 'networkidle0' });
//await page.waitFor(10000);
await page.pdf({
path: 'output.pdf',
format: 'Letter',
margin: {
top: '10mm',
right: '10mm',
bottom: '10mm',
left: '10mm',
},
displayHeaderFooter: false,
printBackground: true,
scale:1.0,
printBackground:true
});
await browser.close();
}) ();
Когда мы генерируем pdf с кукловодом для Средний , он не отображает полную страницу иAdobe Acrobat Reader DC (macOS) жалуется на «Невозможно извлечь встроенный шрифт T3Font_».При рендеринге NyTimes Chinese мы получаем ту же ошибку шрифта.Мы пробовали разные варианты ожидания без удачи.Но если я отображаю и открываю страницы в программе чтения PDF-файлов CentOS по умолчанию, я не вижу никаких ошибок, которые, вероятно,> из-за того, что на сервере CentOs установлены шрифты xorg-x11-fonts-Type1, xorg-x11-fonts-75dpi
Как мы можем позволить кукловоду подождать, пока вся страница будет отрисована, и не пропустить шрифты?
Java API, который выполняет рендеринг PDF, также является лучшим вариантом.
В настоящее время я использую macOS.Когда я открываю созданные PDF-файлы в Adobe Acrobat Reader DC,