不同的操作系统在预览报表也可能会遇到不同的问题,例如:统计图或斜线单元格里的汉字变成小方块、AIX系统下中文字体压行的现象、打印面板被Java程序阻止等等。
如果含有斜线的单元格或统计图的报表在网页上发布时,统计图或斜线单元格里的汉字会变成小方框,此时往往是服务器端操作系统的中文安装包没有装全,导致报表里用到的字体在服务器端的操作系统里找不到,因此成了小方块。
解决办法一、拷贝中文字体:
1、 在启动java的时候加入如下参数,参数值为jdk的安装路径
-Dsun.java2d.fontpath=……/j2se/jre/lib/fonts
2、 操作系统安装完整的中文安装包,然后把操作系统的中文字体文件拷贝到……/j2se/jre/lib/fonts目录下
3、 打开……/j2se/jre/lib目录下的font.properties文件,把新添加的字体文件的对照信息加进该文件即可
4、 重起webserver
解决办法二、安装中文包:
1、 操作系统安装完整的中文安装包
2、 卸载jdk,重新安装,让jdk读取新的中文字体文件
如果含有带斜线、自动换行的单元格、或统计图的报表在网页上发布时,出现如下错误信息:
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。
润乾公司对这个问题的理解:headless是指由于一些服务器(比如大型机)运行的环境比较特殊,不存在真实的设备去处理一些输入输出,比如显卡,键盘鼠标;这时就需要虚拟一些运行环境出来,或者就不要用到这些设备的相关操作(比如输入输出)。然而运行java.awt包又需要一个的图形环境,由此产生了异常。
这个问题的解决办法有如下三个:
解决办法一、升级JDK版本
把JDK升级到1.4及以上版本,在润乾报表的web.xml中将headless属性值设置为true。
由于润乾报表是被集成的,应用中往往还有用户自己的程序,如果服务器先装载用户的初始化程序,而该初始化程序的部分代码可能存在干扰,导致润乾报表设置的–Djava.awt.headless=true参数不起作用。此时必须在用户自己的初始化程序中或者应用服务器的启动java的命令中加入该参数。
解决办法二、启动X-WINDOW
启动x-window的目的在于创建一个图形环境,因此必须先启动x-window,然后在x-window环境下启动应用服务器。
启动x-window的命令为:startx
某些用户的服务器机房不能随便出入,因此对服务器的操作只能通过终端来进行,此时可以在启动服务器的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 系统下含有按单元格内容扩大的单元格出现中文字体压行的现象。
比较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两步设置后。重新启动webserver后,即可马上生效。如果没有装中文字体,还需按以下步骤操作。
3. 将\WINDOWS\Fonts 目录下SIMSUN.TTC (宋体)拷贝到AIX 系统 /usr/lpp/X11/lib/X11/fonts/TrueType目录下 ,
4.修改fonts.dir
fonts.dir的第一行一般是告诉Xwindows一共有多少行字体信息,从第二行开始起就是正式的字体设置信息(详见参考文档中的Linux字体设置fonts_dir文件分析.htm)并将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系统方可生效。
Windows系统在设计器里预览报表能自动换行,但在IE中显示的时候,在不该换行的时候换行了。
此问题多数是由于客户端和服务器段的字体不一致导致的。因此我们将报表自动换行单元格的字体设置为宋体,在去网页上访问即可。
如果使用web应用中的打印功能时,出现“应用程序已被Java 安全阻止”提示,这是因为Java 版本中引入了安全功能。
解决办法一:添加站点到“例外站点”列表
启动 Java 控制面板, 切换到安全选项卡,选择编辑站点列表,点击添加,把站点“http://127.0.0.1:6868/demo/”添加到站点列表,点击确定后重新发布报表文件。
解决办法二(针对ie内核的浏览器):安装签名证书
打开[安装根目录]/report/web/webapps/demo目录,双击安装raqsoft.cer签名证书,安装过程中需将证书放入到受信任的根证书颁发机构中,如下图所示:
安装完成后,需重启浏览器,即可正常打印了。
如果使用web应用中的applet打印功能时,点击打印没有任何提示信息和反应,通常是由于jre本身出现了问题,因此需要将jre卸载重新安装。
解决办法一:卸载重新安装jre
打开【控制面板】,点击【程序与功能】,选择需要卸载的java程序,右键点击卸载:
卸载成功后,选择jre安装文件,重新安装即可。
解决办法二(针对ie内核的浏览器):修改管理加载项
打开浏览器,点击Internet选项,程序-管理加载项,如下图所示,将Oracle America,Inc.中的所有项都启用,启动后重启浏览器即可。
如果使用web应用中的applet打印功能时,jdk使用1.6以上版本时会遇到每次点击打印按钮都会弹出如下提示框,需要先勾选接受复选框,才可以点击运行按钮。因此针对ie内核的浏览器,润乾报表给出了如下解决方法。
解决办法(针对ie内核的浏览器):安装签名证书
打开[安装根目录]/report/web/webapps/demo目录,双击安装raqsoft.cer签名证书,安装过程中需将证书放入到受信任的根证书颁发机构中,如下图所示:
安装完成后,需要重启浏览器,此时点击打印时,则会提示:
勾选上图复选框点击运行,则下次再打印时不会弹出上图提示框。