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
>
Spring支持从数据动态生成PDF或Excel文件
下面这个简单实现的例子实现了spring输出PDF和Excel文件,为了使用Excel电子表格,你需要在你的classpath中加入poi-2.5.1.jar库文件,而对PDF文件,则需要iText.jar文件。它们都包含在Spring的主发布包中。
下面是测试项目代码:
1、控制器配置代码


















3、用于Excel视图的视图子类化
为了在生成输出文档的过程中实现定制的行为,我们将继承合适的抽象类。对于Excel,这包括提供一个 org.springframework.web.servlet.view.document.AbstractExcelView的子类,并实现 buildExcelDocument方法。




















































4、用于PDF视图的视图子类化
需要象下面一样继承org.springframework.web.servlet.view.document.AbstractPdfView,并实现buildPdfDocument()方法。































1)控制器ViewController







































































3)index.jsp








评论
直接是不可以的
因为它们都extends AbstractPdfView
而AbstractPdfView是spring提供的
org.springframework.web.servlet.view.document.AbstractExcelView
如果要用的话就得把spring的包导入项目 回复 更多评论