使用操纵符打印`one_long_page` pdf

时间:2020-01-24 07:06:43

标签: javascript puppeteer

我想使用伪造者将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()
})()

当前结果:

enter image description here

1 个答案:

答案 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()
})()

enter image description here