`

JasperReports -- 客户端打印(WEB网页打印)

阅读更多
[报表]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";


分享到:
评论
1 楼 水土第一 2014-03-10  
大侠,有没有  向servlet传递参数的案例,而且是多页拼接的那种

相关推荐

    jasperreports-flash 3.7.0web多页打印及其预览

    jasperreports-flash来实现web客户端打印的功能,避免了applet客户端打印在客户端安装jre的限制。jasperreports-flash只需要求客户端有能浏览swf文件的flash player就行了。可以根据自己的需求修改example.mxml文件...

    jasperreports-flash 4.0.0web多页打印及其预览

    jasperreports-flash来实现web客户端打印的功能,避免了applet客户端打印在客户端安装jre的限制。jasperreports-flash只需要求客户端有能浏览swf文件的flash player就行了。可以根据自己的需求修改example.mxml文件...

    jasperreports-5.6.0+applet实现客户端打印所需的jar包

    总的来说,"jasperreports-5.6.0+applet实现客户端打印所需的jar包"是一个旧时代的解决方案,尽管在某些特定场景下仍然有用,但它已经不适应当前的Web开发趋势。现在的替代方案可能包括使用现代JavaScript框架来生成...

    Jasperreport 客户端打印例子

    - **Web应用集成**: 可以结合Java Servlets、Spring MVC等框架,将客户端打印功能集成到Web应用中。 - **移动端支持**: 通过HTML5的`window.print()`方法,可以让移动端用户也方便地进行打印。 - **打印预览**: 提供...

    iReport+jasperReport之客户端打印 ----数字签名

    ### iReport + JasperReport 客户端打印与数字签名详解 #### 一、概述 iReport 是一个用于设计 JasperReports 报告模板的图形界面工具,而 JasperReports 则是一款非常流行的 Java 报告工具,它能够从各种数据源...

    实现客户端打印之jasperrport3.7.0(打印预览+多页同时打印)

    标题中的“实现客户端打印之jasperrport3.7.0”指的是使用JasperReports的Portlet版本3.7.0来实现在客户端的打印功能,包括打印预览和多页同时打印。JasperReports是一个开源的Java报表库,它能够帮助开发者创建、...

    JasperReport+Servlet Web应用之:打印预览

    **JasperReport与Servlet在Web应用中的打印预览** JasperReport是一款强大的开源报表工具,它允许开发者在Java应用程序、Web应用甚至独立的Java应用程序中创建复杂的报告。Servlet是Java Web开发中的一个重要组件,...

    jasperreports+alivepdf+Flex解决打印和导出PDF问题

    本话题主要关注如何利用jasperreports、alivepdf和Flex技术来解决在Web应用中的打印和导出PDF的问题。 jasperreports是一个强大的开源报表库,它允许开发者设计复杂的报告模板,并能在多种格式下生成,包括PDF、...

    web 套打,网页套打,jsp网页套打

    网页套打技术是一种在Web应用中实现打印定制化的方法,主要应用于企业内部的报表、发票、凭证等文档的打印需求。这种技术的核心是通过网页来控制打印内容和格式,使得用户可以直接在浏览器上预览并打印出符合特定...

    JavaWeb开发技术方案宝典--报表打印方案(报表打印方案要点代码)

    在JavaWeb开发中,报表打印是一项关键任务,它涉及到数据的可视化展示以及用户对数据的交互。本方案宝典着重探讨了如何在JavaEE环境中高效地实现报表打印,旨在为开发者提供一系列实用的技术选择和最佳实践。以下是...

    WEB应用中报表打印的实现

    不论是ASP还是JSP,这两种方法都利用了浏览器的特性,将Web页面内容模拟为Word文档,使得客户端可以方便地进行打印。但这种方法有一些限制,比如对浏览器的依赖、打印样式控制有限,以及可能的安全问题,因为需要在...

    JasperReport+iReport报表工具详细开发手册

    通常的做法是在服务器端使用JasperReport处理报表模板,并将结果返回给客户端进行显示。 #### 4. 提高篇 ##### 4.1. 报表的结构 报表的基本结构通常包括以下几个部分: - **主标题**:位于报表顶部,用于显示...

    jasperreport 生成pdf实现下载与打印

    Servlet是Java Web应用中处理客户端请求的组件,它可以接收请求参数,生成响应内容,然后将其发送回客户端。 4. **显示于页面**:生成的PDF文件可以通过HTTP响应发送到浏览器,展示在页面上。这样用户可以直接在...

    JasperReports 报表

    JasperReports与JavaServer Pages(JSP)结合使用,可以方便地在Web应用程序中嵌入动态报表。 **一、JasperReports基础概念** 1. **报表模板(JasperReport)**:报表的核心是报表模板,它定义了报表的布局、样式...

    ireport与java 桌面应用,web应用

    标题中的“ireport与java 桌面应用,web应用”揭示了本次讨论的核心主题,即如何使用ireport工具在Java环境下开发桌面应用程序和Web应用程序的报表功能。ireport是JasperReports库的一个图形化设计工具,允许开发者...

    struts+ireport报表在页面显示,导出,打印功能

    在Struts框架中集成iReport,可以实现在Web页面上展示报表、导出不同格式的文件以及打印报表的功能。下面将详细介绍这个过程中的关键知识点: 1. **报表设计**:首先,我们需要使用iReport来设计报表。iReport支持...

    0002_Applet理解_demo

    - 这里的`JasperPrint`是一个报告对象,通常用来表示由JasperReports生成的报告。通过这种方式,可以将服务器端生成的报告直接发送给客户端并在客户端显示。 2. **JRPrintApplet的使用** - 客户端接收到数据后,...

Global site tag (gtag.js) - Google Analytics