JasperReport导出PDF报缺少字体错误

最近在使用JasperReport做打印导出时出现“Font '宋体' is not available to the JVM. See the Javadoc for more details.”查了那边的环境后发现部署的Linux机子没有按照宋体,后来查找了一些资料,采用了以下的方案来解决:

(1)下载Jasperreport项目进入目录\demo\fonts\net\sf\jasperreports\fonts\dejavu

(2)将C:\WINDOWS\Fonts目录中的宋体字体文件,拷贝到上述目录中,并修改后缀为simsun.ttf

(3)修改\demo\fonts\net\sf\jasperreports\fonts目录中的fonts.xml,追加fontFamily元素,并配置宋体信息:

  <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>

(4)demo\fonts目录下的字体项目打出jar包放到项目的WEB-INF/lib目录

(5)最后,在Web项目的根目录增加配置文件jasperreports.properties,内容如下:

net.sf.jasperreports.awt.ignore.missing.font=true net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory net.sf.jasperreports.extension.simple.font.families.dejavu=net/sf/jasperreports/fonts/fonts.xml
最后按自己的理解来解释下为什么这样做就可以解决缺少字体的错误,因为在启动的时候会加载项目根目录的配置文件jasperreports.properties,然后知道了JasperReport在导出时找不到字体应该怎么处理,同时我们手工在项目中添加了相应的字体,这样就可以不用再服务器中安装缺少的字体了。假如在制作的jasper模板中还有其他字体,也可以采用相同的方式处理

你可能感兴趣的:(Web,linux)