e代劍客——溫柔一刀

          生活就像海洋,只有意志堅強的人,才能到達彼岸

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            76 隨筆 :: 7 文章 :: 215 評論 :: 0 Trackbacks

          隨筆分類(78)

          隨筆檔案(76)

          java源碼

          友情連接

          開發文檔

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          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-04 12:11 溫柔一刀 閱讀(7323) 評論(7)  編輯  收藏 所屬分類: 開源框架

          評論

          # re: spring 生成Excel和PDF文件 2006-10-15 17:06 曲靜波
          有個問題,如果不用spring的controller或改成struts的action或servlet可以使用viewPdf 和 viewExcel嗎?  回復  更多評論
            

          # re: spring 生成Excel和PDF文件 2006-10-16 08:52 溫柔一刀
          @曲靜波
          直接是不可以的
          因為它們都extends AbstractPdfView
          而AbstractPdfView是spring提供的
          org.springframework.web.servlet.view.document.AbstractExcelView
          如果要用的話就得把spring的包導入項目  回復  更多評論
            

          # re: spring 生成Excel和PDF文件 2007-04-04 15:12 yangaries
          我把它部署在Eclipse中,為什么單擊“Excel視圖打開”后提示“Servlet springPDFTest is not available”呢?
            回復  更多評論
            

          # re: spring 生成Excel和PDF文件 2007-04-04 16:40 yangaries
          解決了,jar包放錯地方了,呵呵。
          能解釋一下在位置文件中控制是怎樣傳遞的么?  回復  更多評論
            

          # re: spring 生成Excel和PDF文件[未登錄] 2008-10-21 17:55 michael
          請問樓上的,我也遇到同樣的問題了,你能不能告訴我詳細點的解決方案呢  回復  更多評論
            

          # re: spring 生成Excel和PDF文件[未登錄] 2008-10-21 17:59 michael
          17:05:32,125 INFO [STDOUT] 2008-10-21 17:05:32,109 [main] ERROR org.springframe
          work.web.servlet.DispatcherServlet - Context initialization failed
          org.springframework.beans.factory.BeanDefinitionStoreException: IOException pars
          ing XML document from ServletContext resource [/WEB-INF/springPDFTest-servlet.xm
          l]; nested exception is java.io.FileNotFoundException: Could not open ServletCon
          text resource [/WEB-INF/springPDFTest-servlet.xml]
          Caused by:
          java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/
          springPDFTest-servlet.xml]
          ------------------------------
          這個是JBOSS的錯誤信息  回復  更多評論
            

          # re: spring 生成Excel和PDF文件 2010-03-10 16:07 XT
          在 使用 Excel視圖打開 的時候有中文亂碼問題,
          搞了半天都沒解決 ,樓主,再麻煩一下  回復  更多評論
            

          聯系偶 zhupanjava@gmail.com 溫柔一刀
          主站蜘蛛池模板: 平果县| 汕头市| 唐山市| 璧山县| 西华县| 屯留县| 邵阳县| 武鸣县| 本溪| 禹城市| 潼南县| 佛冈县| 康马县| 麟游县| 纳雍县| 福鼎市| 武乡县| 阿拉善左旗| 普兰县| 加查县| 永善县| 中山市| 龙游县| 道真| 弥勒县| 虞城县| 海兴县| 田林县| 临城县| 金阳县| 北宁市| 五指山市| 葫芦岛市| 安岳县| 仲巴县| 岫岩| 博客| 利辛县| 松江区| 垦利县| 濉溪县|