操作系统的差异

1、中文安装包

如果含有斜线的单元格或统计图的报表在网页上发布时,统计图或斜线单元格里的汉字会变成小方框,此时往往是服务器端操作系统的中文安装包没有装全,导致报表里用到的字体在服务器端的操作系统里找不到,因此成了小方块。

解决办法一:如果操作系统已经安装了中文字体包,则:

  1. 在启动java的时候加入如下参数,参数值为jdk的安装路径 -Dsun.java2d.fontpath=……/j2se/jre/lib/fonts
  2. 把操作系统的中文字体文件(例如simsun.ttc)拷贝到……/j2se/jre/lib/fonts目录下
  3. 打开……/j2se/jre/lib目录下的字体配置文件,把新添加的字体文件的对照信息加进该文件即可

    在jdk1.4中,字体配置文件是font.properties或font.properties.zh

    在jdk5中,字体配置文件是fontconfig.properties.src

    添加字体对照信息示例:filename.\u5b8b\u4f53 = simsun.ttc

  4. 重起webserver

解决办法二:如果操作系统没有安装中文包,则:

  1. 操作系统安装完整的中文安装包
  2. 卸载jdk,重新安装,让jdk读取新的中文字体文件

解决办法三:如果操作系统没有安装中文语言包,又不想安装,则:

  1. 从Windows操作系统拷贝报表所用到的字体文件到相应的操作系统字体目录

    Windows操作系统的字体目录一般为Windows\fonts

    AIX操作系统的字体目录一般为/usr/lpp/x11/lib/fonts

  2. 修改操作系统的字体设置

    字体设置文件一般为fonts.dir

    Fonts.dir的第一行一般是告诉Xwindows一共有多少行字体信息

    Fonts.dir的第二行开始起始正式的字体设置信息

    字体设置示例:simsun.ttc –jdk-simsun-Medium-r-Normal--0-0-0-0-P-O-gb2312.1980-0

  3. 重新启动操作系统
  4. 然后再安装解决方法一来解决jdk的字体问题

2、图形环境问题

如果含有带斜线、自动换行的单元格、或统计图的报表在网页上发布时,出现如下错误信息:

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的存放目录

3、文字体差异问题

同一应用,在windows环境下显示正常,而在AIX 系统下含有按单元格内容扩大的单元格出现中文字体压行的现象。

解决办法:拷贝中文字体到操作系统

  1. 将\WINDOWS\Fonts 目录下SIMSUN.TTC (宋体)拷贝到 AIX JDK安装目录 jre/lib/fonts 目录下。
  2. 在font.properties.zh 文件中 将simsun.ttc添加到字体配置文件中

    # font filenames filename.\u5b8b\u4f53=simsun.ttc

    一般情况下如果AIX系统装有中文字体,只需按照1,2两步设置后。重新启动webservr后,即可马上生效。如果没有装中文字体,还需按以下步骤操作。

  3. 将\WINDOWS\Fonts 目录下SIMSUN.TTC (宋体)拷贝到AIX 系统 /usr/lpp/X11/lib/X11/fonts/TrueType目录下。
  4. 修改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系统方可生效。