我想使用
puppeteer
通过访问我的网站来生成 pdf 文件。问题是,虽然 screenshot
方法工作正常,但我无法生成 pdf
文件。这是我的代码:
async generatePdfByWisitingWebsite(user: UserEntity, data: InputGetPdfDto) {
const browser = await puppeteer.launch({ headless: true, protocolTimeout: 500000 });
const page = await browser.newPage();
await page.goto('http://localhost:3000/login', { waitUntil: 'networkidle2' });
await page.type('#email', '...');
await page.type('#password', '...');
await page.click('#loginButton');
await page.waitForNavigation({ waitUntil: 'networkidle2' });
await page.goto('http://localhost:3000/app/account', { waitUntil: 'networkidle2' });
await new Promise(function (resolve) {
setTimeout(resolve, 2000);
});
const content = await page.evaluate(() => document.body.innerHTML);
console.log(content);
await page.screenshot({ path: 'output/build1.png' });
await page.pdf({
path: 'output/test.pdf',
format: 'A4',
printBackground: true,
margin: {
top: '10mm',
right: '10mm',
bottom: '10mm',
left: '10mm',
},
timeout: 0,
});
await browser.close();
}
我等了几分钟,仍然没有回应。我尝试使用
headless: false
并且页面加载正确,所以不确定我做错了什么。有什么想法吗?
在 Windows 上也有类似的问题。目前 Puppeteer 上正在跟踪一个关于 PDF 在 Windows 上挂起的 GitHub 问题。
他们说这是 Puppeteer 目前无法控制的下载 Chrome 文件的权限相关问题。 GitHub 问题链接到 puppeter devs 的网站 作为解决方法。
就个人而言,这种解决方法是有效的。需要注意的是:我必须使用
icacls %USERPROFILE%/.cache/puppeteer/chrome /grant "ALL APPLICATION PACKAGES:(OI)(CI)(RX)"
而不是 $HOME。