【问题标题】:Html to pdf with puppeteer使用 puppeteer 将 Html 转换为 pdf
【发布时间】:2019-08-11 23:43:09
【问题描述】:

我是 nodejs、express 和 puppeteer 的新手。任务是创建将 html 转换为 pdf 的网络服务器。经过研究,我为此目的找到了 puppeteer 和 phantomsjs(但 phantomjs 不再受支持)。 我创建了简单的网络服务器,它采用带有 html 和其他设置的 json。但是phantomjs比puppeteer快,可能是我有些错误?

木偶代码:
路线:

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');
      });
    });

Html2Pdf转换器

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 文件夹中创建。

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: html node.js express pdf puppeteer


    【解决方案1】:

    这是目前不使用 phantomjs 的两个主要原因,

    • phantomjs 已弃用,需要时不支持
    • 它使用的是旧渲染器,这就是它速度快的原因,因为它与您的内容没有太多关系。

    如果您希望 puppeteer 更快,当然可以禁用 puppeteer 提供的许多最新功能,但 pdf 可能看起来不像启用所有功能时那样干净。

    【讨论】:

    • 我只想使用从其他应用程序创建的内联样式从 html 创建 pdf。您指的是哪些功能?
    • 最新的CSS3规范、各种脚本等
    • 是根据html代码还是puppeteer设置?找不到 puppeteer 的设置
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2017-12-19
    • 2014-03-19
    • 2022-03-07
    • 2021-09-21
    相关资源
    最近更新 更多