Chrome 无头渲染完全错误到pdf
Chrome headless rendering completely wrong to pdf
我正在尝试使用 puppeteer 将包含多个 nvd3 图表的页面打印为 pdf。通过 Chrome 浏览器使用打印功能时,我获得了以下不错的输出(不要介意蓝色边框):
当我尝试通过 puppeteer 使用 chrome headless 访问同一页面时,我得到了这个输出,跨越 3 个页面:
这是我正在使用的代码:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setCookie({
name: 'cookie-a',
value: '...',
domain: 'example.com'
});
await page.setCookie({
name: 'cookie-b',
value: '...',
domain: 'example.com'
});
await page.goto('http://example.com/search/?bookmark=bot-overview', {waitUntil: 'networkidle'});
setTimeout(async function () {
await page.pdf({ path: 'page.pdf', format: 'A4', landscape: true });
browser.close();
}, 10000);
})();
我还尝试将高度和宽度固定为像素值 cm 和 mm,但这并不影响输出。请注意,整个页面的样式都是通过 pages 和 bootstrap 使用其印刷媒体样式表设置的。我还为打印介质添加了几个 css 规则(其中蓝色边框)。这些规则之一强制整个页面大小为 297mmx210mm,即 A4 页面的确切大小。
我遇到过和你一样的问题。一段时间后,我能够修复其中的一些问题:
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const url = 'https://example.com';
await page.emulateMedia('screen'); //<--
await page.goto(url, {waitUntil: 'networkidle'});
await page.screenshot({path: 'full_img.png', fullPage: true});
await page.pdf({
path: 'the_file.pdf',
format: 'A4',
printBackground: true, //<---
displayHeaderFooter: true, //<---
scale: 1,
landscape: false,
pageRanges: ""
});
})();
我正在尝试使用 puppeteer 将包含多个 nvd3 图表的页面打印为 pdf。通过 Chrome 浏览器使用打印功能时,我获得了以下不错的输出(不要介意蓝色边框):
当我尝试通过 puppeteer 使用 chrome headless 访问同一页面时,我得到了这个输出,跨越 3 个页面:
这是我正在使用的代码:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setCookie({
name: 'cookie-a',
value: '...',
domain: 'example.com'
});
await page.setCookie({
name: 'cookie-b',
value: '...',
domain: 'example.com'
});
await page.goto('http://example.com/search/?bookmark=bot-overview', {waitUntil: 'networkidle'});
setTimeout(async function () {
await page.pdf({ path: 'page.pdf', format: 'A4', landscape: true });
browser.close();
}, 10000);
})();
我还尝试将高度和宽度固定为像素值 cm 和 mm,但这并不影响输出。请注意,整个页面的样式都是通过 pages 和 bootstrap 使用其印刷媒体样式表设置的。我还为打印介质添加了几个 css 规则(其中蓝色边框)。这些规则之一强制整个页面大小为 297mmx210mm,即 A4 页面的确切大小。
我遇到过和你一样的问题。一段时间后,我能够修复其中的一些问题:
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const url = 'https://example.com';
await page.emulateMedia('screen'); //<--
await page.goto(url, {waitUntil: 'networkidle'});
await page.screenshot({path: 'full_img.png', fullPage: true});
await page.pdf({
path: 'the_file.pdf',
format: 'A4',
printBackground: true, //<---
displayHeaderFooter: true, //<---
scale: 1,
landscape: false,
pageRanges: ""
});
})();