如何在Puppeteer中获取PDF文件大小?文档未找到相关方法
在Puppeteer中获取PDF文件大小的两种方法
Puppeteer官方文档确实没有直接提供获取PDF大小的API,但可以通过以下两种方式实现:
方法一:通过Buffer获取大小(无需保存到本地)
调用page.pdf()时不指定path参数,它会返回PDF文件的Buffer对象,直接读取Buffer的length属性就能得到文件的字节大小,再按需转换为KB/MB单位即可。
示例代码:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); // 生成PDF并获取Buffer const pdfBuffer = await page.pdf({ format: 'A4' }); // 计算不同单位的大小 const sizeBytes = pdfBuffer.length; const sizeKB = (sizeBytes / 1024).toFixed(2); const sizeMB = (sizeBytes / (1024 * 1024)).toFixed(2); console.log(`PDF大小:${sizeBytes} 字节 | ${sizeKB} KB | ${sizeMB} MB`); await browser.close(); })();
方法二:保存到本地后读取文件大小
如果已经需要将PDF保存到本地文件系统,可以用Node.js的fs模块读取文件状态,从中提取文件大小。
示例代码:
const puppeteer = require('puppeteer'); const fs = require('fs').promises; (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); const pdfPath = './output.pdf'; // 保存PDF到本地 await page.pdf({ path: pdfPath, format: 'A4' }); // 获取文件信息 const fileStats = await fs.stat(pdfPath); const sizeBytes = fileStats.size; const sizeKB = (sizeBytes / 1024).toFixed(2); const sizeMB = (sizeBytes / (1024 * 1024)).toFixed(2); console.log(`PDF大小:${sizeBytes} 字节 | ${sizeKB} KB | ${sizeMB} MB`); await browser.close(); })();
注意事项
Buffer.length返回的是字节数,转换为KB/MB时使用1024进制(符合计算机存储单位标准);如果需要按十进制转换,改用1000即可。- 如果生成PDF时包含大量资源(图片、字体),文件大小会相应增加,确保页面加载完成后再调用
page.pdf()(可以用page.waitForLoadState('networkidle')确保资源加载完毕)。
内容的提问来源于stack exchange,提问作者yiha
相关产品推荐
相关产品推荐

