JasperReport+Servlet Web应用之:导PDF,Excel,Rtf文件
第一,二,三,四步请参照:JasperReport+Servlet Web应用之:打印
导PDF文件的Servlet如下:
package com.mengya.servlet;import java.io.File;import java.io.IOException;import java.util.HashMap;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.export.JRPdfExporter;import net.sf.jasperreports.engine.util.FileBufferedOutputStream;import net.sf.jasperreports.engine.util.JRLoader;import com.mengya.JRDataSource.PersonDataSource;public class JRPDFServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {ServletContext servletContext = this.getServletConfig().getServletContext();File jasperFile = new File(servletContext.getRealPath("/jasper/preson.jasper"));Map<String, String> parameters = new HashMap<String, String>();parameters.put("year", "2009");parameters.put("unit_mc", "武汉XX科技有限公司");JasperPrint jasperPrint = null;try {JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile.getPath());jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, new PersonDataSource());} 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) {response.setContentType("application/pdf");response.setContentLength(fbos.size());ServletOutputStream ouputStream = response.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();}}}}}?
导Excel文件的Servlet如下:
public class JRJXLServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {ServletContext context = this.getServletConfig().getServletContext();File jasperFile = new File(context.getRealPath("/jasper/preson.jasper"));Map<String, String> parameters = new HashMap<String, String>();parameters.put("year", "2009");parameters.put("unit_mc", "武汉XX科技有限公司");JasperPrint jasperPrint = null;try {JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile);jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,new PersonDataSource());} catch (JRException e) {e.printStackTrace();}if(null != jasperPrint){FileBufferedOutputStream fbos = new FileBufferedOutputStream();JRXlsAbstractExporter exporter = new JExcelApiExporter();exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);exporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);exporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);try {exporter.exportReport();fbos.close();if (fbos.size() > 0) {response.setContentType("application/exl");response.setHeader("Content-Disposition", "inline; filename="persons.xls"");response.setContentLength(fbos.size());ServletOutputStream ouputStream = response.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();}}}}}?
导rtf文件的servlet如下:
public class JRRTFServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {ServletContext context = this.getServletConfig().getServletContext();File jasperFile = new File(context.getRealPath("/jasper/preson.jasper"));Map<String, String> parameters = new HashMap<String, String>();parameters.put("year", "2009");parameters.put("unit_mc", "武汉XX科技有限公司");JasperPrint jasperPrint = null;try {JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile);jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,new PersonDataSource());} catch (JRException e) {e.printStackTrace();}if(null != jasperPrint){FileBufferedOutputStream fbos = new FileBufferedOutputStream();JRRtfExporter exporter = new JRRtfExporter();exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);try {exporter.exportReport();fbos.close();if (fbos.size() > 0) {response.setContentType("application/rtf");response.setHeader("Content-Disposition", "inline; filename="person.rtf"");response.setContentLength(fbos.size());ServletOutputStream ouputStream = response.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();}}}}}?
该Servlet在web.xml配置如下:
<servlet><servlet-name>JRPDFServlet</servlet-name><servlet-class>com.mengya.servlet.JRPDFServlet</servlet-class></servlet><servlet><servlet-name>JREXLServlet</servlet-name><servlet-class>com.mengya.servlet.JREXLServlet</servlet-class></servlet><servlet><servlet-name>JRRTFServlet</servlet-name><servlet-class>com.mengya.servlet.JRRTFServlet</servlet-class></servlet><servlet-mapping><servlet-name>JRPDFServlet</servlet-name><url-pattern>/JRPDFServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JREXLServlet</servlet-name><url-pattern>/JREXLServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>JRRTFServlet</servlet-name><url-pattern>/JRRTFServlet</url-pattern></servlet-mapping>
?页面调用如下:
h3><a href="JRPDFServlet">导出PDF文件</a></h3> <br> <h3><a href="JREXLServlet">导出EXL文件</a></h3> <br> <h3><a href="JRRTFServlet">导出RTF文件</a></h3> <br>
??
1 楼 speed_guo 2010-04-23 多谢,正在学习这个 2 楼 csxthui123 2011-09-26 大虾! 有个问题请教一下。 如愿意请加qq: 463150644 . 感激不尽!