`
zzc1684
  • 浏览: 1231087 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

用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"
onclick="javascript:window.open('<%=path %>/view.form?method=exceltest');"/>

 以上代码是基于spring2.5,JDK1.5,tomcat1.5测试通过。

分享到:
评论

相关推荐

    OpenCV部署YOLOv5-pose人体姿态估计(C++和Python双版本).zip

    OpenCV部署YOLOv5-pose人体姿态估计(C++和Python双版本).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    ARIMA+Transformer+LSTM心跳时间序列预测模型源码+设计文档(课设新开发项目).zip

    ARIMA+Transformer+LSTM心跳时间序列预测模型源码+设计文档(课设新开发项目).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    体育馆管理系统(代码+数据库+LW)

    摘  要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系

    基于HTML、TypeScript、JavaScript的全面运动健康手环App设计源码

    该项目是一款基于HTML、TypeScript和JavaScript全面构建的运动健康手环App设计源码,包含263个文件,涵盖124个TypeScript文件、93个SVG文件、10个JSON文件、10个PNG图片文件、9个JSON5文件、8个HTML文件、4个TS文件、2个gitignore文件和1个hvigorw文件。该App专注于提供全面的运动健康追踪功能,适用于追求健康生活方式的用户。

    2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip

    2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    【锂电池剩余寿命预测】CNN卷积神经网络锂电池剩余寿命预测,马里兰大学锂电池数据集(Pytorch完整源码和数据)

    1.【锂电池剩余寿命预测】CNN卷积神经网络锂电池剩余寿命预测,马里兰大学锂电池数据集(Pytorch完整源码和数据) 2.数据集:马里兰大学锂电池数据集,已经处理好; 3.环境准备:python 3.8 , pytorch 1.8 版本及其以上,代码格式ipynb文件,可读性强; 4.模型描述:CNN-Transformer在各种各样的问题上表现非常出色,现在被广泛使用。 5.领域描述:近年来,随着锂离子电池的能量密度、功率密度逐渐提升,其安全性能与剩余使用寿命预测变得愈发重要。本代码实现了CNN卷积神经网络在该领域的应用。 6.作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。

    企业微信社群规划运营全流程SOP.xlsx

    企业微信社群规划运营全流程SOP.xlsx

    基于Django自动化测试管理系统python源码+设计报告(高分项目).zip

    Django自动化测试管理系统python源码+设计报告(高分项目).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    同时语音翻译领域中大规模语言模型的应用与突破-CLASI系统研究

    内容概要:本文介绍了一个全新的名为CLASI(Cross Language Agent-Simultaneous Interpretation)的大规模语言模型(LLM),用于高质量和类似人工的实时语音同步翻译。CLASI模拟人类专业译员的方法,运用读写策略平衡质量和延迟,并利用跨模态检索生成增强型翻译结果。此外,引入了一个新的人工评估指标有效信息比例(VIP)。通过广泛的实验验证表明,无论是在常见的商业基准数据集上,还是在复杂多变的真实应用场景里,CLASI均显著超越现有最先进水平。特别地,针对中文到英文和反向翻译任务中,CLASI的VIP得分分别达到81.3%和78.0%,远高于其他已知的最佳性能系统。 适合人群:从事机器翻译和自然语言处理的研究人员和技术开发者;关注AI技术特别是深度学习、大规模预训练模型领域的科研工作者及从业者。 使用场景及目标:旨在开发高效能的同时语音翻译系统,在跨国会议、在线教育等多个领域提供无缝的语言交流解决方案,提升用户体验,弥合不同语言间的沟通鸿沟,推进全球化进程。该研究也为后续优化同时翻译系统的响应时间及质量提供了有益启示。 其他说明:本文提出了多项技术创新点,如多任务连续训练、情景学习能力强化等。这些贡献为未来改进和完善此类模型指明方向,有助于推动整个行业的进步与发展。

    迅雷精简迷你版本ThunderMini1.5.3.288

    迅雷精简迷你版本ThunderMini1.5.3.288

    CentOS搭建LAMP平台Web控制面板管理中文最新版本

    LAMP组合是指在Linux操作系统上部署Apache服务器、MySQL服务器以及PHP应用程序服务器,从而构建一个功能强大的Web动态网站开发平台。Apache作为全球排名第一的Web服务器软件,与PHP和MySQL的组合已成为Web服务器配置的一种标准。Webmin是一款基于Web界面的Linux系统管理工具,它允许用户通过Web控制面板来管理Linux系统上的各种服务。Webmin的模块化架构支持用户根据需要编写自定义的配置模块。本章将介绍如何修改模块以管理Web服务,对此感兴趣的读者可以进一步了解。

Global site tag (gtag.js) - Google Analytics