如果含有斜线的单元格或统计图的报表在网页上发布时,统计图或斜线单元格里的汉字会变成小方框,此时往往是服务器端操作系统的中文安装包没有装全,导致报表里用到的字体在服务器端的操作系统里找不到,因此成了小方块。
解决办法一:如果操作系统已经安装了中文字体包,则:
打开……/j2se/jre/lib目录下的字体配置文件,把新添加的字体文件的对照信息加进该文件即可
在jdk1.4中,字体配置文件是font.properties或font.properties.zh
在jdk5中,字体配置文件是fontconfig.properties.src
添加字体对照信息示例:filename.\u5b8b\u4f53 = simsun.ttc
解决办法二:如果操作系统没有安装中文包,则:
解决办法三:如果操作系统没有安装中文语言包,又不想安装,则:
从Windows操作系统拷贝报表所用到的字体文件到相应的操作系统字体目录
Windows操作系统的字体目录一般为Windows\fonts
AIX操作系统的字体目录一般为/usr/lpp/x11/lib/fonts
修改操作系统的字体设置
字体设置文件一般为fonts.dir
Fonts.dir的第一行一般是告诉Xwindows一共有多少行字体信息
Fonts.dir的第二行开始起始正式的字体设置信息
字体设置示例:simsun.ttc –jdk-simsun-Medium-r-Normal--0-0-0-0-P-O-gb2312.1980-0
如果含有带斜线、自动换行的单元格、或统计图的报表在网页上发布时,出现如下错误信息:
Root cause: java.lang.NoClassDefFoundError java.lang.Class.forName0(Native Method) java.lang.Class.forName(Class.java:141) java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62) java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041) java.awt.image.BufferedImage.getGraphics(BufferedImage.java:1031) org.apache.jsp.manage.image_jsp._jspService(image_jsp.java:73) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
这个问题在java中称为headless问题,是jdk1.3的bug,bug报告见http://developer.java.sun.com/developer/bugParade/bugs/4281163.html 。jdk1.4已经做了修正,文档见http://java.sun.com/j2se/1.4.1/docs/guide/awt/AWTChanges.html。
解决办法一:升级JDK版本
把JDK升级到1.4及以上版本,初始化程序中经加入了–Djava.awt.headless=true参数。
解决办法二:启动X-WINDOW
启动x-window的目的在于创建一个图形环境,因此必须先启动x-window,然后在x-window环境下启动应用服务器。
解决办法三:部署PJA环境
pja包的下载地址见 http://www.eteks.com/pja/en/#Download
websphere下的部署:
1.将pja.jar;pjatools.jar拷贝到:/usr/WebSphere/AppServer/java/lib/pja/下
2.进入管理控制台
应用程序服务器 > server1 > 进程定义 > Java 虚拟机
配置如下参数: 引导类路径
${JAVA_HOME}/lib/pja/pja.jar
一般 JVM 自变量
-Dawt.toolkit=com.eteks.awt.PJAToolkit -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment -Djava2d.font.usePlatformFont=false -Djava.awt.fonts=${JAVA_HOME}/jre/lib/fonts/ -Duser.home=${JAVA_HOME}/lib/pja -Dtoolkit.implementation=com.eteks.awt.PJAToolkit
weblogic下的部署:
1、 将pja.jar,pjatools.jar拷贝到weblogic的lib目录下,在startWebLogic.sh中将这两个文件加入到CLASSPATH中
2、将以下文字加入到$JAVACMD中
-Xbootclasspath/a:/usr/java/jdk1.3.1_06/lib/rt.jar:/home/weblogic/wlserver6.1/lib/pja.jar -Djava.awt.toolkit=com.eteks.awt.PJAToolkit -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment -Djava.awt.fonts=/usr/java/jdk1.3.1_06/jre/lib/fonts
其中
/usr/java/jdk1.3.1_06 是指java的安装目录
/home/weblogic/wlserver6.1/lib 是指pja.jar,pjatools.jar的存放目录
同一应用,在windows环境下显示正常,而在AIX 系统下含有按单元格内容扩大的单元格出现中文字体压行的现象。
解决办法:拷贝中文字体到操作系统
在font.properties.zh 文件中 将simsun.ttc添加到字体配置文件中
# font filenames filename.\u5b8b\u4f53=simsun.ttc
一般情况下如果AIX系统装有中文字体,只需按照1,2两步设置后。重新启动webservr后,即可马上生效。如果没有装中文字体,还需按以下步骤操作。
修改fonts.dir
fonts.dir的第一行一般是告诉Xwindows一共有多少行字体信息,从第二行开始起就是正式的字体设置信息
并将simsun.ttc -jdk-simsun-Medium-R-Normal--0-0-0-0-P-0-gb2312.1980-0
添加到 usr\lpp\X11\lib\fonts\TrueType fonts.dir
按3,4步骤操作后,要从新启动AIX系统方可生效。