2024年5月9日发(作者:)
iReport+jasperReport
客户端打印
jasperReport客户端采用applet,applet和activeX插件的区别大家搜一下,有一堆东西可以借鉴,下载
jasperreports-3.0.0,在相应的sample OR demo(记得不清了)中可以找到jasperReport 实现的客户端
打印demo,下来就来分析下具体实现。
新建一文件:
function loadApplet(applet_URL) {
var URL = applet_URL + "/applets/jre-1_5_0_";
('');
} URL为一个固定的路径,是为了下载/applets/jre-1_5_0_(JRE运行环境)而
存在的,也可以使用外网从sun公司网站下载,
REPORT_URL 为applet所要访问的地址,在工程的配置/如下servlet即可,此
servet可接收applet参数,生成jasperPrint对象,并传递到客户端applet中进行打印或者预览。
servlet配置如下:
ReportServlet核心代码就是根据业务找到对应的模板文件填充数据生成jasperPrint对象,产生的
jasperPrint对象以对象流的形式发送给客户端,核心代码如下:
// 生成jasperPrint对象
JasperPrint jasperPrint = port(jasperReport,
mapParam, new JREmptyDataSource());
//组装流
tentType("application/octet-stream");
ferSize(8986000);
ServletOutputStream outStream = putStream();
ObjectOutputStream oos = new ObjectOutputStream(outStream);
bject(jasperPrint);当然,客户端的applet使用如下:
/**//*
* applet与Servlet交互 URL传递页面传来的参数请求服务器Servlet
* 把applet传递的参数追加到servlet中 2008-10-14 laoshulin
*/
url = new URL(getCodeBase(), requestUrl + "?printView=true"
+ paraStr);
if (url == null) {
ssageDialog(this,
"Source URL not specified");
} else {
InputStream in = ream();
ObjectInputStream objIn = new ObjectInputStream(in);
Object obj = ject();
if (obj instanceof JasperPrint) {
} else {
ssageDialog(this, ng());
return;
}
if (jasperPrint == null) {
// 根据Servlet返回的URL(ObjectStream)产生JasperPrint对象
jasperPrint = (JasperPrint) obj;
}
// 拦截出现空报表问题
if (jasperPrint != null
&& es().size() > 0) {
/**//*
* 调用中JasperViewer绘制报表Frame
* JasperViewer继承自JFrame,采用setDefaultCloseOperation响应关闭窗口事件
*/
ViewerFrame viewerFrame = new ViewerFrame(this
.getAppletContext(), jasperPrint,isShowPrintButton);
ible(true);
//();
// JasperViewer viewer = new
// JasperViewer(jasperPrint);
// ible(true);
//
aultCloseOperation(E_ON_CLOSE);
// 如果请求为空弹出对话框予以提示
} else {
JOptionPane
.showMessageDialog(this,
"Please check Your Report SQL! It resulted in empty Report! ");
return;
}
}
其中requestUrl为applet配置中的REPORT_URL,现实中可以采用此种方式传递参数到applet中,下
篇文章会介绍更合适的业务数据传递,?printView=true表示,传递printView参数对应的值为true,用来
预览使用。剩下的工作就是怎么按照自己的要求打印和预览了。
jasperReport为我们提供了打印和预览现成的方法:
// 打印报表
JasperPrintManager
.printReport(print, false);
/**//* 预览报表
* 调用中JasperViewer绘制报表Frame
* JasperViewer继承自JFrame,采用setDefaultCloseOperation响应关闭窗口事件
*/
ViewerFrame viewerFrame = new ViewerFrame(this
.getAppletContext(), jasperPrint);
ible(true);
最后记着释放对象哦,浏览器会受不了得:
url = null;
jasperPrint = null;OK,客户端就出现了,参照demo没有什么难度,下一篇我会介绍一下具体的
细节,及套打的实现。
发布评论