js 生成中文 PDF 有啥好办法?

2021-10-24 12:06:49 +08:00
 jatsz2020
html2pdf 支持中文,html 排版,但是生成的 PDF 是图片的,无法复制里面的文字

jspdf 搞了好久无法支持中文,然后前端加载一个几十兆的字体也麻烦
4026 次点击
所在节点    JavaScript
15 条回复
codehz
2021-10-24 12:16:12 +08:00
要支持矢量化中文就必须得自己提供字体。。。浏览器的 api 只能糊成像素的(
binux
2021-10-24 12:19:56 +08:00
@codehz 理论上讲完全可以,文字是图片的,但是可以复制。
MonikaCeng
2021-10-24 13:16:25 +08:00
我之前用 windows 服务器,用了一个.exe 文件,php 命令行调用它去将网页转 pdf ,中文,文本可复制,链接可点击。linux 应该这种插件更多
beyondstars
2021-10-24 13:58:33 +08:00
建议让后端用 TeX (LaTeX, XeLaTeX) 实现文本到 PDF 的渲染,然后后端通过 API 的形式把功能开放给前端,这样前端可以通过 JS 发起异步请求调接口实现这个功能,生成的 PDF 质量也有保证。
jaywhen
2021-10-24 14:41:43 +08:00
Typora 用的 [pdf-lib]( https://github.com/Hopding/pdf-lib/ ),但是默认不支持渲染中文,如一楼所说得自己提供字体,嫌中文字体文件大可以用 [gulp-fontmin]( https://github.com/ecomfe/gulp-fontmin) 对字体文件压缩一下
jaywhen
2021-10-24 14:45:51 +08:00
@jaywhen 链接格式有点乱抱歉
muzuiget
2021-10-24 17:00:10 +08:00
PDF 太复杂了,还不如弄个打印布局页面,让用户通过打印功能生成。
codehz
2021-10-24 21:08:30 +08:00
@muzuiget (这么说直接用 window.print()方法就可以了,大道至简
zeni123
2021-10-24 21:20:10 +08:00
后端使用 headless chrome 打印, 多复杂的都能打印出来
qiaobeier
2021-10-24 21:28:35 +08:00
前端嵌入字体文件涉及安全问题(浏览器沙盒),还是用后端吧,一大堆解决方案。
ccraohng
2021-10-25 07:58:51 +08:00
后端吧,node 用 puppeteer, wkhtmltopdf 也可以
deadofpeople
2021-10-25 10:38:24 +08:00
wkhtmltopdf
nicknick
2021-10-25 10:49:31 +08:00
别别,你让后端做吧。某日客户拿个 ie9 跟你呛下载不了你就知道了。
supuwoerc
2021-10-25 14:19:29 +08:00
jspdf 有个韩国人做过支持多语言的二次开发,很久之前我记得有小伙伴用过,可以在 github 上找一找。
Kasumi20
2021-10-26 11:00:33 +08:00
强烈推荐 React-PDF ,不过中文需要自定义字体

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

https://www.v2ex.com/t/810128

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

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

© 2021 V2EX