生成pdf文件,有两种实现的方法,一种是直接使用text生成pdf,不需要获取元素,一种是获取html元素,通过元素生成;通过对这两种方法的使用,我最终选择了使用text生成。在此过程中使用到了padMake这个js库(https://www.npmjs.com/package/pdfmakehttps://www.npmjs.com/package/pdfmake)。具体安装估计大家都能看懂,主要是咱们中国人使用的时候要生成中文的pdf,然而这个库里边集成的字体是英文常见的Roboto字体,这就导致生成pdf文件是乱码的。接下来就主要围绕解决乱码问题进行流程梳理。
首先,我们既然要生成中文,那就得有一个中文字体(比如我项目里的‘微软雅黑.ttf’),网络上搜下载好自己要生成的pdf字体。
其次,把下载好的字体,打包成js库能够使用的js文件。这一步要使用到pdfmake-master的源代码(https://github.com/bpampuch/pdfmake),下载好这个工程执行以下操作:
pdfMake.vfs = pdfFonts.pdfMake.vfs;
this.setState({ temp:ClassicWay.get_pdfmake_options(this.state.text) },()=>{ let text = { content:this.state.temp, defaultStyle: { font: '微软雅黑' } }; pdfMake.fonts = { 微软雅黑: { normal: '微软雅黑.ttf', bold: '微软雅黑.ttf', italics: '微软雅黑.ttf', bolditalics: '微软雅黑.ttf', } };//生成的pdf会下载到本地 pdfMake.createPdf(text).download(); })text.content的数据类型是个数组,具体怎么布置类型,官网上会有。我是测试完几个之后,选择这个的,如果谁有更好的生成方法,还请赐教啊。要是哪个同志按照流程也没有跑通这个,可以留言,咱们互相学习。