海鸥航际

JAVA站
posts - 11, comments - 53, trackbacks - 1, articles - 102

Jasper FAQ-1

Posted on 2005-01-10 13:16 海天一鸥 阅读(1753) 评论(6)  编辑  收藏 所属分类: 报表专题
 

jasper变量的表达式的问题

 

jasper中的field字段的定义:
XML Syntax
<!ELEMENT field (fieldDescription?)>
<!ATTLIST field
name NMTOKEN #REQUIRED
class (java.lang.Object | java.lang.Boolean | java.lang.Byte |
java.util.Date | java.sql.Timestamp | java.lang.Double | java.lang.Float |
java.lang.Integer | java.io.InputStream | java.lang.Long | java.lang.Short |
java.math.BigDecimal | java.lang.String) "java.lang.String"
>
<!ELEMENT fieldDescription (#PCDATA)>

注意他们的实例都是对象,
对象不能用简单的+的方式,
比如你想对两个类型为java.lang.Doublefield进行相加
那么就应该用如下表达式
($F{field1}.doubleValue()+$F{field2}.doubleValue()) 
而不是
($F{field1}+$F{field2}) 
设定某个类型为java.lang.Double的初始值是
应该用new java.lang.Double(3)
而不是3
其他类型的数据也一样

 

iReport 0.3.0 不能启动的问题

 

注意 iReport 0.3.0 需要JDK 1.4 的版本
还有用Oracle9的注意了,由于Oracle9自带的是JDK1.3版本的
所以可能会导致iReport在启动时用到Oracle中的JDK而导致无法启动

 

如何让显示的数据自动折行显示

 

可以选择field,-> text filed ->有个框打勾
strech with overflow 
关于此功能的具体应用,
大家可以参看JasperReportsamples -> stretch

 

jasperreport报表文件输出到pdf的中文问题

 

1、   你确定一下你的classpath下是否有itextitextasia

2、   确定你的pdf font是否设置汉字字体如STsong_lightpdf encoding是否是汉字的encoding 

这样之后如果还有问题,就是你的数据传送过来的乱码问题。

 

初学者实例:在WEB客户端直接打印JasperReport报表

 

当我不希望使用JasperReport生成pdfhtml等报表显示文件到客户端后再通过相应打印功能打印,而想直接在客户端打印生成的报表时候,我们可以使用JasperPrintManager类里的printReport方法来实现打印。这里我给出我的一个测试实例:
首先,我在服务器端的一个Servlet里调用报表格式文件、填充数据生成一个JasperPrint对象;然后将这个JasperPrint对象以对象流方式返回给客户端:
public class JRPrintServlet extends HttpServlet {
public void service(
HttpServletRequest request,
HttpServletResponse response
) throws IOException, ServletException{

String fileName = reports/TestRpt.xml";//
我的测试报表格式文件
JasperReport jrt = JasperCompileManager.compileReport(fileName);//
编译报表格式

java.sql.Connection conn = DBBean.getConnection(); //
获取数据库连接
JasperPrint jpt = JasperFillManager.fillReport(jrt,hs,conn));//
填充报表数据生成JasperPrint对象

response.setContentType("application/octet-stream");
ServletOutputStream ouputStream = response.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jpt);//
JasperPrint对象写入对象输出流中
oos.flush();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}

}


}

然后编写一个客户端Applet,通过对上面Servlet的请求获得该JasperPrint对象,并调用JasperPrintManager方法进行打印:
public class JRPrinterApplet extends Applet {
private URL url = null;

public void init(){
String strUrl = getParameter("REPORT_URL");
if(strUrl!=null){
try{
System.out.println(getCodeBase());
url = new URL(getCodeBase(),strUrl);//
从获得html参数中获得报表URL
System.out.println(url);
}catch(Exception e){
e.printStackTrace();
}
}else
JOptionPane.showMessageDialog(this, "Source URL not specified");


}

public void start(){
if(url!=null){
try{
JOptionPane.showMessageDialog(this, url);
Object obj = JRLoader.loadObject(url);//
发送对象请求,获得JasperPrint对象
System.out.println(obj);
JasperPrintManager.printReport((JasperPrint)obj, true);//
调用方法打印所获得的JasperPrint对象
}catch(Exception e){
e.printStackTrace();
}
}
}

}
另外简单写一个测试html来调用以上applet
<!--JRPrintTest.html-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>
打印窗口</title>
</head>
<script language="javascript">
<!--
function openApp()
{
var url = "/JRPrintServlet";
document.write('<APPLET ID="JrPrt" CODE = "JRPrinterApplet.class" CODEBASE = "/reports" ARCHIVE = "jasper-api.jar" WIDTH = "0" HEIGHT = "0">');
document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">');
document.write('<PARAM NAME = "scriptable" VALUE="false">');
document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">');
document.write('</APPLET>');
}

-->
</script>
<body bgcolor="#FFFFFF">
<input type="button" value="
测试打印" onclick="openApp();">

</body>
</html>

这样,在客户端访问JRPrintTest.html页面,点击"测试打印"按钮,就能够直接在客户端打印机上打印出所要的报表。 

 

 

 

 

Feedback

# re: Jasper FAQ-1  回复  更多评论   

2006-04-12 11:40 by random
我现在就想用jasperprint实现客户端打印,看了你这篇“初学者实例:在WEB客户端直接打印JasperReport报表

”,但发现用这个方法不行,因为客户端并没有安装jasperprint,运行时出错,那这样客户端还必须手动安装软件,用APPLET实现也没意义了,请问有什么好方法不用客户端做复杂的操作吗?

# re: Jasper FAQ-1  回复  更多评论   

2006-05-16 21:11 by kelo
怎么不分页

# re: Jasper FAQ-1  回复  更多评论   

2006-06-04 20:41 by zhuiyun
请问jasper-api.jar是什么包啊?

# re: Jasper FAQ-1  回复  更多评论   

2006-06-07 14:22 by zhuiyun
我对serlvet在xml中进行定义后,仍后找不到,问什么呢?
<servlet>
<servlet-name>JasperPrintServlet</servlet-name>
<servlet-class>servlets.JasperPrintServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JasperPrintServlet</servlet-name>
<url-pattern>/servlets/JasperPrintServlet</url-pattern>
</servlet-mapping>
在地址栏访问时,仍然为404错误,希望有人解答阿。

# re: Jasper FAQ-1  回复  更多评论   

2006-06-08 14:46 by zhuiyun
请问这样实现后能在客户端之间访问吗?客户端是否需要jasperreport,是否需要安装jre,我实现后,在自己的机子上没有问题,但是从别的机子上访问时会出现错误提示,发生异常,确定后Ie自动关闭。
能否指导一下,非常感谢!

# re: Jasper FAQ-1  回复  更多评论   

2006-06-08 14:46 by zhuiyun
为什么都没有人回答阿

只有注册用户登录后才能发表评论。


网站导航: