V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yantianqi
V2EX  ›  程序员

前端 js 生成导出 pdf 有什么成熟方案吗?

  •  
  •   yantianqi · 2020-12-22 15:18:11 +08:00 · 5131 次点击
    这是一个创建于 1192 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 前端 js 生成导出 pdf 有什么成熟方案吗?
    2. 针对多页的文件,可能有 4,5 页
    29 条回复    2020-12-23 09:43:23 +08:00
    v135ex
        1
    v135ex  
       2020-12-22 15:28:34 +08:00
    不太清楚导出这块,PDFjs 可以试试
    charlesliu
        2
    charlesliu  
       2020-12-22 15:37:42 +08:00
    luxi78
        3
    luxi78  
       2020-12-22 15:51:41 +08:00
    html2pdf,应该满足你的要求,前后端都可用的
    https://www.npmjs.com/package/html2pdf.js
    lovedebug
        4
    lovedebug  
       2020-12-22 15:53:19 +08:00
    相对来说用后端 puppeteer 访问前端 UI 导出更友好。
    lovedebug
        5
    lovedebug  
       2020-12-22 15:56:40 +08:00
    新版浏览器可以使用 CSS 分页,旧版的可以引入 paged.js 分页
    Kasumi20
        6
    Kasumi20  
       2020-12-22 16:02:13 +08:00
    有一个 React 库,非常牛逼
    yantianqi
        7
    yantianqi  
    OP
       2020-12-22 16:04:47 +08:00
    @Kasumi20 哪个啊?
    yazoox
        8
    yazoox  
       2020-12-22 16:10:19 +08:00
    有没有把 html(一个目录,不止一个文件),或者,一个 git repo (readme.md 及子目录),转换成 mobi 或者 epub 的?
    GrapeCityChina
        9
    GrapeCityChina  
       2020-12-22 16:13:17 +08:00
    有的。SpreadJS 支持在线导出 PDF 。了解更多: https://www.grapecity.com.cn/developer/spreadjs

    SpreadJS 支持在线导入 /导出 Excel ( xlsx )、导出 PDF 文档,用户可在浏览器中加载并修改各种 Excel 文档,并将修改后的数据保存到数据库中。
    HFX3389
        10
    HFX3389  
       2020-12-22 16:39:37 +08:00
    @Kasumi20 #6
    @yantianqi #7 难道是传说中的“react-pdf”? https://github.com/diegomura/react-pdf
    Kasumi20
        11
    Kasumi20  
       2020-12-22 17:02:48 +08:00
    @HFX3389 对,就是这个
    littleshy
        12
    littleshy  
       2020-12-22 17:16:42 +08:00
    前端不建议折腾 pdf,要嵌字体,不然中文显示有问题。
    就是要能解决 unicode 显示问题。
    liuy1994g
        13
    liuy1994g  
       2020-12-22 17:26:58 +08:00   ❤️ 1
    由后端生成,前端封装一个下载按钮最成熟
    darknoll
        14
    darknoll  
       2020-12-22 17:32:49 +08:00
    前端干的也太多了吧,还要处理 pdf,以后再处理 office,后端该开心死了
    jingslunt
        15
    jingslunt  
       2020-12-22 17:35:16 +08:00 via Android
    格式转换的,pandoc
    koche
        16
    koche  
       2020-12-22 17:36:55 +08:00
    puppeteer
    adjusted
        17
    adjusted  
       2020-12-22 17:37:53 +08:00   ❤️ 1
    @lovedebug 正解,通过浏览器渲染 html 打印为 pdf,应该是坑最少的了。
    kinghly
        18
    kinghly  
       2020-12-22 17:41:40 +08:00 via Android
    打印 PDF 没有很完美的解决方案,别问我为什么知道。
    jingslunt
        19
    jingslunt  
       2020-12-22 17:45:58 +08:00 via Android
    @kinghly adobe 和微软的产品就做得很完美
    kinghly
        20
    kinghly  
       2020-12-22 17:55:34 +08:00
    @jingslunt 大佬分享一下
    attackonFourier
        21
    attackonFourier  
       2020-12-22 18:04:55 +08:00
    我们前端有个 nestjs 的微服务项目 然后使用 wkhtmltopdf 来做的 效果挺好
    treblex
        22
    treblex  
       2020-12-22 18:17:32 +08:00
    jquery print,效果还行,建议写个预览页,尽量减少无关元素
    googl8812
        23
    googl8812  
       2020-12-22 18:19:31 +08:00
    netnr
        24
    netnr  
       2020-12-22 18:35:32 +08:00 via Android
    https://md.netnr.com
    MD 导出 PDF,可以看看,好像不支持图片
    Mithril
        25
    Mithril  
       2020-12-22 18:36:11 +08:00
    直接 Puppeteer,HTML 扔后端渲染去。
    不然各种兼容性问题,字体问题,渲染问题坑到哭。
    Sapp
        26
    Sapp  
       2020-12-22 18:41:23 +08:00
    建议别折腾,看看那些文档库怎么做的,比如语雀和石墨文档这种,石墨文档我没看,但是语雀好像是后端做的,导出的还可以,有目录有水印
    samuel
        27
    samuel  
       2020-12-22 21:50:50 +08:00
    保险起见还是用 Puppeteer 写个后端服务,几十行代码就搞定了
    yangehappy
        28
    yangehappy  
       2020-12-22 22:38:11 +08:00
    我们项目里用的 jsPDF https://github.com/MrRio/jsPDF
    liuguang
        29
    liuguang  
       2020-12-23 09:43:23 +08:00
    window.print()
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3142 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:01 · PVG 21:01 · LAX 06:01 · JFK 09:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.