HTML頁面并不總是向用戶顯示數據輸出的最好方式,有時候需要生成不可改變的文件打印,PDF可能是種不錯的選擇。
Spring支持從數據動態生成PDF或Excel文件
下面這個簡單實現的例子實現了spring輸出PDF和Excel文件,為了使用Excel電子表格,你需要在你的classpath中加入poi-2.5.1.jar庫文件,而對PDF文件,則需要iText.jar文件。它們都包含在Spring的主發布包中。
下面是測試項目代碼:
1、控制器配置代碼
<?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">viewController</prop>
????????????</props>
????????</property>
????</bean>
</beans>

?3、用于Excel視圖的視圖子類化
為了在生成輸出文檔的過程中實現定制的行為,我們將繼承合適的抽象類。對于Excel,這包括提供一個 org.springframework.web.servlet.view.document.AbstractExcelView的子類,并實現 buildExcelDocument方法。
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()方法。
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
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?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>springPDFTest</display-name>
????<servlet>
????????<servlet-name>springPDFTest</servlet-name>
????????<servlet-class>
????????????org.springframework.web.servlet.DispatcherServlet
????????</servlet-class>
????????<load-on-startup>1</load-on-startup>
????</servlet>

????<servlet-mapping>
????????<servlet-name>springPDFTest</servlet-name>
????????<url-pattern>*.shtml</url-pattern>
????</servlet-mapping>

????<welcome-file-list>
????????<welcome-file>index.jsp</welcome-file>
????</welcome-file-list>

</web-app>

3)index.jsp

<%
@?page?contentType="text/html;?charset=gb2312"%>

<a?href="viewPDF.shtml">PDF視圖打開?</a>
<br>
<a?href="viewExcel.shtml">Excel視圖打開</a>
posted on 2006-10-06 15:07
xzc 閱讀(807)
評論(0) 編輯 收藏 所屬分類:
Spring