生成Excel 跟PDF报表

生成Excel 和PDF报表
HTML页面并不总是向用户显示数据输出的最好方式,有时候需要生成不可改变的文件打印,PDF可能是种不错的选择。

Spring支持从数据动态生成PDF或Excel文件

下面这个简单实现的例子实现了spring输出PDF和Excel文件,为了使用Excel电子表格,你需要在你的classpath中加入poi-2.5.1.jar库文件,而对PDF文件,则需要iText.jar文件。它们都包含在Spring的主发布包中。

下面是测试项目代码:


1、控制器配置代码

xml 代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2. DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3.   
  4. <beans>  
  5.     <bean id="beanNameViewResolver"  
  6.         class="org.springframework.web.servlet.view.BeanNameViewResolver" />  
  7.   
  8.     <bean id="viewController" class="com.zhupan.spring.ViewController" />  
  9.     <bean id="urlMapping"  
  10.         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  11.         <property name="mappings">  
  12.             <props>  
  13.                 <prop key="/view*.shtml">viewControllerprop>  
  14.             props>  
  15.         property>  
  16.     bean>  
  17. beans>  

 3、用于Excel视图的视图子类化
为了在生成输出文档的过程中实现定制的行为,我们将继承合适的抽象类。对于Excel,这包括提供一个 org.springframework.web.servlet.view.document.AbstractExcelView的子类,并实现 buildExcelDocument方法。
java 代码
  1. package com.zhupan.view;   
  2.   
  3. import java.util.Date;   
  4. import java.util.Map;   
  5. import javax.servlet.http.HttpServletRequest;   
  6. import javax.servlet.http.HttpServletResponse;   
  7.   
  8. import org.apache.poi.hssf.usermodel.HSSFCell;   
  9. import org.apache.poi.hssf.usermodel.HSSFCellStyle;   
  10. import org.apache.poi.hssf.usermodel.HSSFDataFormat;   
  11. import org.apache.poi.hssf.usermodel.HSSFRow;   
  12. import org.apache.poi.hssf.usermodel.HSSFSheet;   
  13. import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
  14. import org.springframework.web.servlet.view.document.AbstractExcelView;   
  15.   
  16. public class ViewExcel extends AbstractExcelView {   
  17.   
  18.     public void buildExcelDocument(Map model, HSSFWorkbook workbook,   
  19.             HttpServletRequest request, HttpServletResponse response)   
  20.             throws Exception {   
  21.   
  22.         HSSFSheet sheet = workbook.createSheet("list");   
  23.         sheet.setDefaultColumnWidth((short12);   
  24.   
  25.         HSSFCell cell = getCell(sheet, 00);   
  26.         setText(cell, "Spring Excel test");   
  27.   
  28.         HSSFCellStyle dateStyle = workbook.createCellStyle();   
  29.         dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));   
  30.         cell = getCell(sheet, 10);   
  31.         cell.setCellValue(new Date());   
  32.         cell.setCellStyle(dateStyle);   
  33.         getCell(sheet, 20).setCellValue(458);   
  34.   
  35.         HSSFRow sheetRow = sheet.createRow(3);   
  36.         for (short i = 0; i < 10; i++) {   
  37.             sheetRow.createCell(i).setCellValue(i * 10);   
  38.         }   
  39.   
  40.     }   
  41.   
  42. }  

4、用于PDF视图的视图子类化
需要象下面一样继承org.springframework.web.servlet.view.document.AbstractPdfView,并实现buildPdfDocument()方法。
java 代码
  1. package com.zhupan.view;   
  2.   
  3. import java.util.List;   
  4. import java.util.Map;   
  5.   
  6. import javax.servlet.http.HttpServletRequest;   
  7. import javax.servlet.http.HttpServletResponse;   
  8.   
  9. import org.springframework.web.servlet.view.document.AbstractPdfView;   
  10.   
  11. import com.lowagie.text.Document;   
  12. import com.lowagie.text.Paragraph;   
  13. import com.lowagie.text.pdf.PdfWriter;   
  14.   
  15. public class ViewPDF extends AbstractPdfView {   
  16.     public void buildPdfDocument(Map model, Document document,   
  17.             PdfWriter writer, HttpServletRequest request,   
  18.             HttpServletResponse response) throws Exception {   
  19.   
  20.         List list = (List) model.get("list");   
  21.   
  22.         for (int i = 0; i < list.size(); i++)   
  23.             document.add(new Paragraph((String) list.get(i)));   
  24.     }   
  25.   
  26. }   
5、其他文件
1)控制器ViewController
java 代码
  1. package com.zhupan.spring;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashMap;   
  5. import java.util.List;   
  6. import java.util.Map;   
  7.   
  8. import javax.servlet.http.HttpServletRequest;   
  9. import javax.servlet.http.HttpServletResponse;   
  10.   
  11. import org.springframework.web.servlet.ModelAndView;   
  12. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;   
  13.   
  14. import com.zhupan.view.ViewExcel;   
  15. import com.zhupan.view.ViewPDF;   
  16.   
  17. public class ViewController extends MultiActionController {   
  18.   
  19.     public ModelAndView viewPDF(HttpServletRequest request,   
  20.             HttpServletResponse response) throws Exception {   
  21.         List list = new ArrayList();   
  22.         Map model = new HashMap();   
  23.         list.add("test1");   
  24.         list.add("test2");   
  25.         model.put("list", list);   
  26.         ViewPDF viewPDF = new ViewPDF();   
  27.         return new ModelAndView(viewPDF, model);   
  28.     }   
  29.   
  30.     public ModelAndView viewExcel(HttpServletRequest request,   
  31.             HttpServletResponse response) throws Exception {   
  32.         List list = new ArrayList();   
  33.         Map model = new HashMap();   
  34.         list.add("test1");   
  35.         list.add("test2");   
  36.         model.put("list", list);   
  37.         ViewExcel viewExcel = new ViewExcel();   
  38.         return new ModelAndView(viewExcel, model);   
  39.     }   
  40. }  
2)web.xml
xml 代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.   
  7.     <display-name>springPDFTestdisplay-name>  
  8.     <servlet>  
  9.         <servlet-name>springPDFTestservlet-name>  
  10.         <servlet-class>  
  11.             org.springframework.web.servlet.DispatcherServlet   
  12.         servlet-class>  
  13.         <load-on-startup>1load-on-startup>  
  14.     servlet>  
  15.   
  16.     <servlet-mapping>  
  17.         <servlet-name>springPDFTestservlet-name>  
  18.         <url-pattern>*.shtmlurl-pattern>  
  19.     servlet-mapping>  
  20.   
  21.     <welcome-file-list>  
  22.         <welcome-file>index.jspwelcome-file>  
  23.     welcome-file-list>  
  24.   
  25. web-app>  

3)index.jsp

<href="viewPDF.shtml">PDF视图打开 a>
<br>
<href="viewExcel.shtml">Excel视图打开a>
 
主题:封装对excel的操作,包括本地读写excel和流中输出excel
http://www.iteye.com/topic/647378
 
主题:生成Excel并在客户端下载的JSF实现
http://www.iteye.com/topic/132810