HTML в PDF с кукловодом - PullRequest
       21

HTML в PDF с кукловодом

0 голосов
/ 21 марта 2019

Я новичок в nodejs, экспрессе и кукловоде.Задача состоит в том, чтобы создать веб-сервер, который конвертирует HTML в PDF.После исследования я нашел для этого кукловода и фантомов (но фантомы больше не поддерживаются).Я создал простой веб-сервер, который принимает JSON с HTML и другими настройками.Но phantomjs быстрее, чем кукловод, может быть, у меня есть некоторые ошибки?

Код кукловода:
Маршрут:

router.post("/raw", jsonParser, async function(request, response) {
        html2PdfConverter(request.body.html, pdf => {
        response.setHeader('Content-Type', 'application/pdf');
        response.send(pdf);
      }, 
        request.body.options,
        request.body.puppeteerArgs, 
        request.body.remoteContent).catch(err => {
        console.log(err);
        response.status(500).send('An error occurred');
      });
    });

Html2PdfConverter

const puppeteer = require('puppeteer');

let convertHTMLToPDF = async (html, callback, options = null, puppeteerArgs=null, remoteContent=true) => {
    if (typeof html !== 'string') {
        throw new Error(
            'Invalid Argument: HTML expected as type of string and received a value of a different type. Check your request body and request headers.'
        );
    }
    let browser;
    if (puppeteerArgs) {
        browser = await puppeteer.launch(puppeteerArgs);
    } else {
        browser = await puppeteer.launch();
    }

    const page = await browser.newPage();
    if (!options) {
        options = { format: 'Letter' };
    }

    if (remoteContent === true) {
        await page.goto(`data:text/html,${html}`, {
            waitUntil: 'networkidle0'
        });
    } else {
        await page.setContent(html);
    }

    await page.pdf(options).then(callback, function(error) {
        console.log(error);
    });
    await browser.close();
};

module.exports = convertHTMLToPDF;

Я думаю, чтоphantomjs работает быстрее, потому что метод pdf возвращает поток, а html и pdf файлы создаются в папке Temp.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 21 марта 2019

Вот две основные причины, по которым на данный момент не нужно использовать фантомы:

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

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

...