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_";

('

('classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH="0"

HEIGHT="0" MAYSCRIPT name="myApplet"');

('codebase='+ URL +'>');

('

/>');

('');

('');

('');

('');

('');

('no support java');

('');

('

('CODE="rApplet"');

('JAVA_CODEBASE="applets" ARCHIVE=""');

('scriptable=false');

('pluginspage='+ URL +'>');

('');

('');

('');

('

');

} URL为一个固定的路径,是为了下载/applets/jre-1_5_0_(JRE运行环境)而

存在的,也可以使用外网从sun公司网站下载,

REPORT_URL 为applet所要访问的地址,在工程的配置/如下servlet即可,此

servet可接收applet参数,生成jasperPrint对象,并传递到客户端applet中进行打印或者预览。

servlet配置如下:

ReportServlet

Servlet

ReportServlet

/

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没有什么难度,下一篇我会介绍一下具体的

细节,及套打的实现。