ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何用3行代码在浏览器里生成PDF?dompdf.js前端PDF生成快速入门教程(npm/CDN双方式)

如何用3行代码在浏览器里生成PDF?dompdf.js前端PDF生成快速入门教程(npm/CDN双方式) 【免费下载链接】dompdf.jsHTML to PDF in the browser — one line of code for selectable, searchable vector PDFs (10,000 pages). Pure frontend: zero backend, zero runtime deps. TypeScript over a Rust WebAssembly engine; an html2canvas/jsPDF alternative.项目地址https://gitcode.com/gh_mirrors/do/dompdf.js点击查看免费下载dompdf.js 是一款纯前端的浏览器生成PDF工具在浏览器里直接读取已排版好的 HTML 内容生成文字可选中、可搜索的矢量PDF无需后端服务器、不依赖 jsPDF 或截图方案。典型测试中它约 2 秒即可导出 500 页文档极限规模可扩展到上万页。本教程面向新手带你用npm 和 CDN 两种方式完成安装并用不到 3 行代码生成第一份 PDF。为什么选择 dompdf.js 做前端PDF生成很多项目导出 PDF 依赖后端服务或截图拼图方案而 dompdf.js 走的是另一条路线核心优势如下对比项传统截图方案html2canvas 类dompdf.js文本形式图片无法选中搜索矢量文本可选中、可复制、可搜索运行位置浏览器主线程卡顿浏览器Web Worker WASM不阻塞主线程大文档页数多了易崩500 页约 2 秒支持上万页依赖需要后端或重型流水线零后端、零运行时依赖它的能力清单相当完整详见 README_CN.md 支持 A/B/C 系列、Letter、Legal、Tabloid 等纸张也可自定义尺寸 页眉页脚、页码占位符、逐页配置 文字水印、图片水印、PDF 加密与权限控制 中文字体嵌入TTF 子集化解决中文空白问题 表单导出、超链接注释、DEFLATE 压缩安装 dompdf.jsnpm 与 CDN 双方式方式一npm 安装适合工程化项目在终端执行一条命令即可包要求 Node.js 18npm install dompdf.js安装完成后导入方式如下入口定义见 src/index.tsimport dompdf from dompdf.js; import { downloadPDF } from dompdf.js;方式二CDN 引入适合快速上手在 HTML 中加一行scriptAPI 会自动挂载到全局dompdf变量上script srchttps://cdn.jsdelivr.net/npm/dompdf.jslatest/dist/dompdf.min.js/script 两种方式功能完全一致CDN 方式连构建步骤都省了非常适合做 Demo 或原型验证。3 行代码下载 PDFnpm 版快速开始假设页面上有一个#capture元素用 downloadPDF 导出并触发浏览器下载核心代码只有 3 行import { downloadPDF } from dompdf.js; const element document.querySelectorHTMLElement(#capture); await downloadPDF(element, { format: a4, pagination: true, compress: true }, report.pdf);三个选项各司其职format: a4指定 A4 纸张完整尺寸表见 page_sizes.mdpagination: true启用多页分页否则输出的是单页长画布compress: true启用 DEFLATE 压缩减小 PDF 体积想自己控制预览用 Blob 方式默认导出函数返回PromiseBlob可以先在浏览器里预览再下载import dompdf from dompdf.js; const blob await dompdf(element, { format: a4, pagination: true, backgroundColor: #ffffff, }); const url URL.createObjectURL(blob); window.open(url, _blank); setTimeout(() URL.revokeObjectURL(url), 30_000); // 预览后再释放此外还有 renderToBytes返回Uint8Array原始字节方便上传接口和 inspect诊断节点数、图片数、页数完整类型定义位于 src/snapshot.ts。CDN 版实践做一个一键导出按钮不搭构建环境也能跑。下面是一个完整可用的 HTML 片段点击按钮即导出#capture区域button idexport导出 PDF/button section idcapture需要导出的内容/section script srchttps://cdn.jsdelivr.net/npm/dompdf.jslatest/dist/dompdf.min.js/script script document.querySelector(#export).addEventListener(click, async () { await dompdf.downloadPDF( document.querySelector(#capture), { format: a4, pagination: true }, example.pdf ); }); /script仓库内也提供了浏览器示例页面例如 examples-main/demo.html本地执行npm run serve静态服务端口 8080后即可打开体验。常用导出选项速查以下是最常用的几个选项完整表格见 README.md 的 Export Options 一节选项默认值说明formata4纸张名或[宽, 高]单位 ptpaginationfalse是否按纸张高度分页marginPt0页边距支持[上, 右, 下, 左]backgroundColornull页面背景null为透明compressfalseDEFLATE 压缩流onProgress无进度回调collecting / countingPages / rendering / done加分项页脚页码 水印 压缩await dompdf(element, { pagination: true, compress: true, pageConfig: { footer: { content: 第 ${currentPage} 页 / 共 ${totalPages} 页, height: 40, contentPosition: center, }, }, watermark: { text: 内部资料, angle: -35, color: rgba(0, 0, 0, 0.12), }, });分页时想让某块内容强制从新页开始加一个pageBreak属性即可想让某块尽量不被拆开用divisionDisable。它是怎么工作的30 秒看懂原理dompdf.js 并不重新实现浏览器排版而是借浏览器的计算结果主线程遍历目标元素读取浏览器已算好的布局、样式、文本、图片与表单状态TypeScript 把结果编码成紧凑的二进制快照快照传给 Web Worker由 Rust/WASM 完成分页、字体子集化、绘制与 PDF 对象生成主线程拿到 PDF 字节返回Blob/Uint8Array或直接下载这条流水线正是它主线程不卡 文本仍是矢量的关键Worker 逻辑见 src/worker.tsWASM 引擎见 wasm/src/paginate.rs。新手常见问题 FAQQ中文导出后是空白或方块浏览器字体不会自动嵌入 PDF。需通过fontConfig.fontBytes注册包含所需字符的 TTF 字体并确保元素 CSS 的font-family与注册的fontFamily一致。Q分页效果和浏览器里看到的不一样导出容器的 CSS 宽度应尽量贴近目标页面内容宽度A4 约 794px 96 DPI再减去边距并等待字体、图片加载完成后再导出。Q跨域图片缺失设置useCORS: true同时图片服务器必须返回Access-Control-Allow-Origin响应头——前端选项无法绕过服务器策略。Q从 html2canvas jsPDF 迁移过来兼容吗旧版选项如allowTaint、proxy、scale只保留签名、不再提供原有行为。完整迁移路径见 docs/migration-compat.zh-CN.md。Q能在 Node.js 里直接调用吗不能。导出 API 依赖 DOMSSR 项目Next.js、Nuxt请在客户端调用。小结场景推荐做法快速验证想法CDN 引入 dompdf.downloadPDF3 行搞定工程化集成npm install dompdf.js按需组合选项长文档/报告pagination: true 页眉页脚 压缩敏感文档开启encrypt密码与权限dompdf.js 用 TypeScript Rust/WASM 的组合把浏览器生成PDF这件事做到了零后端、零运行时依赖而导出 API 简单到只需 3 行代码。现在就挑一个页面试试把导出 PDF按钮加进你的项目吧赞分享【免费下载链接】dompdf.jsHTML to PDF in the browser — one line of code for selectable, searchable vector PDFs (10,000 pages). Pure frontend: zero backend, zero runtime deps. TypeScript over a Rust WebAssembly engine; an html2canvas/jsPDF alternative.项目地址https://gitcode.com/gh_mirrors/do/dompdf.js点击查看免费下载相关推荐dompdf.js终极指南浏览器端HTML转PDF引擎零后端、无jsPDF一行代码生成可选中矢量PDFdompdf.js终极指南浏览器端HTML转PDF引擎零后端、无jsPDF一行代码生成可选中矢量PDF dompdf.js 是一个纯前端的浏览器端 HTM前端PDF预览与生成基于pdf-lib的浏览器端解决方案前端PDF预览与生成基于pdf lib的浏览器端解决方案 你是否还在为前端PDF处理烦恼尝试了多个库却始终找不到既轻量又功能全面的解决方案本文将带你探索如开发工具终极指南如何使用html2pdf.js在浏览器中快速生成高质量PDF终极指南如何使用html2pdf.js在浏览器中快速生成高质量PDF 想要在网页中快速生成PDF文件却不想依赖服务器端处理 html2pdf.js 就是你的前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进