问题描述
我想将一些 html转换为pdf文件。问题是我只需要网页的一部分,当然也不需要全部元素。因此,我想知道是否有一种方法可以将单个元素与特定的id
例如定位,以便仅将该元素转换为pdf?
我知道我可以做到这一点,例如:
const dom = await page.$eval('div.jsb',(element) => {
return element.innerHTML
}) // Get DOM HTML
await page.setContent(dom) // HTML markup to assign to the page for generate pdf
但是,使用上面的代码不会保留CSS ...
使用page.addStyleTag
手动添加css也不是一种选择,因为我要转换为pdf的元素已经施加了很多CSS样式... >
所以问题仍然存在,如何使用Puppeteer转换页面上的单个元素(或者,如果您知道其他方式/方法/库,那么当然也欢迎使用这些方式)。
例如, Grabzit允许您在其选项中指定targetElement
,如下所示:
const options = {
'targetElement': '#rightContent','pagesize': 'A4',}
不幸的是,它没有给我一致的结果。
解决方法
我已经取得了一些成功:
const myElement = await page.$('.my-el');
await page.evaluate(el => {
el = el.cloneNode(true);
document.body.innerHTML = `
<div>
${el.outerHTML}
</div>
`;
},myElement);
const pdf = await page.pdf(...)
但是,当我选择的元素包含Canvas元素时,效果不是很好。
(代码基于此处的示例https://github.com/puppeteer/examples/blob/master/element-to-pdf.js)