Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.
在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况。有时候也需要导出pdf或者CSV报表。其实原理都差不多。刚开始本来不打算也这篇博客介绍这个的。感觉这篇博客和前面的博客有点雷同。原理基本都一样。但想了想。有时候可能有些童鞋遇到这样的需求会无从下手。所以还是记录下来。帮助一下那些需要这个需求的童鞋。如果你对前面几篇博客的原理都搞明白了。这篇博客你完全可以不看了。仅仅只是代码的实现不同而已。好了。下面我们来看一下需求吧。
这个图就是我们的需求
就像你看到的一样。我们的需求就是列表内容是从数据库中读出来的。而我们想把从数据库得到的这个列表导出pdf、csv、excel报表。也不多说了。看代码吧:
- <pre code_snippet_id="630890" snippet_file_name="blog_20150329_1_746209" name="code" class="java">package com.bzu.csh;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.OutputStream;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import jxl.Workbook;
- import jxl.write.Label;
- import jxl.write.WritableFont;
- import jxl.write.WritableSheet;
- import jxl.write.WritableWorkbook;
- import org.apache.struts2.ServletActionContext;
- import com.lowagie.text.Document;
- import com.lowagie.text.Element;
- import com.lowagie.text.Font;
- import com.lowagie.text.PageSize;
- import com.lowagie.text.Paragraph;
- import com.lowagie.text.pdf.PdfPTable;
- import com.lowagie.text.pdf.PdfWriter;
- import com.opensymphony.xwork2.Action;
- public class downloadAction implements Action {
- private String downType;
- public String getDownType() {
- return downType;
- }
- public void setDownType(String downType) {
- this.downType = downType;
- }
- public String execute() {
- // TODO Auto-generated method stub
- HttpServletRequest request = ServletActionContext.getRequest();
- //HttpServletResponse response = ServletActionContext.getResponse();
- //此处模拟数据库读出的数据。在真正的项目中。我们可以通过在session中保存的前端数据集合替换这里
- List<Person> list = new ArrayList<Person>();
- for (int i = 1; i < 6; i++) {
- Person person = new Person();
- person.setId(String.valueOf(i));
- person.setName(String.valueOf((char) (i + 64)));
- person.setAge(i + 20);
- person.setSex("man");
- list.add(person);
- }
- OutputStream os = null;
- String fname = "personlist";
- if ("PDF".equals(downType)) {
- try {
- // response.reset();
- // os = response.getOutputStream();
- FileOutputStream out = new FileOutputStream("d://a.pdf");
- Document document = new Document(PageSize.A4, 50, 50, 50, 50);
- // response.setContentType("application/pdf");
- // response.setHeader("Content-disposition",
- // "attachment;filename=" + fname + ".pdf");
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- PdfWriter.getInstance(document, out);
- document.open();
- int cols = list.size();
- // 创建PDF表格
- PdfPTable table = new PdfPTable(4);
- // 设置pdf表格的宽度
- table.setTotalWidth(500);
- // 设置是否要固定其宽度
- table.setLockedWidth(true);
- // 表头字体
- Font thfont = new Font();
- // 设置表头字体的大小
- thfont.setSize(7);
- // 设置表头字体的样式
- thfont.setStyle(Font.BOLD);
- Font tdfont = new Font();
- tdfont.setSize(7);
- tdfont.setStyle(Font.NORMAL);
- // 设置水平对齐方式
- table.setHorizontalAlignment(Element.ALIGN_MIDDLE);
- // 设置table的header
- table.addCell(new Paragraph("id", thfont));
- table.addCell(new Paragraph("name", thfont));
- table.addCell(new Paragraph("sex", thfont));
- table.addCell(new Paragraph("age", thfont));
- // 循环设置table的每一行
- for (int i = 0; i < list.size(); i++) {
- Person p = (Person) list.get(i);
- table.addCell(new Paragraph(p.getId(), tdfont));
- table.addCell(new Paragraph(p.getName(), tdfont));
- table.addCell(new Paragraph(p.getSex(), tdfont));
- table.addCell(new Paragraph(String.valueOf(p.getAge()),
- tdfont));
- }
- document.add(table);
- document.close();
- // baos.writeTo(response.getOutputStream());
- baos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else if ("CSV".equals(downType)) {
- // response.reset();
- // 生成csv文件
- //response.setHeader("Content-disposition", "attachment;filename="
- // + fname + ".csv");
- //response.setContentType("text/csv");
- //response.setCharacterEncoding("UTF-8");
- FileOutputStream out ;
- String sep = ",";
- try {
- out = new FileOutputStream(new File("d://a.cvs"));
- //out = response.getOutputStream();
- out.write("id".getBytes());
- out.write(sep.getBytes());
- out.write("name".getBytes());
- out.write(sep.getBytes());
- out.write("sex".getBytes());
- out.write(sep.getBytes());
- out.write("age".getBytes());
- out.write(sep.getBytes());
- out.write(System.getProperty("line.separator").getBytes());
- for (int i = 0; i < list.size(); i++) {
- Person p = (Person) list.get(i);
- out.write(p.getId().getBytes());
- out.write((sep + "/t").getBytes());
- out.write(p.getName().getBytes());
- out.write((sep + "/t").getBytes());
- out.write(p.getSex().getBytes());
- out.write((sep + "/t").getBytes());
- out.write(String.valueOf(p.getAge()).getBytes());
- out.write((sep + "/t").getBytes());
- out.write(sep.getBytes());
- out.write(System.getProperty("line.separator").getBytes());
- }
- out.flush();
- //out.cloute();
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else if (downType.equals("Excel")) {
- //response.reset();
- // 生成xls文件
- //response.setContentType("application/vnd.ms-excel");
- //response.setHeader("Content-disposition", "attachment;filename="
- // + fname + ".xls");
- try {
- //os = response.getOutputStream();
- Label l = null;
- WritableWorkbook wbook = Workbook.createWorkbook(new File(
- "d://a.xls"));
- // 写sheet名称
- WritableSheet sheet = wbook.createSheet("my excel file", 0);
- jxl.write.WritableFont wfc4 = new jxl.write.WritableFont(
- WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false,
- jxl.format.UnderlineStyle.NO_UNDERLINE,
- jxl.format.Colour.BLACK);
- jxl.write.WritableCellFormat wcfFC4 = new jxl.write.WritableCellFormat(
- wfc4);
- wcfFC4.setBackground(jxl.format.Colour.LIGHT_GREEN);
- int col = 0;
- sheet.setColumnView(col, 12);
- l = new Label(col, 0, "id", wcfFC4);
- sheet.addCell(l);
- col++;
- sheet.setColumnView(col, 12);
- l = new Label(col, 0, "name", wcfFC4);
- sheet.addCell(l);
- col++;
- sheet.setColumnView(col, 12);
- l = new Label(col, 0, "sex", wcfFC4);
- sheet.addCell(l);
- col++;
- sheet.setColumnView(col, 12);
- l = new Label(col, 0, "age", wcfFC4);
- sheet.addCell(l);
- // 设置字体样式
- jxl.write.WritableFont wfc5 = new jxl.write.WritableFont(
- WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false,
- jxl.format.UnderlineStyle.NO_UNDERLINE,
- jxl.format.Colour.BLACK);
- jxl.write.WritableCellFormat wcfFC5 = new jxl.write.WritableCellFormat(
- wfc5);
- for (int i = 0; i < list.size(); i++) {
- Person p = (Person) list.get(i);
- int j = 0;
- l = new Label(j, i + 1, p.getId(), wcfFC5);
- sheet.addCell(l);
- j++;
- l = new Label(j, i + 1, p.getName(), wcfFC5);
- sheet.addCell(l);
- j++;
- l = new Label(j, i + 1, p.getSex(), wcfFC5);
- sheet.addCell(l);
- j++;
- l = new Label(j, i + 1, String.valueOf(p.getAge()), wcfFC5);
- sheet.addCell(l);
- j++;
- }
- // 写入流中
- wbook.write();
- wbook.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return SUCCESS;
- }
- }
- </pre><br><br>
操作很简单。选择好要导出的报表格式。点击导出按钮。我们在d盘相应的位置就会生成相应的报表。
OK,介绍完毕。希望可以帮助有这个需求的朋友。
------------------------------------------------------------------------------------------------------------
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载
http://blog.csdn.NET/csh624366188/article/details/7999247
from: http://blog.csdn.net/csh624366188/article/details/8207600
Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.相关推荐
- Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...
- Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)
写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
首先声明一下,刚开始学习Java网络通信编程就对他有一种畏惧感,因为自己对网络一窍不通,所以...呵呵..你懂得,昨天又仔细的学习了一遍,感觉其实java网络编程也没想象的那么难,不信,咱一起看看.. ...
- Java程序员从笨鸟到菜鸟之(十二)java异常处理机制
异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...
- Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解
注:由于本人不大习惯注解方式,所以讲解完这里的注解实现基本配置之后,以后就不再单独把注解拿出来讲解了. 五:spring注解 1.准备工作 (1)导入common-annotations.jar (2 ...
- Java程序员从笨鸟到菜鸟之(序言)+全部链接
http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,除去前半年几乎全玩了, ...
- Java程序员从笨鸟到菜鸟之——总结和声明
前段时间经过大约二十天的时间把javaSE的内容总结了一下,最近由于个人原因和一些乱七八糟的事情,一直没在更新,首先感谢那些一如既往支持我的朋友.最近不知道为什么,一直很懒,做东西也一直是效率很低,生 ...
- Java程序员从笨鸟到菜鸟全部博客目录
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...
- Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...
- Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice
在日常开发中,常用的webservice引擎主要有Axis,axis2,Xfire以及cxf(Xfire的升级版).现在只有axis2和cxf官方有更新.今天我们先以一个比较老的引擎为例.来讲诉一下w ...
最新文章
- React-Native 使用真机和指定模拟器调试
- GitHub 大热!也许会成为你心中的OCR开源工具NO1!
- 数据库MySQL/mariadb知识点——操作篇(2)库管理语句
- puppet应用原理及安装部署
- c和c++的结构体使用
- hdu 3016 Man Down
- ODPS技术架构及应用实践
- 服务器c盘windows文件夹太大,Win10C盘windows文件夹过大怎么办?Win10C盘windows文件夹过大的解决方法...
- 关于小微商户反欺诈监控指标的内容参考
- Spark入门实战系列--6.SparkSQL(下)--Spark实战应用
- (转)iOS-蓝牙学习资源博文收集
- ad怎么修改栅格_AD18怎么改变pcb原理图的网格大小
- linux kvm装ghost镜像,kvm安装win7虚拟机
- 微信小程序 简单动画入门
- 【转】Windows Error code (Windows错误码说明)
- 为什么便利店晚上顾客很少?还要24小时营业?
- android 常用机型尺寸_安卓手机屏幕多大合适?6.4英寸是“黄金尺寸”吗?
- python语言属于科学计算语言吗_python语言属于( )
- php数据迁移脚本,Laravel中数据迁移与数据填充的详细步骤
- 免费的天气API接口
热门文章
- transformers库的使用【二】tokenizer的使用,模型的保存自定义
- 国产 YI Tunnel 收银机器人如何秒杀日本自助收银方案
- 不是你无法入门自然语言处理(NLP),而是你没找到正确的打开
- 吴恩达:我们说人工智能时,实际在说些什么?
- Spring Cloud【Finchley】-15 查看Zuul的路由端点和过滤器
- Activity启动模式完全解读-更新中
- Linux keypad 设备树,SC7731客户配置文档.pdf
- 爬虫学习笔记(七)——Scrapy框架(二):Scrapy shell、选择器
- 学习笔记——使用下划线命名的规则
- h5 socket.io java,从HTML5 WebSocket到Socket.io