spring 生成Excel和PDF文件

          HTML頁(yè)面并不總是向用戶顯示數(shù)據(jù)輸出的最好方式,有時(shí)候需要生成不可改變的文件打印,PDF可能是種不錯(cuò)的選擇。

          Spring支持從數(shù)據(jù)動(dòng)態(tài)生成PDF或Excel文件

          下面這個(gè)簡(jiǎn)單實(shí)現(xiàn)的例子實(shí)現(xiàn)了spring輸出PDF和Excel文件,為了使用Excel電子表格,你需要在你的classpath中加入poi-2.5.1.jar庫(kù)文件,而對(duì)PDF文件,則需要iText.jar文件。它們都包含在Spring的主發(fā)布包中。

          下面是測(cè)試項(xiàng)目代碼:


          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視圖的視圖子類(lèi)化
          為了在生成輸出文檔的過(guò)程中實(shí)現(xiàn)定制的行為,我們將繼承合適的抽象類(lèi)。對(duì)于Excel,這包括提供一個(gè) org.springframework.web.servlet.view.document.AbstractExcelView的子類(lèi),并實(shí)現(xiàn) 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視圖的視圖子類(lèi)化
          需要象下面一樣繼承org.springframework.web.servlet.view.document.AbstractPdfView,并實(shí)現(xiàn)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視圖打開(kāi)?</a>
          <br>
          <a?href="viewExcel.shtml">Excel視圖打開(kāi)</a>


          posted on 2006-10-07 13:29 nbt 閱讀(646) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Spring框架

          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          相冊(cè)

          收藏夾

          Java技術(shù)網(wǎng)站

          友情鏈接

          國(guó)內(nèi)一些開(kāi)源網(wǎng)站

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 柘城县| 宁城县| 昔阳县| 视频| 莆田市| 陆良县| 天镇县| 永城市| 凤山县| 香格里拉县| 鄂托克前旗| 双辽市| 梅河口市| 垦利县| 普兰店市| 无为县| 岢岚县| 保德县| 宝兴县| 遂川县| 通道| 诏安县| 建昌县| 凌云县| 建宁县| 淳化县| 长葛市| 吴忠市| 南通市| 荔浦县| 新闻| 桐城市| 新乡市| 米易县| 玛曲县| 石柱| 牙克石市| 武义县| 驻马店市| 长武县| 马尔康县|