随笔-314  评论-209  文章-0  trackbacks-0
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((
short12);
       
       
       HSSFCell cell 
= getCell(sheet, 00);
       setText(cell, 
"Spring Excel test");
  
       HSSFCellStyle dateStyle 
= workbook.createCellStyle();
       dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(
"m/d/yy"));
       cell 
= getCell(sheet, 10);
       cell.setCellValue(
new Date());
       cell.setCellStyle(dateStyle);
       getCell(sheet, 
20).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"%>

<href="viewPDF.shtml">PDF视图打开 </a>
<br>
<href="viewExcel.shtml">Excel视图打开</a>
posted on 2006-10-06 15:07 xzc 阅读(804) 评论(0)  编辑  收藏 所属分类: Spring

只有注册用户登录后才能发表评论。


网站导航: