JasperReporter Ireport Java 打印报表

JasperReporter Ireport Java 打印报表

        JasperReporter是一个强大的开源报表,通常情况下使用Ireport编辑器进行编辑。今天和大家分享的是Java 和 JasperReporter的结合使用,交互原理。

 

一、使用Ireport编写JasperReport文件

          本文主要讲解 Java和JasperReport的交互原理,使用Ireport设计报表文件这里就不再累述了。

 

二、将JasperReport集成到Java项目中来

           当使用Ireport设计完报表后需要运行编译通过,通过后会在目录中有两个文件分别是 .jasper 和 .jrxml。把这两个文件拷贝到WEB项目的某个目录,如图所示:

 

 

三、编写Java 和 JasperReport交互类打印报表

1、直接在某个页面调用一个Servlet来完成,Servlet会把报表打印到该页面(pdf格式)。

<a href="PersonReportServlet">报表打印</a>


 

 

 

2、Servlet的编写

package com.hq.jasperreport.servlet;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
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.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
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.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.FileBufferedOutputStream;
import net.sf.jasperreports.engine.util.JRLoader;

import com.hq.jasperreport.daomain.Person;

/**
 * 
 * @author 何小虎
 * @function 完成报表打印Servlet
 * 
 */
public class PersonReportServlet extends HttpServlet
{
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{

		ServletContext servletContext = this.getServletConfig()
				.getServletContext();
		File reportFile = new File(
				servletContext.getRealPath("/jasper/personTest.jasper"));

		Map<String, String> parameters = new HashMap<String, String>();
		parameters.put("Test", "中国移动通信");
		// //给jasperreport传递图片对象
		// parameters.put("image", servletContext.getRealPath("") +
		// "/image/有梦好甜蜜.jpg");

		JasperPrint jasperPrint = null;
		try
		{
			JasperReport personJasperReport = (JasperReport) JRLoader
					.loadObject(reportFile.getPath());
			// 这里是给Person对象赋值
			Person p = new Person();
			p.setId(1);
			p.setName("张三");
			p.setGender("男");
			p.setAge(12);
			p.setAddress("黑龙江哈尔滨");
			// 这里是给Person对象赋值
			Person p1 = new Person();
			p1.setId(2);
			p1.setName("李四");
			p1.setGender("女");
			p1.setAge(20);
			p1.setAddress("北京中关村");
			// 这里是给Person对象赋值
			Person p2 = new Person();
			p2.setId(3);
			p2.setName("何小虎");
			p2.setGender("男");
			p2.setAddress("北京中关村软件园");
			p2.setAge(20);

			// 将Person对象, 放入集合中,
			List<Person> personList = new ArrayList<Person>();
			personList.add(p);
			personList.add(p1);
			personList.add(p2);

			// 将集合对象数据填充到JasperReport中.
			jasperPrint = JasperFillManager.fillReport(personJasperReport,
					parameters, new JRBeanCollectionDataSource(personList));

		}
		catch (JRException e)
		{
			e.printStackTrace();
		}
		if (null != jasperPrint)
		{
			FileBufferedOutputStream fbos = new FileBufferedOutputStream();
			JRPdfExporter exporter = new JRPdfExporter();
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);
			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			try
			{
				exporter.exportReport();
				fbos.close();
				if (fbos.size() > 0)
				{
					resp.setContentType("application/pdf");
					resp.setContentLength(fbos.size());
					ServletOutputStream ouputStream = resp.getOutputStream();
					try
					{
						fbos.writeData(ouputStream);
						fbos.dispose();
						ouputStream.flush();
					}
					finally
					{
						if (null != ouputStream)
						{
							ouputStream.close();
						}
					}
				}
			}
			catch (JRException e1)
			{
				e1.printStackTrace();
			}
			finally
			{
				if (null != fbos)
				{
					fbos.close();
					fbos.dispose();
				}
			}
		}
	}

	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{

		this.doGet(req, resp);
	}
}


 

 

四、观察效果

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值