美文网首页
JS前端使用pdfMake生成PDF

JS前端使用pdfMake生成PDF

作者: 背影_9115 | 来源:发表于2018-12-29 21:31 被阅读0次

前因

大佬说要把现在项目的一些表格用pdf导出来,那就做呗,程序员嘛,百度梭就是了,找到了两个方法,都是前端实现的。

  • html2canvas+pdfJS 直接把页面所看见的东西全部保存成一张canvas图片然后转成pdf
    优点:所见即所得,不影响页面原有功能
    缺点:太糊了

  • pdfMake 用它定义的一套书写规则写一个对象,插件会把这个对象渲染成pdf导出来
    优点:清晰,太清晰了
    缺点:本身不支持中文,要自己另配置比较麻烦,而且中文字体包都比较大,4M起步

但我还是选了pdfMake,因为这个功能不需要编辑,只是数据的展示和pdf的下载,而且考虑到以后会加一键下载多个pdf的功能,还是用pdfMake比较方便填入数据。

学习

3天前,pdfMake的官网文档还是只有几行的东西,我惊了,除了download,open等几个API就没别的了,我就想着把github的代码下载下来看看有什么接口,发现了一个getBase64() 可以获取pdf的base64格式数据,我就自己加上data:type/pdf;base64头来合成一个url,效果还不错,直到我看到了download下来的README.md文件,惊了,清晰明了我把它用机器翻译成了中文,大家可以看看 pdfMake中文文档,发现了一个getDataUrl()可以直接获取url,代码又好看了一点

中文支持

pdfMake是不支持中文的,具体操作我懒得说了,百度前几篇综合看就明白了,我说一下总体思路和注意事项吧,

  • 把一个ttf文件拉到pdfMake存放字体的文件(注意ttf后缀要小写,pdfMake的源码都是小写ttf,而windows的fonts拉出来的是TTF大写后缀)
  • src-browser-extensions-pdfMakes.js里修改,这里我是改成微软雅黑
var defaultClientFonts = {
    Roboto: {
        normal: 'simhei.ttf',
        bold: 'simhei.ttf',
        italics: 'simhei.ttf',
        bolditalics: 'simhei.ttf'
    }
};
  • 删掉原来的字体文件,然后用gulp打包出vfs_fonts.js
gulp buildFonts

就基本ok了

相关文章

网友评论

      本文标题:JS前端使用pdfMake生成PDF

      本文链接:https://www.haomeiwen.com/subject/wjtylqtx.html