用spring MVC 生成Excel和PDF

HTML页面并不总是向用户显示数据输出的最好方式,Spring支持从数据动态生成PDF或Excel文件,并使这一过程变得简单。文档本身就是视图,从服务器以流的方式加上内容类型返回文档,客户端PC只要运行电子表格软件或PDF浏览软件就可以浏览。下面是一个简单实现的例子:界面两个button,一个实现excel ,一个pdf.为了使用Excel电子表格,你需要在你的classpath中加入‘poi’库文件,而对PDF文件,则需要iText.jar文件。它们都包含在Spring的主发布包中。另外经过测试还需要加入包spring-beans.jar,spring-context.jar,spring-web.jar,spring-webmvc.jar。

1、web.xml配置文件,主要配置相应的servlet即可
<!-- Spring MVC 的Servlet,它将加载WEB-INF/spring-servlet.xml 以启动Spring MVC模块-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.form</url-pattern>
  </servlet-mapping>

2、控制文件及spring-servlet.xml配置,增加ViewController的配置
  <!-- 生成excel或pdf视图 -->
  <bean class="com.lzk.controller.ViewController">
  </bean>

3、ViewController的代码
package com.lzk.controller;

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.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.supcon.electronic.its.common.ViewExcel;
import com.supcon.electronic.its.common.ViewPDF;
/**
* 生成excel或PDF类型试图
* 根据参数进行数据组装,并跳转到相应的视图页面
* View Controller Bean<br>
*
* @author Tony Lin Created on 2008-10-22
* @version Version 1.0
*/

@Controller
@RequestMapping("/view.form")
public class ViewController extends BaseController {

@RequestMapping(params="method=exceltest",method=RequestMethod.GET)
public ModelAndView viewExcel(HttpServletRequest request, HttpServletResponse response){
  log.debug("ViewController.viewExcel is started......");
  List list = new ArrayList();   
        Map model = new HashMap();   
        list.add("test1");   
        list.add("test2");   
        model.put("list", list);   
        ViewExcel viewExcel = new ViewExcel();   
        log.debug("ViewController.viewExcel is ended......");
        return new ModelAndView(viewExcel, model); 
}

@RequestMapping(params="method=pdftest",method=RequestMethod.GET)
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);   
    }   
}

4、用于Excel视图的视图子类
package com.lzk.common;
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;
/**
* 生成excel视图,可用excel工具打开或者保存
* 由ViewController的return new ModelAndView(viewExcel, model)生成
* @author Tony Lin Created on 2008-10-22
* @version Version 1.0
*/
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("mm/dd/yyyy"));   
        cell = getCell(sheet, 1, 0);   
        cell.setCellValue("日期:2008-10-23");   
        //cell.setCellStyle(dateStyle);   
        getCell(sheet, 2, 0).setCellValue("测试1");  
        getCell(sheet, 2, 1).setCellValue("测试2"); 
  
        HSSFRow sheetRow = sheet.createRow(3);   
        for (short i = 0; i < 10; i++) {   
            sheetRow.createCell(i).setCellValue(i * 10);   
        }   
  
    }   
}

5、用于PDF视图的视图子类
package lzk.common;
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;
/**
* 生成PDF视图,可用PDF浏览器打开或者保存
* 由ViewController的return new ModelAndView(viewPDF, model)生成
* @author Tony Lin Created on 2008-10-22
* @version Version 1.0
*/
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)));   
    }   


6、JSP页面调用
<a href="<%=path %>/view.form?method=pdftest" target="blank">保存pdf</a>
<input name="button" type="button" id="button" value="保存excel" 
οnclick="javascript:window.open('<%=path %>/view.form?method=exceltest');"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值