rust 真的强到没朋友,在前端轻松生成 10000 页以上的矢量 PDF

7 月 15 日
 lmq1919

最近用 rust+wasn 重构了我的前端 PDF 生成库 dompdf.js ,重写了 PDF 分页、渲染引擎,发现真的越快越好。

之前的项目介绍,开源了一个 html 转 pdf 的 js 库,这应该是 html 转 pdf 最正确的思路了

性能提升,完全碾压现有的前端 PDF 生成方案

在线体验

https://dompdfjs.lisky.com.cn

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

https://github.com/lmn1919/dompdf.js

5065 次点击
所在节点    分享创造
25 条回复
thinkwei2012
7 月 15 日
先 star 一下
applet
7 月 15 日
支持设置页眉页脚嘛~
Yjhenan
7 月 15 日
非常棒!之前我就在想 html2canvas 既然可以绘制在 canvas 上,岂不是也可以绘制在 PDF?不过一直没去研究😂😂
Sundayz
7 月 15 日
Rust 确实快的离谱还节约内存,我的工具链已经都切换到 Rust 了,比如从 VS Code 切换到了 Zed 。
lmq1919
7 月 15 日
@alphagao 那必须支持的
lmq1919
7 月 15 日
@Yjhenan 现在有 ai ,有想法马上行动😄
yautou
7 月 15 日
@Sundayz zed 是用 rust 写的么,为啥安装包有一百多 MB ,不符合直觉啊
lmq1919
7 月 15 日
@Sundayz 就是学习曲线有点陡😂
clemente
7 月 15 日
其实不懂需求是什么?
chrome 的 打印转 pdf 区别是?
wzw
7 月 15 日
@lmq1919 #8 ai 写, 是不是曲线就不管了, 哈哈
yuandong
7 月 15 日
支持 markdown 转 pdf 吗
lmq1919
7 月 15 日
@clemente 这个覆盖不了所有需求场景。像一些前端 PDF 生成库,比如 pdfkit,jspdf,pdfmake,html2pdf.js,周下载量都在 100 万以上,说明需求场景还是很多的
lmq1919
7 月 15 日
@yuandong 我的示例里有 markdown 转 html 再生成 pdf 的,直接转 pdf 不行
clemente
7 月 15 日
@lmq1919 哦哦哦确实
kisaho
7 月 15 日
使用 Demo 后提出以下体验感受:
1. 并没有做到精准分割,该被切割的部分还是被切割。这个我之前有做过类似的项目,如果非要做到不被硬切割,那只能使用装箱算法:提前给每个需要导出的块一个标记,然后获取这些所有打了标记的块,循环标记块 => 转为 canvas => 转为图片 => 放到导出结果集中,超出预设 pdf 页面高度就加一页,如此反复直到结束。

2. 测试导出万页时 demo 直接卡死,该场景不太常见,建议隐去万页导出选项。

3. 对比 html2pdf 的优势目前来看就是博主的插件导出来的体积更小,产物可操作性更多。
peihuan
7 月 15 日
浏览器兼容性测试如何,chrome ,safari 甚至 edge , 导出的 pdf 样式都能保持一致吗
SeanYou
7 月 15 日
@peihuan 测试了一下导出的样式,好像根据你呈现的样式一样。
lmq1919
7 月 15 日
@peihuan 测了火狐,欧朋,edge,chrome 没问题,safari 目前手上没设备测试
lmq1919
7 月 15 日
@kisaho 感谢反馈😂。其实第一问题已经实现了的,不用你的方式那么复杂,给对应节点加上 divisionDisable 即可,如果这个节点被分割,那么它会被整体移动到下一页。只是我的示例有部分节点没有加这个属性。还有 pageBreak 属性,会强制将节点移到下一页。可以看看第一个示例的第 8 页
xing7673
7 月 15 日
@yautou 但是 zed 确实快,肉眼可见的体验提升。只不过现在还有一些 bug ,等它们出正式版起再去用也来得及

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1227370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX