参考完整的小提琴:http://jsfiddle.net/XT92a/
@page {
margin: 1in;
}
@page :first {
margin: 2in 1in 3in 3in;
}
Run Code Online (Sandbox Code Playgroud)
我希望上面的规则可以使第一个打印页面具有一定的边距,而所有其他页面都有1英寸的边距.
相反,我在Chrome的打印预览中得到以下内容(准确到打印输出).保证金是对非第一页不同,但它们都是不正确的.注释掉:first margin规则允许非首页以正确的布局打印,但当然,第一页也会受到影响.
在我看来,Mozilla的文档声称Chrome正确支持这一点.显然Chrome会做出反应,但不正确.如果可以的话,我会参考Chrome文档,但谷歌很糟糕的文档!(有没有谷歌相当于MDN?我找不到它.)
对我来说很奇怪,我在其他地方找不到这个问题,如果Chrome应该从版本2.0开始就支持这个问题,并且打印布局是如此庞大的PITA.
我做错了吗?有一个强大的解决方法吗?我试过@page:first(没有空格),独立设置边距值trbl样式和单独设置,并在样式声明中交换规则的顺序.没有效果.

我是使用 nodejs 函数和 puppeteer 的新手。以前我使用 wkhtmltopdf 但目前它的选项很差。
因此,我的想法是从带有第一个封面的 html 生成 pdf(具有完整 A4 宽度/高度的图像),因为页脚是从 index.js 生成的,因此无法将其隐藏在PDF。
//Imports
const puppeteer = require('puppeteer');
//Open browser
async function startBrowser() {
const browser = await puppeteer.launch({headless: true, args:['--no-sandbox']});
const page = await browser.newPage();
return {browser, page};
}
//Close browser
async function closeBrowser(browser) {
return browser.close();
}
//Html to pdf
async function html2pdf(url) {
const {browser, page} = await startBrowser();
await page.goto(url, {waitUntil: 'networkidle2'});
await page.emulateMedia('screen');
//Options
await page.pdf({
printBackground: true,
path: 'result.pdf',
displayHeaderFooter: true,
footerTemplate: …Run Code Online (Sandbox Code Playgroud)