- 浏览: 89989 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Ginger90:
其实大部分功能和帆软报表差不多,但是帆软报表编写起来更方便一些 ...
iReport+jasperReport之JFreeChart(图表报表) -
tiancaishan:
这只是最简单的主数据源,那子数据源怎么设置呢?
iReport+jasperReport之CSV、XML数据源 -
wangqiangcattsoft:
楼上源码只看了一半
Struts2整合JasperReport预览HTML格式不显示图片问题解决方案 -
tuan232311009:
不错!
黑莓开发学习入门系列,自己动手实现一个日历软件(六)
iReport+jasperReport之客户端打印 (续)
接着上篇,jasperReport 实现客户端主要是依靠applet,但是我们所有的操作不可能在applet中实现吧,这样也不算一个好的应用。
考虑一下几点:
1. javascript 和applet互相通信。applet和前台界面交互,可以让客户感觉不到有applet的存在。
2. applet和后台相互通信。applet既可以接受后台转递的参数、对象流等等 还可以把信息返回到后台。
3. applet只实现打印和预览,主要的业务操作需要在后台完成。
上篇中提到print.js:
新建一jsp页面 PrintReportApplet.jsp
次jsp页面就一个按钮
document.applets.myApplet.reportViewer() 拿到applet的窗口句柄后调用applet的reportViewer()方法
我们也可以在此jsp页面写一个初始化的方法传递参数到applet中,当然也可以直接传递参数到reportViewer(parameter String);
PrinterApplet中reportViewer
客户端通过打开InputStream in = url.openStream();实现还原jasperPrint对象,从而实现打印或者预览。
客户端打印可以前的方法是一样的:
编译、填充、生成JasperPrint对象、预览或打印
上篇有人提到打印和预览实现动态控制套打背景,建议你多看看 iReport+jasperReport之图片控件 ,实现原理是一样的,只是把JasperPrint在客户端处理了一下哦。
考虑一下几点:
1. javascript 和applet互相通信。applet和前台界面交互,可以让客户感觉不到有applet的存在。
2. applet和后台相互通信。applet既可以接受后台转递的参数、对象流等等 还可以把信息返回到后台。
3. applet只实现打印和预览,主要的业务操作需要在后台完成。
上篇中提到print.js:
新建一jsp页面 PrintReportApplet.jsp
次jsp页面就一个按钮
<input type="submit" value="预览" onclick="reportViewer()" />
这样我们就可以在当前页面中引用到applet了,document.applets.myApplet.reportViewer() 拿到applet的窗口句柄后调用applet的reportViewer()方法
我们也可以在此jsp页面写一个初始化的方法传递参数到applet中,当然也可以直接传递参数到reportViewer(parameter String);
function getParameters() {
return "&pid=0001"
}
在print.js中指定 <PARAM NAME="CODE" VALUE="com.isoftstone.pcis.report.print.applet.PrinterApplet" />return "&pid=0001"
}
PrinterApplet中reportViewer
// javascript预览报表
public void reportViewer() {
try {
win = JSObject.getWindow(this);
paraStr = win.eval("getParameters()").toString();
if ("".equals(paraStr) || paraStr == null) {
return;
}
System.out.println("paraStr=======>" + paraStr);
} catch (Exception e1) {
e1.printStackTrace();
}
if (url == null) {
if (requestUrl != null) {
try {
/**//*
* applet与Servlet交互 URL传递页面传来的参数请求服务器Servlet
* 把applet传递的参数追加到servlet中 2008-10-14 laoshulin
*/
url = new URL(getCodeBase(), requestUrl + "?printView=true"
+ paraStr);
if (url == null) {
JOptionPane.showMessageDialog(this,
"Source URL not specified");
} else {
InputStream in = url.openStream();
ObjectInputStream objIn = new ObjectInputStream(in);
Object obj = objIn.readObject();
if (obj instanceof JasperPrint) {
} else {
JOptionPane.showMessageDialog(this, obj.toString());
return;
}
if (jasperPrint == null) {
// 根据Servlet返回的URL(ObjectStream)产生JasperPrint对象
jasperPrint = (JasperPrint) obj;
}
// 拦截出现空报表问题
if (jasperPrint != null
&& jasperPrint.getPages().size() > 0) {
/**//*
* 调用JasperReport.jar中JasperViewer绘制报表Frame
* JasperViewer继承自JFrame,采用setDefaultCloseOperation响应关闭窗口事件
*/
ViewerFrame viewerFrame = new ViewerFrame(this
.getAppletContext(), jasperPrint);
viewerFrame.setVisible(true);
//viewerFrame.show();
// JasperViewer viewer = new
// JasperViewer(jasperPrint);
// viewer.setVisible(true);
// viewer.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
// 如果请求为空弹出对话框予以提示
} else {
JOptionPane
.showMessageDialog(this,
"Please check Your Report SQL! It resulted in empty Report! ");
return;
}
}
} catch (Exception e) {
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
} finally {// 全打套打URL不一样释放对象 by laoshulin
url = null;
jasperPrint = null;
win = null;
}
}
}
}
JSObject 对象的使用google一下有很多哦,requestUrl = getParameter("REPORT_URL");为print.js中配置的请求,之后我们new URL带上我们的参数去请求远程资源。public void reportViewer() {
try {
win = JSObject.getWindow(this);
paraStr = win.eval("getParameters()").toString();
if ("".equals(paraStr) || paraStr == null) {
return;
}
System.out.println("paraStr=======>" + paraStr);
} catch (Exception e1) {
e1.printStackTrace();
}
if (url == null) {
if (requestUrl != null) {
try {
/**//*
* applet与Servlet交互 URL传递页面传来的参数请求服务器Servlet
* 把applet传递的参数追加到servlet中 2008-10-14 laoshulin
*/
url = new URL(getCodeBase(), requestUrl + "?printView=true"
+ paraStr);
if (url == null) {
JOptionPane.showMessageDialog(this,
"Source URL not specified");
} else {
InputStream in = url.openStream();
ObjectInputStream objIn = new ObjectInputStream(in);
Object obj = objIn.readObject();
if (obj instanceof JasperPrint) {
} else {
JOptionPane.showMessageDialog(this, obj.toString());
return;
}
if (jasperPrint == null) {
// 根据Servlet返回的URL(ObjectStream)产生JasperPrint对象
jasperPrint = (JasperPrint) obj;
}
// 拦截出现空报表问题
if (jasperPrint != null
&& jasperPrint.getPages().size() > 0) {
/**//*
* 调用JasperReport.jar中JasperViewer绘制报表Frame
* JasperViewer继承自JFrame,采用setDefaultCloseOperation响应关闭窗口事件
*/
ViewerFrame viewerFrame = new ViewerFrame(this
.getAppletContext(), jasperPrint);
viewerFrame.setVisible(true);
//viewerFrame.show();
// JasperViewer viewer = new
// JasperViewer(jasperPrint);
// viewer.setVisible(true);
// viewer.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
// 如果请求为空弹出对话框予以提示
} else {
JOptionPane
.showMessageDialog(this,
"Please check Your Report SQL! It resulted in empty Report! ");
return;
}
}
} catch (Exception e) {
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
} finally {// 全打套打URL不一样释放对象 by laoshulin
url = null;
jasperPrint = null;
win = null;
}
}
}
}
<servlet-mapping>
<servlet-name>ReportServlet</servlet-name>
<url-pattern>/report.view</url-pattern>
</servlet-mapping>
<servlet-name>ReportServlet</servlet-name>
<url-pattern>/report.view</url-pattern>
</servlet-mapping>
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
/**//*
* Servlet中可这样取得打印或是预览操作,添加此功能针对套打预览 String
* view=request.getParameter("printView"); boolean
* isView="true".equalsIgnoreCase(view)?true:false; String
* print=request.getParameter("print"); boolean
* isPrint="true".equalsIgnoreCase(print)?true:false;
*/
// 拿参数
String pid = request.getParameter("pid");
String form = request.getParameter("format");
// 编译报表耗时,修改为编译好的报表
/**//*
* JasperReport jasperReport = JasperCompileManager
* .compileReport("D:\\workspace\\report\\AppletTest.jasper");
*/
// 直接使用编译好的文件
// JasperReport jasperReport = (JasperReport) JRLoader
// .loadObject("D:\\workspace\\report\\AppletTest.jasper");
JasperReport jasperReport = (JasperReport) JRLoader
.loadObjectFromLocation("D:\\workspace\\report\\AppletTest.jasper");
HashMap mapParam = new HashMap();
mapParam.put("imageParam", "D:\\workspace\\report\\eg_smile.gif");
/**//*
* 此参数用来控制是否显示图片
* 第二个参数在报表中设置为String类型
*/
mapParam.put("isShowImage", "true");
// 生成jasperPrint对象
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
mapParam, new JREmptyDataSource());
System.out.println(jasperPrint.getPageHeight()+"$$$$$$$$$$$$"+jasperPrint.getPageWidth()+"**********"+jasperPrint.getPages());
response.setContentType("application/octet-stream");
response.setBufferSize(8986000);
ServletOutputStream outStream = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outStream);
oos.writeObject(jasperPrint);
// outStream.flush();
// oos.flush();
// outStream.close();
// oos.close();
//outStream.flush();
//
} catch (Exception e) {
e.printStackTrace();
}
}
请求到远程资源完全可以安装业务需求实现自己的jasperReport 了,最终我们只要把一个JasperPrint对象输出到客户端就可以了。throws ServletException, IOException {
try {
/**//*
* Servlet中可这样取得打印或是预览操作,添加此功能针对套打预览 String
* view=request.getParameter("printView"); boolean
* isView="true".equalsIgnoreCase(view)?true:false; String
* print=request.getParameter("print"); boolean
* isPrint="true".equalsIgnoreCase(print)?true:false;
*/
// 拿参数
String pid = request.getParameter("pid");
String form = request.getParameter("format");
// 编译报表耗时,修改为编译好的报表
/**//*
* JasperReport jasperReport = JasperCompileManager
* .compileReport("D:\\workspace\\report\\AppletTest.jasper");
*/
// 直接使用编译好的文件
// JasperReport jasperReport = (JasperReport) JRLoader
// .loadObject("D:\\workspace\\report\\AppletTest.jasper");
JasperReport jasperReport = (JasperReport) JRLoader
.loadObjectFromLocation("D:\\workspace\\report\\AppletTest.jasper");
HashMap mapParam = new HashMap();
mapParam.put("imageParam", "D:\\workspace\\report\\eg_smile.gif");
/**//*
* 此参数用来控制是否显示图片
* 第二个参数在报表中设置为String类型
*/
mapParam.put("isShowImage", "true");
// 生成jasperPrint对象
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
mapParam, new JREmptyDataSource());
System.out.println(jasperPrint.getPageHeight()+"$$$$$$$$$$$$"+jasperPrint.getPageWidth()+"**********"+jasperPrint.getPages());
response.setContentType("application/octet-stream");
response.setBufferSize(8986000);
ServletOutputStream outStream = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outStream);
oos.writeObject(jasperPrint);
// outStream.flush();
// oos.flush();
// outStream.close();
// oos.close();
//outStream.flush();
//
} catch (Exception e) {
e.printStackTrace();
}
}
客户端通过打开InputStream in = url.openStream();实现还原jasperPrint对象,从而实现打印或者预览。
客户端打印可以前的方法是一样的:
编译、填充、生成JasperPrint对象、预览或打印
上篇有人提到打印和预览实现动态控制套打背景,建议你多看看 iReport+jasperReport之图片控件 ,实现原理是一样的,只是把JasperPrint在客户端处理了一下哦。
发表评论
-
如何使用Static的变量和方法
2007-12-01 10:55 710如何使用Static的变量和方法有时你希望定义一个类成员 ... -
Transact-SQL简明语法
2007-12-01 11:02 1026最简单的查询语法格式: SELECT <列名&g ... -
去北京面试时的题目(老师生日)微软面试题
2007-12-01 19:59 1180小明和小强都是张老师的学生,张老师的生日是 M月 N日, 2人 ... -
有点象24点游戏,说说你的想法
2007-12-01 23:02 751* 5、5、5、1怎么能算出24呢? * ... -
JDK5增强for循环的使用
2007-12-02 23:43 783JDK5增强for循环的使用,此语法有很大的缺陷,仅适用于有限 ... -
Java中的多态
2007-12-03 11:26 790在实际操作中,多态可以让我不用关心某个对象到底是什么具体类型, ... -
运用线程实现时间更新
2007-12-06 11:01 750线程的做的时间表,不知道合不合适,哪位还有更好的实现方式(ja ... -
生产者消费者问题(以面包为例)
2007-12-10 19:48 759package Thread;public class Pr ... -
数据库关系表解决方案
2007-12-26 21:45 738数据库关系的表之间定义一个连接,而所定义连接的方式由表之 ... -
Struts2表单请求流程(一)
2007-12-29 20:09 854Struts2框架出来有段时间了,终于开始学习Struts了, ... -
Struts2表单请求流程(二)— Struts2高级的POJO访问
2007-12-29 20:20 1935此文主要来自www.blogjava.net/Max的实例 S ... -
开源软件逐渐走进了我的生活
2008-03-18 21:58 734看看我们经常用的软件吧! 以前经常去找一些破解的软件用,没有那 ... -
Struts2中select/doubleselect标签数据显示
2008-04-02 08:46 1088最近做毕业设计用到Struts2 的标签库,遇到一些比较复 ... -
用commons-email-1.1.jar实现发邮件功能:
2008-04-07 09:47 1085今天在Apache网站上下载commons-lang j ... -
JFreeChart简单使用
2008-04-18 09:29 874JFreeChart is a free chart libr ... -
Spring2.5.3+Hibernate3.2+Struts2.0.11整合
2008-04-18 13:59 894Spring2.5.3+Hibernate3.2+Struts ... -
java截取字符串的一些常用处理
2008-08-01 09:06 956java对字符串处理功能强大,以下是本人实际开发中用到的一些总 ... -
dom4j操作xml基础
2008-08-03 15:39 959DOM是用与平台和语言无关的方式表示XML文档 ... -
office javaScript调试工具
2008-08-05 18:21 913项目前台需要写大量的js,寻求一种有效 ... -
Visitor访问者模式---------学习dom4j时遇到的顺便拿来交流
2008-08-10 12:12 916dom4j遍历xml文档树有种很特别的方式就是访问者( ...
相关推荐
### iReport + JasperReport 客户端打印与数字签名详解 #### 一、概述 iReport 是一个用于设计 JasperReports 报告模板的图形界面工具,而 JasperReports 则是一款非常流行的 Java 报告工具,它能够从各种数据源...
总的来说,"jasperreport+applet客户端打印demo"展示了如何结合JasperReport的强大报表生成能力和Java Applet的本地交互能力,实现一个灵活且安全的客户端打印解决方案。虽然Applet可能不再是首选技术,但其背后的...
因此,虽然Applet在过去的JasperReport客户端打印方案中很常见,但现在可能需要考虑其他替代方案,如使用Java Web Start或Web服务来实现客户端打印。 总之,JasperReport结合Applet提供了在客户端进行打印的功能,...
标题中的“ireport+jsp基于jasperReport 实现导出报表至web页面”是指使用iReport工具和JasperReport库,结合JavaServer Pages (JSP) 技术,来创建和展示动态报表,并能将这些报表导出到Web页面上供用户查看。...
**永泰决策分析系统——ireport与jasperreport操作指南** **1. 引言** 本操作手册旨在为用户详细解读如何使用ireport与jasperreport工具进行报表设计与生成,以便在永泰决策分析系统中实现高效的数据可视化和业务...
在本场景中,我们关注的是JasperReports 5.6.0版本与Java Applet结合来实现客户端打印的功能。Applet是Java的一个古老特性,允许在Web浏览器中运行小型Java程序,为用户提供交互性。 首先,`jasperreports-5.6.0`是...
**JasperReport客户端打印详解** JasperReport是一款强大的开源报表工具,它允许开发者设计美观、复杂的报告,并在各种应用程序中嵌入和展示这些报告。在Java应用中,JasperReport通常用于生成PDF、HTML、Excel等...
本案例是SpringBoot结合iReport做的打印,直接在浏览器上面显示PDF,建议在Eclipse+Maven上部署运行,启动方式与SpringBoot启动方式一样,特别注意:如果你使用的SpringBoot版本比较新,相关jar包会有所不同。
**JasperReports -- 客户端打印(WEB网页打印)** JasperReports 是一个功能强大的开源报告生成库,广泛应用于Java应用程序中,用于创建复杂的报表和图表。它支持多种数据源,包括数据库查询、XML、CSV等,并且可以...
在ireport中,我们可以定义两种不同类型的导出格式,通过设置jasperReport的导出参数,使得用户可以选择导出为PDF或Excel格式。 4. **子报表**: 子报表是报表设计中的一个重要概念,它允许在一个报表中嵌套另一个...
**JasperReport与Servlet在Web应用中的打印预览** JasperReport是一款强大的开源报表工具,它允许开发者在Java应用程序、Web应用甚至独立的Java应用程序中创建复杂的报告。Servlet是Java Web开发中的一个重要组件,...
本文将介绍如何在MyEclipse中使用iReport和JasperReport结合Struts2框架来开发报表。MyEclipse是一款强大的Java集成开发环境,而iReport是一款基于JasperReport的报表设计工具,Struts2则是一个流行的Java web应用...
### JasperReport+iReport报表工具详细开发手册 #### 1. 简介 JasperReport是一款功能强大的报表引擎,能够支持多种数据源并输出不同格式的报表,如PDF、HTML、Excel等。它由Java语言编写,适用于各种Java应用程序...
### JasperReport+iReport整合的Web报表开发 #### 1. JasperReport简介 JasperReport是一款功能强大且灵活的报表生成工具,它支持多种输出格式,包括PDF、HTML、XML、Excel(通过POI或JExcelAPI实现)和Rtf(通过...
标题中的“jasperreport生成pdf实现下载与打印”是指使用JasperReports库来创建PDF报告,并提供下载和打印功能。JasperReports是一个开源的Java报表工具,它允许开发者设计、生成和导出各种类型的报表,包括PDF、...
【jasperreport&ireport】是两个紧密关联的开源报告工具,主要用于生成复杂的企业级报表。JasperReport是一个Java库,允许开发人员在各种应用程序中嵌入报告功能,而iReport则是JasperReport的设计工具,提供了图形...
本实例将详细介绍如何利用iReport和JasperReports来实现批量打印的功能。 首先,我们需要理解JasperReports的基本工作流程。JasperReport的设计是基于一个名为`.jrxml`的XML文件,这个文件包含了报表的所有布局和...
`JasperReport+iReport简单使用总结.docx`文档很可能是对这个过程的详细说明,包括如何创建报表模板,设置编码,选择字体以及如何在Java代码中调用报表引擎进行PDF生成。 5. **Ireport工具使用**:`iReport-5.6.0-...
标题中的“ireport与java 桌面应用,web应用”揭示了本次讨论的核心主题,即如何使用ireport工具在Java环境下开发桌面应用程序和Web应用程序的报表功能。ireport是JasperReports库的一个图形化设计工具,允许开发者...