[报表]JasperReports -- 客户端打印(WEB网页打印)
JasperReports针对报表打印实际是采用applet实现的,和传统的ActiveX和ocx不太一样,需要客户机装有jre。
他是通过applet接收HttpServlet输出的打印对象实现的
这里以JasperReports -- 入门应用的编译文件作为数据源。
1我们需要自己创建一个Servlet
JaspWebPrint
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
public class JaspWebPrint extends HttpServlet {
private static final String CONTENTTYPE = "application/octet-stream";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
JasperPrint jasperPrint = null;
response.setContentType(CONTENTTYPE);
ServletOutputStream ouputStream = response.getOutputStream();
try {
jasperPrint = JasperFillManager.fillReport("demo.jasper", new HashMap(),new JREmptyDataSource());
ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jasperPrint);
oos.flush();
oos.close();
} catch (JRException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
2我们需要创建一个applet,用于实现打印功能
import java.applet.Applet;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.util.JRLoader;
public class DemoApplet extends Applet {
private URL url;
private JasperPrint jasperPrint;
public DemoApplet()
{
url = null;
jasperPrint = null;
}
public void init()
{
String strUrl = getParameter("REPORT_URL");
if(strUrl != null)
try
{
url = new URL(getCodeBase(), strUrl);
}
catch(Exception e)
{
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
}
else
JOptionPane.showMessageDialog(this, "Source URL not specified");
}
public void start()
{
if(url != null)
try
{
if(jasperPrint == null)
jasperPrint = (JasperPrint)JRLoader.loadObject(url);
if(jasperPrint != null)
JasperPrintManager.printReport(jasperPrint, false);
else
JOptionPane.showMessageDialog(this, "Source URL not specified");
}
catch(Exception e)
{
e.printStackTrace();
}
else
JOptionPane.showMessageDialog(this, "Source URL not specified");
}
}
3.下面我们编写页面代码,当页面加载完毕之后自动打印。
<APPLET ID="Print" name = "app" CODE = "DemoApplet.class" ARCHIVE = "jasperreports-3.5.0-applet.jar,jcommon-1.0.15.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar" WIDTH = "0" HEIGHT = "0" MAYSCRIPT>
<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2"/>
<PARAM NAME = "scriptable" VALUE="false"/>
<PARAM NAME = "REPORT_URL" VALUE ="http://localhost:8080/jasport/servlet/JaspWebPrint"/>
<PARAM NAME = "SHOW_DIALOG" VALUE ="true">
</APPLET>
这里需要注意各版本引入的jar包并不相同,这里用到的jar需要客户端可以访问到的,如有问题可以详见applet的相关开发说明。
对于经常出现Applet的警告信息的处理。
找到jre的目录 修改jre6\lib\security\java.pclicy文件内容
在grant {
};里面追加如下内容即可。
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "user.home", "read";
permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "java.class.path", "read";
permission java.util.PropertyPermission "user.name", "read";
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "modifyThreadGroup";
permission java.lang.RuntimePermission "loadLibrary.*";
permission java.io.FilePermission "<<ALL FILES>>", "read";
permission java.io.FilePermission "${user.dir}${/}jmf.log", "write";
permission java.io.FilePermission "${user.home}${/}.JMStudioCfg", "write";
permission java.net.SocketPermission "*", "connect,accept";
permission java.io.FilePermission "C:\WINNT\TEMP\*", "write";
permission java.io.FilePermission "C:\WINNT\TEMP\*", "delete";
permission java.awt.AWTPermission "showWindowWithoutWarningBanner";
permission javax.sound.sampled.AudioPermission "record";
permission java.net.SocketPermission "-", "listen";
permission java.net.SocketPermission "-", "accept";
permission java.net.SocketPermission "-", "connect";
permission java.net.SocketPermission "-", "resolve";
permission java.security.AllPermission;
permission java.lang.RuntimePermission "accessClassInPackage.sun.awt";
permission java.lang.RuntimePermission "accessClassInPackage.sun.awt.windows";
分享到:
相关推荐
jasperreports-flash来实现web客户端打印的功能,避免了applet客户端打印在客户端安装jre的限制。jasperreports-flash只需要求客户端有能浏览swf文件的flash player就行了。可以根据自己的需求修改example.mxml文件...
jasperreports-flash来实现web客户端打印的功能,避免了applet客户端打印在客户端安装jre的限制。jasperreports-flash只需要求客户端有能浏览swf文件的flash player就行了。可以根据自己的需求修改example.mxml文件...
总的来说,"jasperreports-5.6.0+applet实现客户端打印所需的jar包"是一个旧时代的解决方案,尽管在某些特定场景下仍然有用,但它已经不适应当前的Web开发趋势。现在的替代方案可能包括使用现代JavaScript框架来生成...
- **Web应用集成**: 可以结合Java Servlets、Spring MVC等框架,将客户端打印功能集成到Web应用中。 - **移动端支持**: 通过HTML5的`window.print()`方法,可以让移动端用户也方便地进行打印。 - **打印预览**: 提供...
### iReport + JasperReport 客户端打印与数字签名详解 #### 一、概述 iReport 是一个用于设计 JasperReports 报告模板的图形界面工具,而 JasperReports 则是一款非常流行的 Java 报告工具,它能够从各种数据源...
标题中的“实现客户端打印之jasperrport3.7.0”指的是使用JasperReports的Portlet版本3.7.0来实现在客户端的打印功能,包括打印预览和多页同时打印。JasperReports是一个开源的Java报表库,它能够帮助开发者创建、...
**JasperReport与Servlet在Web应用中的打印预览** JasperReport是一款强大的开源报表工具,它允许开发者在Java应用程序、Web应用甚至独立的Java应用程序中创建复杂的报告。Servlet是Java Web开发中的一个重要组件,...
本话题主要关注如何利用jasperreports、alivepdf和Flex技术来解决在Web应用中的打印和导出PDF的问题。 jasperreports是一个强大的开源报表库,它允许开发者设计复杂的报告模板,并能在多种格式下生成,包括PDF、...
网页套打技术是一种在Web应用中实现打印定制化的方法,主要应用于企业内部的报表、发票、凭证等文档的打印需求。这种技术的核心是通过网页来控制打印内容和格式,使得用户可以直接在浏览器上预览并打印出符合特定...
在JavaWeb开发中,报表打印是一项关键任务,它涉及到数据的可视化展示以及用户对数据的交互。本方案宝典着重探讨了如何在JavaEE环境中高效地实现报表打印,旨在为开发者提供一系列实用的技术选择和最佳实践。以下是...
不论是ASP还是JSP,这两种方法都利用了浏览器的特性,将Web页面内容模拟为Word文档,使得客户端可以方便地进行打印。但这种方法有一些限制,比如对浏览器的依赖、打印样式控制有限,以及可能的安全问题,因为需要在...
通常的做法是在服务器端使用JasperReport处理报表模板,并将结果返回给客户端进行显示。 #### 4. 提高篇 ##### 4.1. 报表的结构 报表的基本结构通常包括以下几个部分: - **主标题**:位于报表顶部,用于显示...
Servlet是Java Web应用中处理客户端请求的组件,它可以接收请求参数,生成响应内容,然后将其发送回客户端。 4. **显示于页面**:生成的PDF文件可以通过HTTP响应发送到浏览器,展示在页面上。这样用户可以直接在...
JasperReports与JavaServer Pages(JSP)结合使用,可以方便地在Web应用程序中嵌入动态报表。 **一、JasperReports基础概念** 1. **报表模板(JasperReport)**:报表的核心是报表模板,它定义了报表的布局、样式...
标题中的“ireport与java 桌面应用,web应用”揭示了本次讨论的核心主题,即如何使用ireport工具在Java环境下开发桌面应用程序和Web应用程序的报表功能。ireport是JasperReports库的一个图形化设计工具,允许开发者...
在Struts框架中集成iReport,可以实现在Web页面上展示报表、导出不同格式的文件以及打印报表的功能。下面将详细介绍这个过程中的关键知识点: 1. **报表设计**:首先,我们需要使用iReport来设计报表。iReport支持...
- 这里的`JasperPrint`是一个报告对象,通常用来表示由JasperReports生成的报告。通过这种方式,可以将服务器端生成的报告直接发送给客户端并在客户端显示。 2. **JRPrintApplet的使用** - 客户端接收到数据后,...