弃用html2pdf.js,这个html转pdf方案能力是它的几十倍

作者:刘发财日期:2026/3/2

欢迎转载文章

在前端开发中,“把网页变成 PDF”是个老生常谈的需求。无论是生成发票、报告还是简历,用户总希望点一下按钮就能带走一份格式完美的文档。 目前主流的前端html转pdf方案是通过html2canvas将网页渲染成canvas,再通过jsPDF将canvas转换为pdf。代表方案就是 html2pdf.js,npm包周下载量达到了80万,为广大开发者所接受。但是因为它基于html2canvas和jsPDF,会有一些无法解决的问题,比如:

  • 生成速度慢
  • 生成的pdf文件体积大
  • 生成的pdf内容会模糊,打印时无法达到清晰度要求
  • 文字无法被搜索,选中,编辑,因为它生成的pdf是图片式的,而非矢量pdf

而现在,有一种全新的解决思路,完美的解决了这些问题,那就是作者开源的前端pdf生成库dompdf.js,具体的实现和说明可以查看我上一篇文章 https://juejin.cn/post/7583912637470769203

在线体验

dompdfjs.lisky.com.cn

Git 仓库地址 (欢迎 Star⭐⭐⭐)

github.com/lmn1919/dom…

gitee.com/liu-facai/d…

dompdf.js的大致原理

1.解析 html 页面,生成一个包含节点位置信息,样式,层级,内容等信息的 DOM 树。

2.递归 DOM 树,根据节点据顶部的高度和生成页面规格的高度,将节点分配到不同的页面。

3.调用 jspdf.js 的 api,将节点绘制到 PDF 文件上。

可以看出,dompdf.js 跳过了html转图片的步骤,直接将 DOM 树转换为矢量 PDF 文件,避免了图片转换导致的模糊问题,同时也解决了文字无法被搜索,选中,编辑的问题。

下面,我们从pdf生成速度,生成质量,生成数量等方面对两种方案进行对比

测试的内容为生成包含文本和表格的pdf文件

1.文件生成速度对比

同样的内容,dompdf.js 生成速度更快,耗时基本上只有 html2pdf.js 的 1/2。

微信截图_20260303012415.png

2.文件体积对比

dompdf.js 生成的 pdf 文件体积更小,同样的内容页数,dompdf.js 生成的 pdf 文件体积是 html2pdf.js 的 1/5左右。

微信截图_20260303012435.png

3.清晰度对比

在放大到500%后,html2pdf.js 生成的 pdf 文字会出现明显的锯齿,而 dompdf.js 生成的 pdf 文字则完全没有压力。

html2pdf.png

html2pdf.js生成的pdf文件,放大后会有锯齿

微信截图_20260303013333.png

dompdf.js生成的矢量文件,不会出现模糊的情况

4.生成数量对比

html2pdf.js在30页左右,由于canvas高度限制,就会出现空白页,而 dompdf.js 轻松可以生成数百上千页的pdf。

微信截图_20260303014415.png

html2pdf.js生成的pdf文件,内容过多会出现空白页

微信截图_20260303015837.png

dompdf.js轻松可以生成数百上千页pdf

总结

通过上述对比可以看出,dompdf.js 在各项指标上都完胜传统的 html2pdf.js 方案。它不仅解决了 html2canvas 带来的模糊、体积大、无法选中文字等痛点,还大幅提升了生成速度和页面承载能力。

对于需要高质量、可编辑、且对性能有要求的前端 PDF 生成场景,dompdf.js 无疑是目前更优的选择。

如果你也被前端生成 PDF 的各种坑所困扰,不妨试一试这个库,希望能够帮助到你!

别忘了去 GitHub 点个 Star 支持一下作者哦!⭐⭐⭐

GitHub: github.com/lmn1919/dom…


弃用html2pdf.js,这个html转pdf方案能力是它的几十倍》 是转载文章,点击查看原文


相关推荐


【大模型面试突击】03_大模型架构演进与对比
香芋Yu2026/2/21

2026大模型面试:大模型架构演进与对比必考28题(含答案) 精选自176道采集题目,保留最高频最核心的28题 | 难度:⭐基础 ⭐⭐进阶 ⭐⭐⭐深入 一、GPT与LLaMA系列演进(7题) 1. ⭐⭐ [字节/高频] GPT系列从GPT-1到GPT-4的架构演进主要脉络是什么? 一句话秒答: 四代GPT走的是一条"预训练范式→暴力出奇迹→多模态融合"的进化路线,每一步都在重新定义规模的上限。 展开来说: GPT-1其实干了一件很简单但当时很大胆的事——把Transformer Decod


2025 年客户端技术盘点与 2026 年技术展望
陆业聪2026/2/13

摘要:2025 年客户端技术围绕三条主线展开:Apple Liquid Glass 与 Android Material 3 Expressive 引领设计革新,端侧 AI 通过 Apple Foundation Models 框架和 Google Gemini 走向开发者可编程化,Flutter、React Native、KMP 等跨平台框架在性能上全面向原生看齐。2026 年的核心看点在于端侧 AI 生态建设、新设计语言落地及鸿蒙全球化验证。 本文基于 2025 年各平台官方发布的公开信


Rust多线程编程学习笔记
sayang_shao2026/2/4

