【发布时间】:2019-05-30 19:27:48
【问题描述】:
当我使用 puppeteer 将 html 打印为 pdf 时,我遇到了一个奇怪的问题。我发现木偶师总是忽略 @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 时,翻书视口和翻书的规则工作正常。但是 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();
})();
【问题讨论】:
-
我过去看到过类似的行为并且有一个想法...但是您可以在此页面的某个地方托管以运行测试吗?
-
@Vaviloff,当然可以使用this link来测试。现在,我通过设置
min-width: 1600px来使用@media screen来暂时解决这个问题。 -
嘿,太好了,你能发布你的 puppeteer 代码的最小示例吗? — 因为我不知道您使用哪些打印仿真设置。
-
@Vaviloff,我更新了我的代码示例。我想使用
@media print设置来控制打印样式。但它不起作用。我期待着您亲切的答复。谢谢。 -
你解决了吗?我对图像有这样的问题。
标签: puppeteer