Конвертировать HTML в PDF Кукольник - PullRequest
0 голосов
/ 30 ноября 2018

Я хотел конвертировать 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,

...