目录 Rust 多线程基础同步线程编程 基本线程创建线程间通信共享状态线程返回值线程池 异步线程编程 Tokio 异步运行时异步任务异步通道异步共享状态 线程安全 所有权与借用同步原语Send 和 Sync trait 性能优化 线程数量避免竞争异步 vs 同步 最佳实践完整代码示例总结 Rust 多线程基础 Rust 的多线程编程建立在标准库的 std::thread 模块之上。与其他语言不同,Rust 通过其所有权系统和类型系统来保证线程安全,避免了常见的并发问


OoderAgent V0.6.5 Nexus 重磅发布:开启超级智能体开发框架新纪元
OneCodeCN2026/1/26

前言: v0.6.5 使用了一个特别的代号,Nexus(枢纽)她不再是一次简单的技术升级。而是一次重生。cong 从0.6.2到0.6.5我们在AI的驱动先快速的迭代,从从基础架构到核心升级,再到技能统一提升,直到0.6.5 一次质的跃迁。本次版本以“构建个人超级终端、赋能全场景智能开发”为核心,重构技术架构、强化能力体系、拓展生态边界,为开发者提供一套从设备协同到AI能力编排的全链路智能体开发解决方案,标志着SuperAgent向“去中心化超级智能体底座”迈出关键一步。 一、Nexu


【SpringBoot】从学会使用maven开始
那我掉的头发算什么2026/1/17

🎬 那我掉的头发算什么:个人主页 🔥 个人专栏: 《javaSE》《数据结构》《数据库》《javaEE》 ⛺️待到苦尽甘来日 引言 当我们在创建一个新的idea项目时,不知道大家注意过没有 在这个页面中除了IntelliJ选项之外,还有一个Maven选项。而这个Maven恰好就是我们今天这篇文章的重头戏! 文章目录 引言创建Maven项目pom文件项目基本信息GAVproperties依赖管理核心:dependencies与depe


RAG索引流程详解:如何高效解析文档构建知识库
北辰alk2026/1/9

引言:为什么文档解析是RAG的基石? 在RAG(检索增强生成)系统中,文档解析是整个知识库构建的第一步,也是最关键的一步。就像建房子需要打好地基一样,良好的文档解析质量直接决定了后续检索和生成的效果。今天,我们就深入探讨RAG索引流程中的文档解析技术。 一、RAG文档解析的整体架构 首先,让我们通过一个流程图了解完整的解析流程: ┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐ │                 


Pico裸机2(汇编基础)
fanged2026/1/1

既然都裸机了,还是简单回顾一下汇编吧。。。 1 概念 来自:https://redfoxsec.com/blog/introduction-to-assembly-language/ 汇编基本上就是机器码。汇编语言是一种直接对应处理器指令集的低级语言,它以人类可读的形式表达机器指令,是软件与硬件之间几乎最底层的一层接口;每一条汇编指令几乎都能映射为一条机器指令,能够精确控制寄存器、内存、指令顺序和硬件状态,因此被广泛用于启动代码、中断处理、上下文切换和性能或时序极端敏感的场景。


Flutter 开发实战:解决华为 HarmonyOS 任务列表不显示 App 名称的终极指南
雨夜寻晴天2025/12/22

问题背景 在 Flutter 应用开发中,我们最近遇到了一个棘手的兼容性问题:在部分 华为手机(HarmonyOS 4.2.0,如 Mate 30 Pro 5G) 上,应用运行时的最近任务列表(Overview Screen)中,只显示应用图标,却不显示应用名称(App Name)。 虽然我们在 AndroidManifest.xml 中正确配置了 android:label,但在 HarmonyOS 系统上依然无效。这不仅影响用户体验,也可能导致应用在审核时被拒(如华为应用市场审核指南第 2.


【鸿蒙开发案例篇】定点出击!鸿蒙6.0视频碰一碰流转+实时进度同步案例
威哥爱编程2025/12/14

兄弟们抄家伙!今天V哥要用鸿蒙6.0的分布式能力撕碎视频跨设备流转的防线!目标:手机碰一下车机/平板,视频秒级切换+进度毫秒级同步,全程零手动干预!以下基于HarmonyOS 6.0(API 21)的ArkTS实战核弹代码已就位👇 联系V哥获取 鸿蒙学习资料 🔥 一、技术架构:分布式视频作战链 核心武器库: 碰一碰触发:NFC+分布式设备管理(@ohos.distributedDeviceManager) 进度同步引擎:AVSession Kit(@kit.AVSessionKit) 数


程序员从大厂回重庆工作一年
uzong2025/12/6

从大厂裸辞回重庆工作,整整一年了。 时间快得让人心惊。停下回望,从裸辞、归乡、求职到适应,再到角色转换,种种心绪,感慨颇多。 一、离开时,那句话成了种子 最后一个工作日的下午,领导把我叫到楼道,做了一次临别交谈。 他有一句话,我至今记得清清楚楚:“以后出去,一定要想办法走向管理岗位,那是完全不同的竞争力。” 当时只是记下。一年后的今天,当我开始带领一个小团队时,这句话突然在心里发了芽。 它像一颗提前埋下的种子,在合适的时节悄然生长。 二、裸辞回渝:一场恰如其分的“任性” 回重庆是裸辞的。所有

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客