当我使用@media print 时,Puppeteer 忽略了一些 CSS 规则来打印 PDF

标签 puppeteer

当我使用 puppeteer 将 html 打印为 pdf 时,我遇到了一个奇怪的问题。我发现 puppeteer 师总是忽略@media print 中的一些 CSS 规则。

这是我的环境:

puppeteer 版:1.11
平台/操作系统版本:Win10/CentOS7
Node.js 版本:10.15.0

CSS 代码:

@media print {
    .flipbook-viewport .flipbook{
        width: 794px!important;
        height: 1123px!important;
        max-height: 1123px;
        max-width: 794px;
        background-color: red;
    }

    .right-01 .image {
        width: 92%;
        background-repeat: no-repeat;
        background-size: 100%;
        background-image: url('../image/content/test.png');
        height: 920px;
        /* width: 740px; */
        margin-top: 0.8rem;
    }
}

您会注意到我设置了背景颜色来检查测试结果。在我的测试中,当我使用 page.emulateMedia('print') 执行 puppeteer 时,翻书视口(viewport)和翻书的规则工作正常。但是 right-01 和 image 不起作用。

但有趣的是,当我以相同的规则使用@media 屏幕(也将 page.emulateMedia 更改为屏幕)时,它们都运行良好。所以我认为puppeteer可能有一些问题。

预期的结果是什么?
good.pdf

相反会发生什么?
wrong.pdf

有没有人遇到过这个问题?如何解决这个问题?请帮忙。

我的 puppeteer 代码示例:
const puppeteer = require('puppeteer-core');

(async () => {
    const browser = await puppeteer.launch({executablePath:'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'});
    const page = await browser.newPage();
    await page.goto('http://www.kaol.org/TurnPage/', {waitUntil: 'networkidle2'});
    await page.emulateMedia('print');
    await page.pdf({path: 'hn.pdf', format: 'A4', printBackground: true});
    await browser.close();
})();

最佳答案

documentation for PDF print puppeteer 列出了一些可能的选项。其中还有printBackground :

<boolean> Print background graphics. Defaults to false.



尝试将其设置为 true在您的 PDF 导出中包含背景图形和颜色。

关于当我使用@media print 时,Puppeteer 忽略了一些 CSS 规则来打印 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54035306/

相关文章:

javascript - 如何使用 puppeteer(node js ) 保持 gmail 登录状态

javascript - 如何在 playwright 中运行自定义 js 函数

javascript - 如何在文件中的 RPi 上的 javascript 之后获取完整的 html

node.js - puppeteer 错误 : Chromium revision is not downloaded

javascript - 如何从 puppeteer 异步函数内部返回值(对象)?

javascript - 缓慢循环页面并使用 puppeteer 提取数据

automated-tests - 为什么 Puppeteer 无法通过 : "waiting for function failed: timeout 500ms exceeded"? 进行简单的测试

dart - puppeteer 说异常:找不到Websocket网址

javascript - 在 Puppeteer 中将数据输入到多个表单输入中

javascript - 无法使用 Puppeteer Js 选择下拉值