记录下我在公司使用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在存储和查找这个临时文件时找不到目录,所以提示字体文件找不到,最后到服务器加上这个目录就好了。