如何使用 puppeteer 和 Node js 生成 pdf 页面的屏幕截图

Gau*_*ini 8 node.js puppeteer

我正在使用 puppeteer 和 Node js 创建一个屏幕截图生成器。它对于普通网页工作正常,但对于 pdf 页面,每次运行它总是给出相同的错误

这是代码(来自https://github.com/GoogleChrome/puppeteer的第一个示例)

const puppeteer = require('puppeteer');

(async () => {
    try {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf');
        await page.screenshot({ path: 'example.png' });
        await browser.close();
    } catch (err) {
        console.log(err);
    }
})();
Run Code Online (Sandbox Code Playgroud)

我得到的错误

Error: net::ERR_ABORTED at https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf
    at navigate (C:\MEAN\puppeteer-demo\node_modules\puppeteer\lib\FrameManager.js:121:37)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  -- ASYNC --
    at Frame.<anonymous> (C:\MEAN\puppeteer-demo\node_modules\puppeteer\lib\helper.js:110:27)
    at Page.goto (C:\MEAN\puppeteer-demo\node_modules\puppeteer\lib\Page.js:629:49)
    at Page.<anonymous> (C:\MEAN\puppeteer-demo\node_modules\puppeteer\lib\helper.js:111:23)
    at C:\MEAN\puppeteer-demo\index.js:7:20
    at process._tickCallback (internal/process/next_tick.js:68:7)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。我也愿意接受任何其他可能的解决方案。

Tho*_*orf 4

Headless Chrome无法访问 PDF 页面Error: net::ERR_ABORTED,并且会抛出您遇到的错误。虽然您可以使用 访问 PDF 文档headless: false,但截图也会失败,因为 PDF 不是真正的网站,实际上是在单独的视图中呈现的。

替代方法

您可以做的是下载页面并使用PDF.js创建页面的图像。您可能想查看有关“pdf 到图像”或“pdf 预览”主题的其他信息。stackoverflow 上有多个关于该主题的问题(1、2、..),并且PDF.js 页面本身有示例。