|
记录下我在公司使用jasper自定义字体时的方法和遇到的坑
我的jasper的maven配置
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.3.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>5.6.1</version>
</dependency>
1:我们开发报表有些时候官方默认的字体包不能满足我们的需要,所以我们开始自定义字体,于是在网上查了很多资料,按照网上的方式自定义的字体文件放到jasperreports-fonts-5.6.1.jar的net\sf\jasperreports\fonts\dejavu目录下,字体文件要求必须ttf格式,然后在net\sf\jasperreports\fonts\fonts.xml文件中增加字体配置,我的配置如下:
<fontFamily name="宋体">
<normal>net/sf/jasperreports/fonts/dejavu/simsun.ttf</normal>
<bold>net/sf/jasperreports/fonts/dejavu/simsunbd.ttf</bold>
<italic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</italic>
<boldItalic>net/sf/jasperreports/fonts/dejavu/simsunbd.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'宋体','simsun'</export>
<export key="net.sf.jasperreports.xhtml">'宋体','simsunbd'</export>
</exportFonts>
</fontFamily>
<fontFamily name="仿宋_GB2312">
<normal>net/sf/jasperreports/fonts/dejavu/simsun.ttf</normal>
<bold>net/sf/jasperreports/fonts/dejavu/simsunbd.ttf</bold>
<italic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</italic>
<boldItalic>net/sf/jasperreports/fonts/dejavu/simsunbd.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'宋体','simsun'</export>
<export key="net.sf.jasperreports.xhtml">'宋体','simsunbd'</export>
</exportFonts>
</fontFamily>
2:在jasper ireport designer工具中,选择工具-选项-fonts-install font 安装指定字体,最后export as extension导出字体jar,再将jar包导入到工具-选项-classpath中就可以在控件字体选项中看到新增的字体

3:最后将字体jar包jasper模版文件放到服务器测试是否使用的自定义字体,我生产环境是用的tomcat,第一次放上去的时候发现字体还是不能生成,报错提示字体文件找不到,后来在测试环境断点调试发现jasper使用自定义字体文件时会需要一个临时的目录存放临时文件的,这个目录就是tomcat下temp目录,而我的服务器没有这样的目录,导致jasper在存储和查找这个临时文件时找不到目录,所以提示字体文件找不到,最后到服务器加上这个目录就好了。 |