天天看點

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中引入

完美解決