`

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

阅读更多

打印预览与打印的准备工作是一样的,第一,二,三,四,五步请参照:JasperReport+Servlet Web应用之:打印 

不同之处在于:我们同样要写一个预览的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 JRViewApplet extends javax.swing.JApplet {
	private URL url = null;

	private JasperPrint jasperPrint = null;

	public JRViewApplet() {

	}

	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");
		}
	}

	@Override
	public void start() {
		// initComponents();
		if (url != null) {
			try {
				if (jasperPrint == null) {
					jasperPrint = (JasperPrint) JRLoader.loadObject(url);
				}
				if (jasperPrint != null) {
					ViewerFrame viewerFrame = new ViewerFrame(this
							.getAppletContext(), jasperPrint);
					viewerFrame.show();
				} else {
					JOptionPane.showMessageDialog(this, "空报表!");
				}
			} 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");
		}
	}

	private void initComponents() {
		pnlMain = new javax.swing.JPanel();
		btnPrint = new javax.swing.JButton();
		btnView = new javax.swing.JButton();

		// btnPrint.setText("打印报表");
		// btnPrint.addActionListener(new java.awt.event.ActionListener() {
		// public void actionPerformed(java.awt.event.ActionEvent evt) {
		// btnPrintActionPerformed(evt);
		// }
		// });

		// pnlMain.add(btnPrint);

		btnView.setText("预览报表");
		btnView.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				btnViewActionPerformed(evt);
			}
		});

		pnlMain.add(btnView);

		getContentPane().add(pnlMain, java.awt.BorderLayout.WEST);

	}

	/**
	 * 预览报表
	 * 
	 * @param evt
	 */
	protected void btnViewActionPerformed(java.awt.event.ActionEvent evt) {
		if (url != null) {
			try {
				if (jasperPrint == null) {
					jasperPrint = (JasperPrint) JRLoader.loadObject(url);
				}
				if (jasperPrint != null) {
					ViewerFrame viewerFrame = new ViewerFrame(this
							.getAppletContext(), jasperPrint);
					viewerFrame.show();
				} else {
					JOptionPane.showMessageDialog(this, "空报表!");
				}
			} 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");
		}
	}

	/**
	 * 打印报表
	 * 
	 * @param evt
	 */
	protected void btnPrintActionPerformed(java.awt.event.ActionEvent evt) {
		if (url != null) {
			if (jasperPrint == null) {
				try {
					jasperPrint = (JasperPrint) JRLoader.loadObject(url);
				} catch (Exception e) {
					StringWriter swriter = new StringWriter();
					PrintWriter pwriter = new PrintWriter(swriter);
					e.printStackTrace(pwriter);
					JOptionPane.showMessageDialog(this, swriter.toString());
				}
			}
			if (jasperPrint != null) {
				final JasperPrint print = jasperPrint;

				Thread thread = new Thread(new Runnable() {
					public void run() {
						try {
							JasperPrintManager.printReport(print, true);
						} catch (Exception e) {
							StringWriter swriter = new StringWriter();
							PrintWriter pwriter = new PrintWriter(swriter);
							e.printStackTrace(pwriter);
							JOptionPane.showMessageDialog(null, swriter
									.toString());
						}
					}
				});

				thread.start();
			} else {
				JOptionPane.showMessageDialog(this, "空报表!");
			}
		} else {
			JOptionPane.showMessageDialog(this, "Source URL not specified");
		}
	}

	private javax.swing.JPanel pnlMain;

	private javax.swing.JButton btnView;

	private javax.swing.JButton btnPrint;

}

 它还需要两个辅助类:如下:

public class JRViewerPlus extends JRViewer {

	protected JButton btnPlus = new javax.swing.JButton();

	public JRViewerPlus(JasperPrint jrPrint) throws JRException {
		super(jrPrint);

		tlbToolBar.remove(btnSave);
		tlbToolBar.remove(btnReload);

		btnPlus = new javax.swing.JButton();
		btnPlus.setToolTipText("Plus...");
		btnPlus.setText("Plus...");
		btnPlus.setPreferredSize(new java.awt.Dimension(80, 23));
		btnPlus.setMaximumSize(new java.awt.Dimension(80, 23));
		btnPlus.setMinimumSize(new java.awt.Dimension(80, 23));
		btnPlus.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				btnPlusActionPerformed(evt);
			}
		});
		tlbToolBar.add(btnPlus, 0);
	}

	protected void setZooms() {
		this.zooms = new int[] { 33, 66, 100, 133, 166, 200, 233 };
		this.defaultZoomIndex = 2;
	}

	protected void btnPlusActionPerformed(java.awt.event.ActionEvent evt) {
		JOptionPane
				.showMessageDialog(
						this,
						"I just wanted to let you know that you can extend the JRViewer to customize it.\n The button you have pushed was added this way.");
	}

}

 

public class ViewerFrame extends javax.swing.JFrame implements
		JRHyperlinkListener {
	private AppletContext appletContext = null;

	public ViewerFrame(AppletContext appletContext, JasperPrint jasperPrint)
			throws JRException {
		initComponents();

		this.appletContext = appletContext;

		JRViewerPlus viewer = new JRViewerPlus(jasperPrint);
		viewer.addHyperlinkListener(this);
		this.pnlMain.add(viewer, BorderLayout.CENTER);
	}
	public void gotoHyperlink(JRPrintHyperlink hyperlink) {
		switch (hyperlink.getHyperlinkType()) {
		case JRHyperlink.HYPERLINK_TYPE_REFERENCE: {
			try {
				this.appletContext.showDocument(new URL(hyperlink
						.getHyperlinkReference()), "_blank");
			} catch (MalformedURLException e) {
				JOptionPane.showMessageDialog(this, e.getMessage());
			}
			break;
		}
		case JRHyperlink.HYPERLINK_TYPE_LOCAL_ANCHOR:
		case JRHyperlink.HYPERLINK_TYPE_LOCAL_PAGE: {
			break;
		}
		case JRHyperlink.HYPERLINK_TYPE_REMOTE_ANCHOR:
		case JRHyperlink.HYPERLINK_TYPE_REMOTE_PAGE: {
			JOptionPane
					.showMessageDialog(this,
							"Implement your own JRHyperlinkListener to manage this type of event.");
			break;
		}
		case JRHyperlink.HYPERLINK_TYPE_NONE:
		default: {
			break;
		}
		}
	}

	private void initComponents() {
		pnlMain = new javax.swing.JPanel();

		setTitle("JasperViewer");
		setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
		pnlMain.setLayout(new java.awt.BorderLayout());

		getContentPane().add(pnlMain, java.awt.BorderLayout.CENTER);

		pack();
		java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit()
				.getScreenSize();
		setSize(new java.awt.Dimension(400, 300));
		setLocation((screenSize.width - 400) / 2, (screenSize.height - 300) / 2);
	}

	private javax.swing.JPanel pnlMain;

}

 

说明:这三个类可以在jasperReport自带的demo中获得,只需做小小的改动就可以了。

 

同样还需要这三个类的编译后的class文件放到WebRoot/applet下面。将jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar三个包加进去。该applet所需要调用的servlet和servlet配置请见:http://zmx.iteye.com/admin/blogs/572812

 

页面调用的applet写法或js动态产生applet如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>打印窗口</title>
	</head>
	<script language="javascript"> 
	<!-- 
		function openView() 
		{ 
			var url = "../JRPrintServlet"; 
			document.write('<APPLET ID="JrPrt" CODE = "JRViewApplet.class" CODEBASE = "applets" ARCHIVE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,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">'); 
			document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">'); 
			document.write('</APPLET>'); 
		}
		--> 
	</script>
	<body bgcolor="#FFFFFF">
		<input type="button" value="测试预览" onclick="openView();">
		<!-- 
		 <APPLET CODE="JRViewApplet.class" CODEBASE = "applets"
			ARCHIVE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar"
			WIDTH="300" HEIGHT="40">
			</XMP>
			<PARAM NAME=CODE VALUE="JRViewApplet.class">
			<PARAM NAME = ARCHIVE VALUE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar" >
			<PARAM NAME="type" VALUE="application/x-java-applet;version=1.2.2">
			<PARAM NAME="scriptable" VALUE="false">
			<PARAM NAME="REPORT_URL" VALUE="../JRPrintServlet">
		</APPLET>
		  -->
	</body>
</html>

 

分享到:
评论
4 楼 hslh22 2015-03-11  
org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/viewer.jsp at line 18

楼主少了包
commons-logging-1.1.1.jar

在网上下一个jar包添加进项目就可以解决了
3 楼 xietingzi123456 2012-02-16  
下载了项目,部署了,跑了, 但是org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/viewer.jsp at line 18
15: if (!reportFile.exists())
16: throw new JRRuntimeException("File preson.jasper not found. The report design must be compiled first.");
17:
18: JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
19:
20: Map parameters = new HashMap();
21: parameters.put("year", "2009");


报这个错啊。 是不要要加什么文件?
2 楼 guzhiwxb 2011-10-18  
如果是List<JasperPrint> 如何打印预览
1 楼 veteran123 2010-07-26  
正需要,研究一下

相关推荐

    JasperReport+Servlet Web应用之:打印

    本文将深入探讨如何在Servlet Web应用中利用JasperReport进行报表的生成与打印,同时会提及必要的库文件及其作用。 JasperReport是一个Java库,它允许开发者设计复杂的报表,并且支持多种输出格式,如PDF、HTML、...

    JasperReport + Servlet Web应用之:HTML显示报表内容

    在Web应用中,Servlet常用于接收和处理用户的请求,而JasperReport则可以作为Servlet的后端服务,生成报表内容。 要实现HTML显示报表,我们需要完成以下步骤: 1. **报表模板设计**:使用JasperReport提供的设计...

    Jasperreport+ireport学习笔记(1).rar

    JasperReport是一款开源的报告生成库,它允许开发者创建复杂的、可定制的打印和Web报表。JasperReport支持多种数据源,包括数据库连接、CSV文件、XML数据等,可以生成PDF、HTML、Excel、CSV等多种格式的报表。其强大...

    jasperreport报表模板预览 applet与servlet通信

    标题中的“jasperreport报表模板预览 applet与servlet通信”揭示了本文将要讨论的重点,即如何在Java环境中使用JasperReport库创建报表模板,并通过Applet和Servlet进行数据交互来实现预览功能。JasperReport是一个...

    一个完整的jasperreport+myeclipse+struts2例子

    【jasperreport】 JasperReport是一个开源的...通过这个实例,你可以深入理解JasperReport、MyEclipse和Struts2的结合使用,提高你在企业级Web应用开发中的能力。记得在实践中不断尝试和探索,以便更好地掌握这些技术。

    jasperreport 生成pdf实现下载与打印

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

    iReport 和 Jasperreport整合开发web报表.rar

    在Web环境中,`JasperReport`通常与Servlet容器(如Tomcat)或Java EE应用服务器(如Glassfish、JBoss)结合使用。报表的生成通常分为两个步骤:首先,使用`iReport`设计并保存`.jrxml`模板;然后,在服务器端,通过...

    iReport 和 Jasperreport整合开发web报表向导

    在开发Web应用时,iReport用于设计报表模板,而Jasperreport则负责运行时的报表渲染和数据填充。通过iReport设计好的模板(jrxml文件)可以被Jasperreport引擎解析并生成实际的报表。 4. **Web报表向导** iReport...

    web打印.doc

    随着信息技术的发展,Web打印成为越来越多企业选择的高效打印方式之一。本文档旨在介绍如何利用Jaspersoft、iReport、Designer 4.5.0等工具实现Web端直接打印的需求,特别适用于.NET项目中希望优化打印流程的情况。...

    springmvc+jasperreport解决了中文显示和国际化

    `WEB-INF`目录是存放Web应用内部资源的地方,如Servlet配置、视图解析器配置等。`META-INF`通常用于存放项目的元数据,比如MANIFEST.MF文件。 通过以上步骤,我们成功地在Spring MVC项目中集成了JasperReport,并...

    JasperReport浏览器输出PDF为空白页的解决方案

    5. **浏览器兼容性**:JasperReport通过Servlet在服务器端生成PDF,然后发送到浏览器。某些浏览器可能不支持或有特定限制,导致PDF显示为空。 针对以上问题,解决策略可以分为以下几个步骤: 1. **验证JRXML文件**...

    ireport与java 桌面应用,web应用

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

    jasperreport.zip

    在web应用中,JasperReport通常被集成到Servlet容器如Tomcat中,将其库文件部署到WEB-INF/lib目录下。这样,Web应用就可以通过JasperReport的API调用来生成和显示报表。例如,可以使用`JasperFillManager`填充数据,...

    jasperreport2.0.3 初级教程

    设计完成后,可以通过JasperReport API在你的Java应用中编译和渲染报表: 1. 使用`JasperCompileManager`编译JRXML文件生成`.jasper`编译后的模板。 2. 创建数据集对象,填充数据源,这通常是基于Java集合或数据库...

Global site tag (gtag.js) - Google Analytics