依賴:
<!--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包,而不是使用系統内置的,不信?看下面
找到classpath,看到這個jar包了沒,去這個位置找到這個jar包
拿出這個jar包,找到裡面的字型檔案,\net\sf\jasperreports\fonts\dejavu。
放入所需字型,目前需要宋體,宋體去哪裡找?系統就有嘛,上網找系統的内置字型位置,拿到下面這個檔案,還有一個ttd的,一起拿了
放入後修改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中引入
完美解決