const puppeteer = require('puppeteer');
async function generatePdf(url, filePath) {
// 启动无头浏览器
const browser = await puppeteer.launch({
headless: true, // 设置为 false 以在调试时看到浏览器窗口
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--enable-accelerated-2d-canvas',
'--enable-aggressive-domstorage-flushing'
],
ignoreHTTPSErrors: true,
timeout: 60000,
});
const page = await browser.newPage();
// 设置视口大小
await page.setViewport({
width: 800,
height: 1130,
deviceScaleFactor: 1,
});
// 导航到指定的 URL
await page.goto(url, { waitUntil: 'networkidle0' });
// 等待特定元素加载完成(如果需要的话)
// await page.waitForSelector('.mod-article-content');
// 导出 PDF 的格式
const options = {
// 纸张尺寸
width: '800px',
height: '1130px',
// 打印背景,默认为 false
printBackground: true,
// 不展示页眉
displayHeaderFooter: true,
// 页眉与页脚样式,可在此处展示页码等
headerTemplate: '<div style="text-align: center;">Header</div>',
footerTemplate: '<div style="text-align: center;">Page <span class="pageNumber"></span></div>',
path: filePath // 指定生成的 PDF 文件存放路径
};
// 生成 PDF
await page.pdf(options);
// 关闭页面
await page.close();
// 关闭 Chromium
await browser.close();
}
// 调用函数
generatePdf('https://www.baidu.com/', 'baidu.pdf')
.then(() => console.log('PDF generated successfully.'))
.catch(error => console.error('Failed to generate PDF:', error));
下载 puppeteer - 执行 npm i puppeteer
执行 npx puppeteer browsers install chrome
将上述代码放置项目中 配置完成调用。