spring 生成Excel和PDF文件

本文介绍如何使用Spring框架动态生成PDF和Excel文件。通过继承Spring提供的抽象类并实现特定方法,可以轻松创建这两种类型的文件。文章提供了完整的代码示例,包括控制器配置、视图子类化及必要的依赖。
HTML页面并不总是向用户显示数据输出的最好方式,有时候需要生成不可改变的文件打印,PDF可能是种不错的选择。

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

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

下面是测试项目代码:


1、控制器配置代码
None.gif<?xml version="1.0" encoding="UTF-8"?>
None.gif
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
None.gif
None.gif
<beans>
None.gif    
<bean id="beanNameViewResolver"
None.gif        class
="org.springframework.web.servlet.view.BeanNameViewResolver" />
None.gif
None.gif    
<bean id="viewController" class="com.zhupan.spring.ViewController" />
None.gif    
<bean id="urlMapping"
None.gif        class
="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
None.gif        
<property name="mappings">
None.gif            
<props>
None.gif                
<prop key="/view*.shtml">viewController</prop>
None.gif            
</props>
None.gif        
</property>
None.gif    
</bean>
None.gif
</beans>
None.gif

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

InBlock.gif
ExpandedSubBlockEnd.gif  }

InBlock.gif  
ExpandedBlockEnd.gif}

None.gif

4、用于PDF视图的视图子类化
需要象下面一样继承org.springframework.web.servlet.view.document.AbstractPdfView,并实现buildPdfDocument()方法。
None.gifpackage com.zhupan.view;
None.gif
None.gif
import java.util.List;
None.gif
import java.util.Map;
None.gif
None.gif
import javax.servlet.http.HttpServletRequest;
None.gif
import javax.servlet.http.HttpServletResponse;
None.gif
None.gif
import org.springframework.web.servlet.view.document.AbstractPdfView;
None.gif
None.gif
import com.lowagie.text.Document;
None.gif
import com.lowagie.text.Paragraph;
None.gif
import com.lowagie.text.pdf.PdfWriter;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public class ViewPDF extends AbstractPdfView dot.gif{
InBlock.gif    
public void buildPdfDocument(Map model, Document document,
InBlock.gif            PdfWriter writer, HttpServletRequest request,
ExpandedSubBlockStart.gifContractedSubBlock.gif            HttpServletResponse response) 
throws Exception dot.gif{
InBlock.gif
InBlock.gif        List list 
= (List) model.get("list");
InBlock.gif
InBlock.gif        
for (int i = 0; i < list.size(); i++)
InBlock.gif            document.add(
new Paragraph((String) list.get(i)));
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
5、其他文件
1)控制器ViewController
None.gifpackage com.zhupan.spring;
None.gif
None.gif
import java.util.ArrayList;
None.gif
import java.util.HashMap;
None.gif
import java.util.List;
None.gif
import java.util.Map;
None.gif
None.gif
import javax.servlet.http.HttpServletRequest;
None.gif
import javax.servlet.http.HttpServletResponse;
None.gif
None.gif
import org.springframework.web.servlet.ModelAndView;
None.gif
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
None.gif
None.gif
import com.zhupan.view.ViewExcel;
None.gif
import com.zhupan.view.ViewPDF;
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public class ViewController extends MultiActionControllerdot.gif{
InBlock.gif     
ExpandedSubBlockStart.gifContractedSubBlock.gif     
public ModelAndView viewPDF(HttpServletRequest request, HttpServletResponse response) throws Exception dot.gif{
InBlock.gif       List list 
= new ArrayList();
InBlock.gif       Map model
=new HashMap();
InBlock.gif       list.add(
"test1");
InBlock.gif       list.add(
"test2");
InBlock.gif       model.put(
"list",list);
InBlock.gif       ViewPDF viewPDF
=new ViewPDF();
InBlock.gif       
return new ModelAndView(viewPDF,model);
ExpandedSubBlockEnd.gif  }

InBlock.gif     
ExpandedSubBlockStart.gifContractedSubBlock.gif      
public ModelAndView viewExcel(HttpServletRequest request, HttpServletResponse response) throws Exception dot.gif{
InBlock.gif            List list 
= new ArrayList();
InBlock.gif        Map model
=new HashMap();
InBlock.gif        list.add(
"test1");
InBlock.gif        list.add(
"test2");
InBlock.gif        model.put(
"list",list);
InBlock.gif        ViewExcel viewExcel
=new ViewExcel();
InBlock.gif        
return new ModelAndView(viewExcel,model);
ExpandedSubBlockEnd.gif      }

ExpandedBlockEnd.gif}
2)web.xml
None.gif<?xml version="1.0" encoding="UTF-8"?>
None.gif
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
None.gif    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
None.gif    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
None.gif    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
None.gif
None.gif    
<display-name>springPDFTest</display-name>
None.gif    
<servlet>
None.gif        
<servlet-name>springPDFTest</servlet-name>
None.gif        
<servlet-class>
None.gif            org.springframework.web.servlet.DispatcherServlet
None.gif        
</servlet-class>
None.gif        
<load-on-startup>1</load-on-startup>
None.gif    
</servlet>
None.gif
None.gif    
<servlet-mapping>
None.gif        
<servlet-name>springPDFTest</servlet-name>
None.gif        
<url-pattern>*.shtml</url-pattern>
None.gif    
</servlet-mapping>
None.gif
None.gif    
<welcome-file-list>
None.gif        
<welcome-file>index.jsp</welcome-file>
None.gif    
</welcome-file-list>
None.gif
None.gif
</web-app>
None.gif

3)index.jsp
ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ page contentType="text/html; charset=gb2312"%>
None.gif
None.gif
<href="viewPDF.shtml">PDF视图打开 </a>
None.gif
<br>
None.gif
<href="viewExcel.shtml">Excel视图打开</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值