JasperReport在Aix环境下运行时找不到字体的解决方案

在AIX的weblogic9.2上部署报表,导出时报找不到字体的错误,如下:

Font '宋体' is not available to the JVM. See the Javadoc for more details. 

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体' is not available to the JVM. See the Javadoc for more details.
at net.sf.jasperreports.engine.util.JRFontUtil.checkAwtFont(JRFontUtil.java:358)
at net.sf.jasperreports.engine.util.JRStyledText.getAwtAttributedString(JRStyledText.java:226)
at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:362)
at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:1129)
at net.sf.jasperreports.engine.fill.JRFillStaticText.prepare(JRFillStaticText.java:183)
at

......

网上有两种解决办法:一是给系统或者jdk安装字体库;二是jasperreport官网的help中给出的解决方案,将字体打jar包放到工程类路径下(http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=66132)

 

前者以前开发的时候有个同事试过,没问题。考虑以后部署、实施环境的不确定性,我觉得还是后者比较好,不过缺点是增加了程序大小,打war包后大概比原来多5M多。不过对于现代硬件多5M不是问题。

这里主要介绍后者的方法,步骤如下:

1、下载jasperreport(本人用的是3.7.4版本)工程,将demo\fonts\net\sf\jasperreports\fonts\dejavu下的demo字体清除

2、将windows系统下的字体文件SIMSUN.TTC文件(XP在%SYSTEM%\WINDOWS\Fonts下)copy到demo\fonts\net\sf\jasperreports\fonts\dejavu下,并将名称后缀改为ttf。这个要记着改,ttf是AIX下的字体格式,否则不会识别。

3、修改demo\fonts\net\sf\jasperreports\fonts下的fonts.xml,将原来字体配置指定到上步骤copy到dejavu目录下的字体文件,如我的改名后叫songti.ttf,所以改后fonts.xml为以下内容(供参考)

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="宋体">
        <normal>net/sf/jasperreports/fonts/dejavu/songti.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/songti.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/songti.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/songti.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>
</fontFamilies>

4、将demo\fonts下的内容打成jar包,并放到程序的类路径下。
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

 

通过以上5个步骤即可解决文章开头的问题。这样在以后实施时,即便系统未安装字体,我们的程序也可以正常运行了。

 

前者我没再去试,这里列出配置方法(引用自http://www.loveunix.net/thread-100861-1-1.html)

环境aix5.3+jdk1.4+weblogic
jdk目录:/usr/jdk1.4
1、找到window的字体文件simsun.ttc
2、把simsun.ttc拷贝到jre的字体目录${JAVA_HOME}/jre/lib/fonts目录
顺便把文件名也改了,为songti.ttf。
这个名字应该是无所谓的,但是下面的步骤都是从网上看的,使用的都是songti.ttf这个字体文件名。
3.修改JRE的字体配置
3.1 修改fonts.scale文件[${JAVA_HOME}/jre/lib/fonts/fonts.scale]
  把一行的数字加1
  在文件尾添加
  songti.ttf -zhongyi-song-medium-r-normal--0-0-0-0-m-0-gbk-0
3.2 修改fonts.dir文件[${JAVA_HOME}/jre/lib/fonts/fonts.dir]
  把一行的数字加4
  在文件尾添加
  songti.ttf -zhongyi-song-medium-r-normal--0-0-0-0-m-0-gbk-0
3.3 修改font.properties文件[${JAVA_HOME}/jre/lib/font.properties.zh]
  将font.properties.zh文件的内容拷贝到font.properties
  将下面文件的后缀改为toproperties:
   font.properties.zh
   font.properties.zh_GB18030
   font.properties.zh_TW
   font.properties.zh_TW_UTF8
   font.properties.zh_UTF8
  修改font.properties把下面一行(大概是第21行):
   serif.1=-Monotype-TimesNewRomanWT-medium-r-normal--*-%d-75-75-*-*-gb2312.1980-0
  替换为:
   serif.1=-zhongyi-SimSun-medium-r-normal--0-0-0-0-m-0-gbk-0
  增加一行到其它filename.xxxxxx=的后面:
   filename.simsun_medium_r=songti.ttf
5、修改startWeblogic.sh,设置LANG环境变量。
执行:locale -a
控制台输出:
    # locale -a
    C
    POSIX
    en_US
    en_US.8859-15
    Zh_CN
    Zh_CN.GB18030
    ZH_CN
    ZH_CN.UTF-8
    en_US.ISO8859-1
    zh_CN.IBM-eucCN
    zh_CN
根据输出设置LANG环境变量:
  export LANG=zh_CN.IBM-eucCN
6、重新启动weblogic就可以了.

展开阅读全文

没有更多推荐了,返回首页