当前位置: 首页 > 工具软件 > pdfmake > 使用案例 >

用pdfmake生成pdf中文文档

缪坚诚
2023-12-01

生成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),下载好这个工程执行以下操作:

  1. 进入工程的根目录,安装gulp,使用命令为 npm install gulp --save-dev
  2. 安装pdfmake的依赖包,指令 npm install
  3. 把下载好的字体文件放在工程里的 examples/fonts 路径下,因为中文字体包比较大,不建议打包多个字体包,然后执行指令 gulp buildFonts 
  4. 第三部走完之后,在build 文件中找到vfs_fonts.js文件,然后用这个文件替换你的项目里引入的pdfmake依赖包下的同名文件。
  5. 替换好了之后就是一些官网上也能够看到的操作,下边是我项目的测试代码:
注意引入写法:
import pdfMake from "pdfmake/build/pdfmake" ;
import pdfFonts from "pdfmake/build/vfs_fonts" ;
	 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的数据类型是个数组,具体怎么布置类型,官网上会有。
我是测试完几个之后,选择这个的,如果谁有更好的生成方法,还请赐教啊。要是哪个同志按照流程也没有跑通这个,可以留言,咱们互相学习。

 类似资料: