前端生成pdf可通过JSPDF、html2canvas、pdfmake和dom-to-pdf等库实现。1. jsPDF功能强大,支持文本、图像、表格等内容绘制,适合精细控制;2. html2canvas结合jsPDF可将HTML元素转为PDF,适用于导出图表或表单预览;3. pdfmake通过json结构定义文档,适合生成发票、报告等固定格式的结构化文档;4. dom-to-pdf封装了前两者逻辑,提供简洁API,便于快速集成。根据需求选择:需精细控制用jsPDF,导出DOM区域推荐html2canvas+jsPDF或dom-to-pdf,结构化文档优选pdfmake。合理使用这些工具可提升用户体验,减少后端依赖。

在前端生成 PDF 文件的需求越来越常见,比如导出报表、下载合同、生成简历等场景。通过 JavaScript 可以直接在浏览器端完成 PDF 的创建,避免频繁请求后端,提升用户体验。以下是几个主流的前端生成 PDF 的 JavaScript 库及其基本实现方式。
1. jsPDF:功能强大且广泛使用的 PDF 生成库
jsPDF 是最流行的前端 PDF 生成库之一,支持文本、图像、矢量图形、表格等多种内容绘制,API 简洁易用。
npm install jspdf
基础使用示例:
立即学习“Java免费学习笔记(深入)”;
import { jsPDF } from "jspdf"; <p>const doc = new jsPDF(); doc.text("Hello world!", 10, 10); doc.save("example.pdf");</p>
它还支持添加图片(需配合 html2canvas)、设置字体、多页内容等高级功能。
2. html2canvas + jsPDF:将 HTML 元素转为 PDF
实际开发中,常需要将某个 DOM 元素(如 div)导出为 PDF。可通过 html2canvas 将元素渲染为 canvas,再由 jsPDF 转为 PDF。
安装 html2canvas:
npm install html2canvas
实现代码示例:
import { jsPDF } from "jspdf"; import html2canvas from "html2canvas"; <p>const captureAndGeneratePDF = () => { const element = document.getElementById("content-to-export");</p><p>html2canvas(element).then((canvas) => { const imgData = canvas.toDataURL("image/png"); const pdf = new jsPDF("p", "mm", "a4"); const width = pdf.internal.pageSize.getWidth(); const height = (canvas.height * width) / canvas.width;</p><pre class='brush:php;toolbar:false;'>pdf.addImage(imgData, "PNG", 0, 0, width, height); pdf.save("exported-content.pdf");
}); };
这种方式适合导出页面中的可视化内容,如图表、表单预览等。
3. pdfmake:结构化数据驱动的 PDF 生成方案
pdfmake 强调通过 JSON 结构定义文档内容,适合生成格式固定的文档,比如发票、报告。
特点:
- 支持跨平台字体嵌入
- 语法清晰,易于维护
- 内置表格、列表、样式系统
使用示例:
import pdfMake from "pdfmake/build/pdfmake"; import pdfFonts from "pdfmake/build/vfs_fonts"; pdfMake.vfs = pdfFonts.pdfMake.vfs; <p>const docDefinition = { content: [ { text: "订单信息", style: "header" }, { table: { body: [["商品", "数量"], ["手机", "1"]] } } ], styles: { header: { fontSize: 18, bold: true } } };</p><p>pdfMake.createPdf(docDefinition).download("order.pdf");</p>
适合需要动态填充模板的业务场景。
4. dom-to-pdf:简化 HTML 到 PDF 的转换流程
dom-to-pdf 是一个轻量级工具,封装了 html2canvas 和 jsPDF 的逻辑,提供更简洁的接口。
安装:
npm install dom-to-pdf
使用方式:
import domToPdf from "dom-to-pdf"; <p>const element = document.getElementById("print-area"); const options = { filename: "output.pdf" };</p><p>domToPdf(element, options, () => { console.log("PDF 已生成并下载"); });</p>
适合快速集成,减少样板代码。
基本上就这些。根据项目需求选择合适的工具:如果需要精细控制内容,选 jsPDF;若主要导出页面区域,推荐 html2canvas 配合 jsPDF 或直接使用 dom-to-pdf;对于结构化文档,pdfmake 更高效。前端生成 PDF 技术成熟,合理使用可显著提升交互体验。


