天天看点

spring中使用jasperreport打印pdf----亲测解决所有bug

依赖:

<!--jasperreport以及所有依赖包-->
		<dependency>
			<groupId>net.sf.jasperreports</groupId>
			<artifactId>jasperreports</artifactId>
			<version>4.1.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.14</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.groovy</groupId>
			<artifactId>groovy-all</artifactId>
		</dependency>
		<dependency>
			<groupId>com.lowagie</groupId>
			<artifactId>itext</artifactId>
			<version>2.1.7</version>
		</dependency>
           

最后运行可能会报错,报

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font :

pdfFontName : STSong-Light

pdfEncoding : UniGB-UCS2-H

isPdfEmbedded : false

缺少字体,需要导入 itext2.1.7.jar以及iTextAsian.jar

这两个jar包需要自己手动打包到maven,中央仓库没有

然后就是一堆网上找得到的,使用jasperreports的代码,那个就不贴了

最后,在windows下能运行,到linux就报错,报

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font ‘宋体’ is not available to the JVM.

还是字体,在windows中系统是有宋体的,因此不会报错

先了解下这个程序运行机制:项目依赖中,也就是jar包,有字体的话,就直接使用,没有的话找部署这个项目的系统内置字体。

有两个解决办法:

1:linux安装字体集,不推荐

2:将字体引入到项目中

第一种,程序移植性就降低了,换一个服务器就得安装一次字体,不推荐

我这里使用第二种:

我们使用ireport工具在windows下能正常预览pdf,为啥?因为它里面有引入字体jar包,而不是使用系统内置的,不信?看下面

spring中使用jasperreport打印pdf----亲测解决所有bug

找到classpath,看到这个jar包了没,去这个位置找到这个jar包

拿出这个jar包,找到里面的字体文件,\net\sf\jasperreports\fonts\dejavu。

放入所需字体,目前需要宋体,宋体去哪里找?系统就有嘛,上网找系统的内置字体位置,拿到下面这个文件,还有一个ttd的,一起拿了

spring中使用jasperreport打印pdf----亲测解决所有bug

放入后修改jar包的xml,\net\sf\jasperreports\fonts\fonts.xml

<fontFamily name="宋体">

       <normal>net/sf/jasperreports/fonts/dejavu/simsun.ttf</normal>

       <bold>net/sf/jasperreports/fonts/dejavu/simsun.ttf</bold>

       <italic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</italic>

       <boldItalic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</boldItalic>

       <pdfEncoding>Identity-H</pdfEncoding>

       <pdfEmbedded>true</pdfEmbedded>

       <exportFonts>

           <export key="net.sf.jasperreports.html">'宋体', Arial, Helvetica, sans-serif</export>

           <export key="net.sf.jasperreports.xhtml">'宋体', Arial, Helvetica, sans-serif</export>

       </exportFonts>

	</fontFamily>
           

把这个jar包打进maven,后在pom中引入

完美解决