nodejs pdf包

张开发
2026/4/13 9:13:05 15 分钟阅读

分享文章

nodejs pdf包
整理了 Node.js 生态中最流行的PDF 生成包按使用场景分类一、HTML/CSS 转 PDF浏览器渲染1.Playwright⭐ 推荐2024-2025 趋势安装npm install playwright特点支持 Chromium、Firefox、WebKit 多浏览器完美渲染现代 CSS、JavaScript 动态内容社区活跃度超越 Puppeteer示例JavaScript复制const { chromium } require(playwright); (async () { const browser await chromium.launch(); const page await browser.newPage(); // 从 URL 生成 await page.goto(https://example.com, { waitUntil: networkidle }); // 或从 HTML 字符串 await page.setContent(h1Hello PDF/h1); await page.pdf({ path: output.pdf, format: A4, printBackground: true, margin: { top: 20px, right: 20px, bottom: 20px, left: 20px } }); await browser.close(); })();2.Puppeteer安装npm install puppeteer特点Chrome 专用生态成熟但仅支持 ChromiumJavaScript复制const puppeteer require(puppeteer); async function generatePDF(htmlContent, outputPath) { const browser await puppeteer.launch(); const page await browser.newPage(); await page.setContent(htmlContent, { waitUntil: networkidle0 }); await page.pdf({ path: outputPath, format: A4, printBackground: true, margin: { top: 20mm, right: 20mm, bottom: 20mm, left: 20mm } }); await browser.close(); }二、程序化生成 PDF无浏览器3.PDFKit- 底层控制安装npm install pdfkit特点流式 API适合发票、标签等简单文档JavaScript复制const PDFDocument require(pdfkit); const fs require(fs); const doc new PDFDocument(); doc.pipe(fs.createWriteStream(output.pdf)); doc.fontSize(25).text(Hello World!, 100, 100); doc.image(path/to/image.png, 100, 150, { width: 300 }); // 手动绘制表格 const tableTop 300; const cellWidth 100; doc.fontSize(12).text(Name, 100, tableTop); doc.text(Age, 100 cellWidth, tableTop); doc.moveTo(100, tableTop 20).lineTo(300, tableTop 20).stroke(); // 画线 doc.end();4.pdf-lib- PDF 编辑专家特点TypeScript 编写支持修改现有 PDF、合并、嵌入字体JavaScript复制const { PDFDocument } require(pdf-lib); const fs require(fs); async function createPDF() { const pdfDoc await PDFDocument.create(); const page pdfDoc.addPage(); page.drawText(Hello World!, { x: 50, y: 700, size: 30 }); const pdfBytes await pdfDoc.save(); fs.writeFileSync(output.pdf, pdfBytes); }5.jsPDF- 浏览器 Node 双支持安装npm install jspdf特点老牌库API 简单但复杂布局较困难JavaScript复制const { jsPDF } require(jspdf); const fs require(fs); const doc new jsPDF(); doc.setFontSize(22); doc.text(Hello world!, 20, 20); const pdfBuffer Buffer.from(doc.output(arraybuffer)); fs.writeFileSync(jspdf-example.pdf, pdfBuffer);三、高级方案表格包名适用场景特点PDFMake声明式文档定义JSON 配置驱动适合报表React-PDFReact 项目组件化 PDF 生成pdfme模板设计基于 pdf-lib 的声明式封装支持可视化设计器IronPDF企业级商业库功能全面但收费选择建议表格需求推荐包理由HTML/CSS 转 PDFPlaywright多浏览器、维护活跃、渲染精准简单发票/标签PDFKit或jsPDF轻量、快速、无浏览器依赖修改现有 PDFpdf-lib专门用于 PDF 编辑操作React 项目React-PDF组件化开发体验复杂表格报表PDFMake或pdfme声明式 API易于维护性能对比表格包安装大小生成速度渲染质量Playwright/Puppeteer~150-400MB含浏览器慢秒级最高真实浏览器PDFKit/jsPDF 5MB快毫秒级中等程序化绘制pdf-lib 5MB快中等新项目推荐如果团队能接受浏览器依赖Playwright是 2024-2025 年的最佳选择如果追求轻量PDFKit或pdf-lib更合适。引用chrome-headless-shell.exe 如何安装编辑复制分享我来搜索 chrome-headless-shell 的安装方法搜索网页chrome-headless-shell install download chrome-headless-shell npm puppeteer chrome-headless-shell.exe windows install puppeteer chrome-headless-shell download97 个结果根据搜索结果我为您整理了chrome-headless-shell.exe 的安装方法方法一使用 Puppeteer 自动下载推荐Puppeteer v22 支持headless: shell模式会自动处理下载bash复制# 安装 puppeteer会自动下载兼容的 Chrome npm install puppeteerJavaScript复制const puppeteer require(puppeteer); // 使用轻量级无头模式chrome-headless-shell const browser await puppeteer.launch({ headless: shell // 使用旧版 headless 壳模式 });方法二使用 puppeteer/browsers 命令行工具Google 官方提供的命令行工具专门用于下载 Chrome for Testing 相关二进制文件bash复制# 安装命令行工具 npm install -g puppeteer/browsers # 下载最新稳定版 chrome-headless-shell npx puppeteer/browsers install chrome-headless-shellstable # 或下载指定版本 npx puppeteer/browsers install chrome-headless-shell120.0.6098.0下载位置Windows:chrome-headless-shell-win64/chrome-headless-shell.exe默认缓存目录%USERPROFILE%\.cache\puppeteer或项目目录方法三手动下载Windows1. 从 Chrome for Testing 下载访问 Chrome for Testing 可用性页面找到对应版本的下载链接powershell复制# PowerShell 下载示例Stable 版本 147.0.7727.50 wget https://storage.googleapis.com/chrome-for-testing-public/147.0.7727.50/win64/chrome-headless-shell-win64.zip -O chrome-headless-shell.zip # 解压 Expand-Archive -Path chrome-headless-shell.zip -DestinationPath .\2. 目录结构plain复制chrome-headless-shell-win64/ └── chrome-headless-shell.exe -- 可执行文件3. 添加到 PATH 或使用绝对路径JavaScript复制const puppeteer require(puppeteer); const browser await puppeteer.launch({ headless: shell, executablePath: C:\\path\\to\\chrome-headless-shell-win64\\chrome-headless-shell.exe });方法四使用 PlaywrightPlaywright 也支持 chrome-headless-shellbash复制npm install playwright npx playwright install chromiumJavaScript复制const { chromium } require(playwright); const browser await chromium.launch({ headless: true // Playwright 会自动处理 });各方法对比表格方法适用场景优点缺点Puppeteer 自动Node.js 项目自动管理版本无需手动下载依赖 Puppeteer 生态puppeteer/browsers需要精确控制版本官方工具版本明确需手动集成到代码手动下载离线环境/特定路径完全控制位置需手动更新Playwright多浏览器测试支持 Chromium/Firefox/WebKit安装包较大常见问题1. 找不到 chrome-headless-shell.exe确保下载的是win64版本不是 win32并检查解压后的路径powershell复制# 验证文件存在 dir chrome-headless-shell-win64\chrome-headless-shell.exe2. 与 chromedriver 版本匹配如果使用 Selenium需确保 chromedriver 与 chrome-headless-shell 版本一致bash复制# 下载相同版本的 chromedriver npx puppeteer/browsers install chromedriverstable3. 在代码中指定路径JavaScript复制// Puppeteer const browser await puppeteer.launch({ executablePath: ./chrome-headless-shell-win64/chrome-headless-shell.exe, headless: shell }); // Playwright const browser await chromium.launch({ executablePath: ./chrome-headless-shell-win64/chrome-headless-shell.exe });推荐对于 Node.js 项目最简单的方法是使用npx puppeteer/browsers install chrome-headless-shellstable命令下载然后在代码中指定executablePath。高峰时段算力不足已切换至 K2.5 快速升级会员畅用思考模型引用

更多文章