读书人

生成Excel 跟PDF报表

发布时间: 2012-10-09 10:21:45 作者: rapoo

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

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

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

下面是测试项目代码:


1、控制器配置代码

xml 代码

    xml?version="1.0"?encoding="UTF-8"?>?? DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">?? ?? <beans>?? ????<bean?id="beanNameViewResolver"?? ????????class="org.springframework.web.servlet.view.BeanNameViewResolver"?/>?? ?? ????<bean?id="viewController"?class="com.zhupan.spring.ViewController"?/>?? ????<bean?id="urlMapping"?? ????????class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">?? ????????<property?name="mappings">?? ????????????<props>?? ????????????????<prop?key="/view*.shtml">viewControllerprop>?? ????????????props>?? ????????property>?? ????bean>?? beans>??

?3、用于Excel视图的视图子类化
为了在生成输出文档的过程中实现定制的行为,我们将继承合适的抽象类。对于Excel,这包括提供一个 org.springframework.web.servlet.view.document.AbstractExcelView的子类,并实现 buildExcelDocument方法。
java 代码
    package?com.zhupan.view; ?? ?? import?java.util.Date; ?? import?java.util.Map; ?? import?javax.servlet.http.HttpServletRequest; ?? import?javax.servlet.http.HttpServletResponse; ?? ?? import?org.apache.poi.hssf.usermodel.HSSFCell; ?? import?org.apache.poi.hssf.usermodel.HSSFCellStyle; ?? import?org.apache.poi.hssf.usermodel.HSSFDataFormat; ?? import?org.apache.poi.hssf.usermodel.HSSFRow; ?? import?org.apache.poi.hssf.usermodel.HSSFSheet; ?? import?org.apache.poi.hssf.usermodel.HSSFWorkbook; ?? import?org.springframework.web.servlet.view.document.AbstractExcelView; ?? ?? public?class?ViewExcel?extends?AbstractExcelView?{ ?? ?? ????public?void?buildExcelDocument(Map?model,?HSSFWorkbook?workbook, ?? ????????????HttpServletRequest?request,?HttpServletResponse?response) ?? ????????????throws?Exception?{ ?? ?? ????????HSSFSheet?sheet?=?workbook.createSheet("list"); ?? ????????sheet.setDefaultColumnWidth((short)?12); ?? ?? ????????HSSFCell?cell?=?getCell(sheet,?0,?0); ?? ????????setText(cell,?"Spring?Excel?test"); ?? ?? ????????HSSFCellStyle?dateStyle?=?workbook.createCellStyle(); ?? ????????dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); ?? ????????cell?=?getCell(sheet,?1,?0); ?? ????????cell.setCellValue(new?Date()); ?? ????????cell.setCellStyle(dateStyle); ?? ????????getCell(sheet,?2,?0).setCellValue(458); ?? ?? ????????HSSFRow?sheetRow?=?sheet.createRow(3); ?? ????????for?(short?i?=?0;?i?<?10;?i++)?{ ?? ????????????sheetRow.createCell(i).setCellValue(i?*?10); ?? ????????} ?? ?? ????} ?? ?? }??

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

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

读书人网 >PowerDesigner

热点推荐