我想使用伪造者将this resume site打印到pdf 1页内的中,所需的结果类似于this结果已使用Seija,并且pageSize
的选项设置为one_long_page
(默认)。 one_long_page的pageSize确实是我想要的,但是我不知道如何在puppeteer中实现。请参见Seija documentation以查看该选项。
Here是Seija用于将html转换为pdf的脚本(有效)。
这是我目前的伪造者尝试:(您可以在线尝试,而无需在此处安装伪造者:https://try-puppeteer.appspot.com/)
const puppeteer = require('puppeteer')
;(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://nearhuscarl.github.io/portfolio/resume-full', {
waitUntil: 'networkidle2'
})
const [width, height] = await page.evaluate(
() => [
document.documentElement.offsetWidth,
document.documentElement.offsetHeight
]
)
console.log(width, height)
// await page.addStyleTag({
// content: `@page { size: auto; }`
// })
await page.pdf({
path: 'near_resume.pdf',
printBackground: true,
// scale: 0.98,
// pageRanges: '1',
// height: pageHeight,
// preferCSSPageSize: true,
width,
height,
// margin: { top: 0, right: 0, bottom: 0, left: 0 }
})
await browser.close()
})()
当前结果:
答案 0 :(得分:0)
这是我想出的代码,使它几乎可用,并且有很多技巧。即使看起来很简单,也找不到像pageSize: one_long_page
这样的简单解决方案。
const puppeteer = require('puppeteer')
const url = 'https://nearhuscarl.github.io/portfolio/resume-full'
const viewportWidth = 1000
const output = 'near_resume.pdf'
;(async () => {
const browser = await puppeteer.launch({
defaultViewport: {
width: +viewportWidth + 1, // THE HACK to make it work
height: 0
}
})
const page = await browser.newPage()
await page.goto(url, {
waitUntil: 'networkidle2'
})
const [width, height] = await page.evaluate(() => [
document.documentElement.offsetWidth,
document.documentElement.offsetHeight
])
console.log(width, height)
await page.pdf({
path: output,
printBackground: true,
pageRanges: '1', // THE HACK to make it work
height: +height + 1, // THE HACK to make it pixel-perfect
})
await browser.close()
})()