`

ireport客户端打印

阅读更多

Ireport客户端打印

1. 新建一个web项目Outireport。如图:

 

2. lib导入ireport报表需要的包jasperreports-4.0.2.jar, jasperreports-applet-4.0.2.jar, commons-collections-2.1.jar, commons-logging-1.0.2.jar, groovy-all-1.7.5.jar, iText-2.1.7.jar, iTextAsian.jar(这几个表可能有个别包不是必须)。如图:

 

3. WebRoot中新建一个名为ireport的目录,里面存放打印的ireport报表,我这里是一个用户的报表。如图:

 

 

4. src中新建一个applet的目录,在applet中新建一个名为IreportServlet.javaservlet。代码如下:

package applet;

import java.io.File;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

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.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;

public class IreportServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		List list=new ArrayList();
		try{
			Users users=null;
			for(int i=0;i<2;i++)
			{
				users=new Users();
				users.setUserName("yzp"+i);
				users.setSex(""+i);
				users.setPhone("13410479904");
				users.setPhone("19890214");
				list.add(users);
				
			}
			JRBeanCollectionDataSource jds =new JRBeanCollectionDataSource(list);  //使用javabean数据源
			String url=this.getServletContext().getRealPath("/")+"/ireport/users.jasper";//报表模板的文件路径
			File reportFile = new File(url);
			JasperReport report=(JasperReport) JRLoader.loadObject(reportFile.getPath());
			JasperPrint jasperPrint=null;

			jasperPrint= JasperFillManager.fillReport(report, null, jds);//将所有的数据填充到jasperPrint,形成正常的报表
			response.setContentType("application/pdf"); 
			ServletOutputStream ouputStream = response.getOutputStream(); 
			ObjectOutputStream oos = new ObjectOutputStream(ouputStream); 
			oos.writeObject(jasperPrint);//将JasperPrint对象写入对象输出流中 
			oos.flush(); 
			oos.close(); 
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

  

 

5. web.xml中配置代码,加入以下代码

  <servlet>
    <servlet-name>ireportServlet</servlet-name>
    <servlet-class>applet.IreportServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ireportServlet</servlet-name>
    <url-pattern>/ireportServlet</url-pattern>
  </servlet-mapping>

 

启动项目,在网页上输入http://localhost:8080/Outireport/ireportServlet

 

如果弹出一个下载的窗口,证明这个servlet已经ok了。

 

6. 接下来,我们要写一个applet,在src/applet目录下新建一个名为printerApplet.javaapplet。代码如下:

package applet;

import java.applet.Applet;
import java.io.PrintWriter;
import java.io.StringWriter;
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 printerApplet extends Applet {

	private static final long serialVersionUID = 1L;
	private URL url=null;

	/** Creates new form AppletViewer */
	public printerApplet() {
	}

	public void init() {
		String strUrl = "http://localhost:8080/Outireport/ireportServlet"; 
		if (strUrl != null) {
			try {
				url = new URL("http://localhost:8080/Outireport/ireportServlet");			} 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 {
				//根据url的路径(url:调用的servlet的路径)去获取JasperPrint
				JasperPrint obj = (JasperPrint)JRLoader.loadObject(url);// 发送对象请求,获得JasperPrint对象
				JasperPrintManager.printReport(obj, true);// 调用方法打印所获得的JasperPrint对象
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			JOptionPane.showMessageDialog(this,
					"start():Source URL not specified");
		}
	}
}

  

右键单击printerApplet.java,选择 “Run as Java Applet”,弹出打印对话框,确认后打印机正常打印,证明 applet 已经编写成功。

 

7. index.jsp中的代码如下。

<%@ page language="java" import="java.util.*;" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>ireport报表客户端打印</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
	<script type="text/javascript">
	function openApp()   
	{   
		var url = "/Outireport/ireportServlet";
		//COD:在根目录WebRoot下applet.class存放的路径   ARCHIVE:在根目录WebRoot下用到的包存放的路径
		document.write('<APPLET ID="JrPrt" CODE="applet/printerApplet.class" ARCHIVE = "applet/print.jar,applet/jasperreports-4.0.2.jar,applet/commons-logging-1.0.2.jar,applet/commons-collections-2.1.jar" WIDTH = "0" HEIGHT = "0">');   
		document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">');   
		document.write('<PARAM NAME = "scriptable" VALUE="false">'); 
		//REPORT_URL:用来调用servlet的路径
		document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">');
		document.write('<PARAM NAME = "SHOW_DIALOG" VALUE ="true">');   
		document.write('</APPLET>');   
	} 
	</script>
	</head>

	<body>
		<input type="button" value="测试打印" onclick="openApp();">  
	</body>
</html>

 

 

WebRoot目录下新建一个applet目录,将jasperreports-4.0.2.jar, jasperreports-applet-4.0.2.jar,commons-logging-1.0.2.jar, commons-collections-2.1.jar这几个包放一份进去。

 

如后修改src/applet目录下的printerApplet.java

将String strUrl = "http://localhost:8080/Outireport/ireportServlet";改成
String strUrl =getParameter("REPORT_URL");
将url = new URL("http://localhost:8080/Outireport/ireportServlet");改成
url = new URL(getCodeBase(),strUrl);

 

然后重新执行项目,将printerApplet.java生成的printerApplet.class文件复制一份到WebRoot/applet目录下。WebRoot/applet目录下的文件如下:

 

 

8. 最后为applet加入签名证书。

随便在那个盘里新建一个目录aa,将jasperreports-applet-4.0.2.jar解压到该目录中,jasperreports-applet-4.0.2.jar包中有三个文件META-INFnetdefault.jasperreports.properties(都要有,不然会报错的);将printerApplet.java生成的printerApplet.class文件复制一份到该目录下,print的目录如下:

 

 

然后就是签名,系统-运行-输入cmd

输入cd +jdk所在的目录\bin

jar cvfm 生成的包名.jar mymanifest +print的路径

例子:我叫的包名:printaa的路径是:D:\aa\,那么输入的命令就是:jar cvfm print.jar mymanifest D:\aa\

jdk\bin的目录下就会生成一个print.jar的包。

 

keytool生成证书:keytool -genkey -alias printkey -keystore printstoreprintkey可以用自己的命名方式来命名)
keytool导出证书:keytool -export -keystore printstore -alias printkey -file print.cerprint.cer证书的名字,也可用自己的命名方式来命名)
jarsignerreportprint.jar加上数字签名:jarsigner -keystore printstore appletPrint.jar printkey
以上都是在命令提示符下运行,printkeyprintstore都可以以自己的命名方式来命名。现在jdk\bin的目录下已经有了一个print.jar和一个print.cer,把这两个文件拷贝回项目中,记得还是放在同一个目录下,放WebRoot/applet目录下。如图:

 

 

完成。运行 Outireport 项目看看结果如何。如果 Java 控制台提示“ClassNotFoundException”,证明 applet 打包路径没有配置好:去查看 JasperReport 类是否被打包,以及 jsp 页面调用 reportprin.jar 是否正确。如果弹出对话框:该应用程序的数字签名无法验证,是否要运行该应用程序?证明数字签名已经可以使用。

最后,如果弹出打印对话框,点击答应能够正常打印说明程序已经完成。

 

附:如果不想用applet签名证书。可以用为applet 权限无限提升方法。

具体介绍可以看看http:// aspnetdb.iteye.com/blog/648370这位兄台的,我也是用他的东西。

直接将\权限提升demo\当次提升中的bin文件复制到项目的WebRoot目录下,在index.jsp代码中将

<input type="button" value="测试打印" onclick="openApp();"> 

改为

<applet codebase="bin" code="applet.AllPermisionApplet.class"

archive="WebInterfaceDemo.jar" name="AllPermisionApplet" width="0"

height="0" mayscript></applet>

<input type="button" value="测试打印" onclick="openApp();"> 

 

 

 

运行后也能达到同样的目的。

 

  • bin.zip (7.3 KB)
  • 下载次数: 54
分享到:
评论

相关推荐

    SpringBoot+iReport打印(单张和多张)报表(包含模设计板样板与代码实现)案例

    本案例是SpringBoot结合iReport做的打印,直接在浏览器上面显示PDF,建议在Eclipse+Maven上部署运行,启动方式与SpringBoot启动方式一样,特别注意:如果你使用的SpringBoot版本比较新,相关jar包会有所不同。

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

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

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

    **JasperReports -- 客户端打印(WEB网页打印)** JasperReports 是一个功能强大的开源报告生成库,广泛应用于Java应用程序中,用于创建复杂的报表和图表。它支持多种数据源,包括数据库查询、XML、CSV等,并且可以...

    jasperReport客户端打印。

    在本主题中,我们将探讨如何利用JasperReport进行客户端打印,特别是通过Applet的方式。 首先,我们需要理解JasperReport的核心概念。JasperReport允许用户使用JRXML文件设计报告模板,这个模板包含了布局、数据源...

    Jasperreport 客户端打印例子

    **JasperReport客户端打印详解** JasperReport是一款强大的开源报表工具,它允许开发者设计美观、复杂的报告,并在各种应用程序中嵌入和展示这些报告。在Java应用中,JasperReport通常用于生成PDF、HTML、Excel等...

    jasperreport+applet客户端打印demo

    总的来说,"jasperreport+applet客户端打印demo"展示了如何结合JasperReport的强大报表生成能力和Java Applet的本地交互能力,实现一个灵活且安全的客户端打印解决方案。虽然Applet可能不再是首选技术,但其背后的...

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

    在本场景中,我们关注的是JasperReports 5.6.0版本与Java Applet结合来实现客户端打印的功能。Applet是Java的一个古老特性,允许在Web浏览器中运行小型Java程序,为用户提供交互性。 首先,`jasperreports-5.6.0`是...

    国产报表Ireport,pdf打印输出中文

    6. **问题排查**:如果在实际应用中仍然遇到中文乱码,可以检查以下几个方面:数据库连接编码、源代码中的字符编码设置、报表XML文件的编码声明,以及服务器和客户端的环境变量配置。 总之,Ireport处理PDF中文输出...

    iReport生成pdf打印的实例代码

    iReport生成pdf打印的实例代码 iReport是一款功能强大且广泛应用的报表工具,它允许开发者快速生成各种格式的报表,例如PDF、Excel、Word等。在本篇实例代码中,我们将学习如何使用iReport生成PDF打印的实例代码。 ...

    japser实现批量打印

    本实例将详细介绍如何利用iReport和JasperReports来实现批量打印的功能。 首先,我们需要理解JasperReports的基本工作流程。JasperReport的设计是基于一个名为`.jrxml`的XML文件,这个文件包含了报表的所有布局和...

    ireport报表例子

    【标题】:“ireport报表例子”揭示了在Java环境下利用ireport工具进行报表设计与打印的实践应用。ireport是一款强大的报表设计工具,它允许开发者使用拖拽方式创建复杂的报表布局,广泛应用于企业级应用程序中。 ...

    SpringMVC+iReport生成二维码的案例

    这个案例是关于如何结合SpringMVC框架和iReport工具来实现二维码的生成。SpringMVC是Java Web开发中的一个强大框架,它提供了模型-视图-控制器的架构模式,帮助开发者构建可维护、可扩展的Web应用。而iReport是一款...

    SpringMVC+iReport多张报表连续输出案例

    7. **响应输出**:最后,Controller将合并后的报表文件发送给客户端,可以通过OutputStream直接输出到浏览器,或者保存为文件供用户下载。 在实际开发中,可能还需要考虑其他因素,比如权限控制、报表缓存优化、...

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

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

    ireport与java 桌面应用,web应用

    例如,可以在Servlet中处理报表生成,接收前端请求,填充数据源,生成报表,然后将报表以流形式返回给客户端。此外,可以利用框架如Spring MVC、Struts2等来简化集成过程。 **4. JasperReports库** JasperReports库...

    ireport+jsperreport操作文档

    - 报表导出:将报表保存为各种格式,便于分发和打印。 **6. 运行环境** 硬件要求通常包括: - 中等性能的计算机,内存和CPU满足Java应用程序的基本需求。 - 充足的硬盘空间,用于存储报表模板和生成的报表文件。 ...

    ireport+jsp基于jasperReport 实现导出报表至web页面

    标题中的“ireport+jsp基于jasperReport 实现导出报表至web页面”是指使用iReport工具和JasperReport库,结合JavaServer Pages (JSP) 技术,来创建和展示动态报表,并能将这些报表导出到Web页面上供用户查看。...

    IReport使用指南

    使用IReport打印第一个报表 使用IReport设计报表的基本步骤如下: 1. **新建报表项目**:打开IReport,创建一个新的报表项目。 2. **添加字段和布局**:拖拽字段到报表中,调整布局以符合需求。 3. **保存...

Global site tag (gtag.js) - Google Analytics