在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况。有时候也需要导出pdf或者CSV报表。其实原理都差不多。刚开始本来不打算也这篇博客介绍这个的。感觉这篇博客和前面的博客有点雷同。原理基本都一样。但想了想。有时候可能有些童鞋遇到这样的需求会无从下手。所以还是记录下来。帮助一下那些需要这个需求的童鞋。如果你对前面几篇博客的原理都搞明白了。这篇博客你完全可以不看了。仅仅只是代码的实现不同而已。好了。下面我们来看一下需求吧。

这个图就是我们的需求

就像你看到的一样。我们的需求就是列表内容是从数据库中读出来的。而我们想把从数据库得到的这个列表导出pdf、csv、excel报表。也不多说了。看代码吧:

[java] view plaincopy print?
  1. <pre code_snippet_id="630890" snippet_file_name="blog_20150329_1_746209" name="code" class="java">package com.bzu.csh;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.OutputStream;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import jxl.Workbook;
  11. import jxl.write.Label;
  12. import jxl.write.WritableFont;
  13. import jxl.write.WritableSheet;
  14. import jxl.write.WritableWorkbook;
  15. import org.apache.struts2.ServletActionContext;
  16. import com.lowagie.text.Document;
  17. import com.lowagie.text.Element;
  18. import com.lowagie.text.Font;
  19. import com.lowagie.text.PageSize;
  20. import com.lowagie.text.Paragraph;
  21. import com.lowagie.text.pdf.PdfPTable;
  22. import com.lowagie.text.pdf.PdfWriter;
  23. import com.opensymphony.xwork2.Action;
  24. public class downloadAction implements Action {
  25. private String downType;
  26. public String getDownType() {
  27. return downType;
  28. }
  29. public void setDownType(String downType) {
  30. this.downType = downType;
  31. }
  32. public String execute() {
  33. // TODO Auto-generated method stub
  34. HttpServletRequest request = ServletActionContext.getRequest();
  35. //HttpServletResponse response = ServletActionContext.getResponse();
  36. //此处模拟数据库读出的数据。在真正的项目中。我们可以通过在session中保存的前端数据集合替换这里
  37. List<Person> list = new ArrayList<Person>();
  38. for (int i = 1; i < 6; i++) {
  39. Person person = new Person();
  40. person.setId(String.valueOf(i));
  41. person.setName(String.valueOf((char) (i + 64)));
  42. person.setAge(i + 20);
  43. person.setSex("man");
  44. list.add(person);
  45. }
  46. OutputStream os = null;
  47. String fname = "personlist";
  48. if ("PDF".equals(downType)) {
  49. try {
  50. //  response.reset();
  51. //  os = response.getOutputStream();
  52. FileOutputStream out = new FileOutputStream("d://a.pdf");
  53. Document document = new Document(PageSize.A4, 50, 50, 50, 50);
  54. //  response.setContentType("application/pdf");
  55. //  response.setHeader("Content-disposition",
  56. //          "attachment;filename=" + fname + ".pdf");
  57. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  58. PdfWriter.getInstance(document, out);
  59. document.open();
  60. int cols = list.size();
  61. // 创建PDF表格
  62. PdfPTable table = new PdfPTable(4);
  63. // 设置pdf表格的宽度
  64. table.setTotalWidth(500);
  65. // 设置是否要固定其宽度
  66. table.setLockedWidth(true);
  67. // 表头字体
  68. Font thfont = new Font();
  69. // 设置表头字体的大小
  70. thfont.setSize(7);
  71. // 设置表头字体的样式
  72. thfont.setStyle(Font.BOLD);
  73. Font tdfont = new Font();
  74. tdfont.setSize(7);
  75. tdfont.setStyle(Font.NORMAL);
  76. // 设置水平对齐方式
  77. table.setHorizontalAlignment(Element.ALIGN_MIDDLE);
  78. // 设置table的header
  79. table.addCell(new Paragraph("id", thfont));
  80. table.addCell(new Paragraph("name", thfont));
  81. table.addCell(new Paragraph("sex", thfont));
  82. table.addCell(new Paragraph("age", thfont));
  83. // 循环设置table的每一行
  84. for (int i = 0; i < list.size(); i++) {
  85. Person p = (Person) list.get(i);
  86. table.addCell(new Paragraph(p.getId(), tdfont));
  87. table.addCell(new Paragraph(p.getName(), tdfont));
  88. table.addCell(new Paragraph(p.getSex(), tdfont));
  89. table.addCell(new Paragraph(String.valueOf(p.getAge()),
  90. tdfont));
  91. }
  92. document.add(table);
  93. document.close();
  94. //  baos.writeTo(response.getOutputStream());
  95. baos.close();
  96. } catch (Exception e) {
  97. e.printStackTrace();
  98. }
  99. } else if ("CSV".equals(downType)) {
  100. //  response.reset();
  101. // 生成csv文件
  102. //response.setHeader("Content-disposition", "attachment;filename="
  103. //      + fname + ".csv");
  104. //response.setContentType("text/csv");
  105. //response.setCharacterEncoding("UTF-8");
  106. FileOutputStream out ;
  107. String sep = ",";
  108. try {
  109. out = new FileOutputStream(new File("d://a.cvs"));
  110. //out = response.getOutputStream();
  111. out.write("id".getBytes());
  112. out.write(sep.getBytes());
  113. out.write("name".getBytes());
  114. out.write(sep.getBytes());
  115. out.write("sex".getBytes());
  116. out.write(sep.getBytes());
  117. out.write("age".getBytes());
  118. out.write(sep.getBytes());
  119. out.write(System.getProperty("line.separator").getBytes());
  120. for (int i = 0; i < list.size(); i++) {
  121. Person p = (Person) list.get(i);
  122. out.write(p.getId().getBytes());
  123. out.write((sep + "/t").getBytes());
  124. out.write(p.getName().getBytes());
  125. out.write((sep + "/t").getBytes());
  126. out.write(p.getSex().getBytes());
  127. out.write((sep + "/t").getBytes());
  128. out.write(String.valueOf(p.getAge()).getBytes());
  129. out.write((sep + "/t").getBytes());
  130. out.write(sep.getBytes());
  131. out.write(System.getProperty("line.separator").getBytes());
  132. }
  133. out.flush();
  134. //out.cloute();
  135. } catch (Exception e) {
  136. e.printStackTrace();
  137. }
  138. } else if (downType.equals("Excel")) {
  139. //response.reset();
  140. // 生成xls文件
  141. //response.setContentType("application/vnd.ms-excel");
  142. //response.setHeader("Content-disposition", "attachment;filename="
  143. //      + fname + ".xls");
  144. try {
  145. //os = response.getOutputStream();
  146. Label l = null;
  147. WritableWorkbook wbook = Workbook.createWorkbook(new File(
  148. "d://a.xls"));
  149. // 写sheet名称
  150. WritableSheet sheet = wbook.createSheet("my excel file", 0);
  151. jxl.write.WritableFont wfc4 = new jxl.write.WritableFont(
  152. WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false,
  153. jxl.format.UnderlineStyle.NO_UNDERLINE,
  154. jxl.format.Colour.BLACK);
  155. jxl.write.WritableCellFormat wcfFC4 = new jxl.write.WritableCellFormat(
  156. wfc4);
  157. wcfFC4.setBackground(jxl.format.Colour.LIGHT_GREEN);
  158. int col = 0;
  159. sheet.setColumnView(col, 12);
  160. l = new Label(col, 0, "id", wcfFC4);
  161. sheet.addCell(l);
  162. col++;
  163. sheet.setColumnView(col, 12);
  164. l = new Label(col, 0, "name", wcfFC4);
  165. sheet.addCell(l);
  166. col++;
  167. sheet.setColumnView(col, 12);
  168. l = new Label(col, 0, "sex", wcfFC4);
  169. sheet.addCell(l);
  170. col++;
  171. sheet.setColumnView(col, 12);
  172. l = new Label(col, 0, "age", wcfFC4);
  173. sheet.addCell(l);
  174. // 设置字体样式
  175. jxl.write.WritableFont wfc5 = new jxl.write.WritableFont(
  176. WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false,
  177. jxl.format.UnderlineStyle.NO_UNDERLINE,
  178. jxl.format.Colour.BLACK);
  179. jxl.write.WritableCellFormat wcfFC5 = new jxl.write.WritableCellFormat(
  180. wfc5);
  181. for (int i = 0; i < list.size(); i++) {
  182. Person p = (Person) list.get(i);
  183. int j = 0;
  184. l = new Label(j, i + 1, p.getId(), wcfFC5);
  185. sheet.addCell(l);
  186. j++;
  187. l = new Label(j, i + 1, p.getName(), wcfFC5);
  188. sheet.addCell(l);
  189. j++;
  190. l = new Label(j, i + 1, p.getSex(), wcfFC5);
  191. sheet.addCell(l);
  192. j++;
  193. l = new Label(j, i + 1, String.valueOf(p.getAge()), wcfFC5);
  194. sheet.addCell(l);
  195. j++;
  196. }
  197. // 写入流中
  198. wbook.write();
  199. wbook.close();
  200. } catch (Exception e) {
  201. e.printStackTrace();
  202. }
  203. }
  204. return SUCCESS;
  205. }
  206. }
  207. </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报表.相关推荐

  1. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  2. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  3. Java程序员从笨鸟到菜鸟之(十三)java网络通信编程

    首先声明一下,刚开始学习Java网络通信编程就对他有一种畏惧感,因为自己对网络一窍不通,所以...呵呵..你懂得,昨天又仔细的学习了一遍,感觉其实java网络编程也没想象的那么难,不信,咱一起看看.. ...

  4. Java程序员从笨鸟到菜鸟之(十二)java异常处理机制

    异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...

  5. Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解

    注:由于本人不大习惯注解方式,所以讲解完这里的注解实现基本配置之后,以后就不再单独把注解拿出来讲解了. 五:spring注解 1.准备工作 (1)导入common-annotations.jar (2 ...

  6. Java程序员从笨鸟到菜鸟之(序言)+全部链接

    http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,除去前半年几乎全玩了, ...

  7. Java程序员从笨鸟到菜鸟之——总结和声明

    前段时间经过大约二十天的时间把javaSE的内容总结了一下,最近由于个人原因和一些乱七八糟的事情,一直没在更新,首先感谢那些一如既往支持我的朋友.最近不知道为什么,一直很懒,做东西也一直是效率很低,生 ...

  8. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  9. Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...

  10. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice

    在日常开发中,常用的webservice引擎主要有Axis,axis2,Xfire以及cxf(Xfire的升级版).现在只有axis2和cxf官方有更新.今天我们先以一个比较老的引擎为例.来讲诉一下w ...

最新文章

  1. React-Native 使用真机和指定模拟器调试
  2. GitHub 大热!也许会成为你心中的OCR开源工具NO1!
  3. 数据库MySQL/mariadb知识点——操作篇(2)库管理语句
  4. puppet应用原理及安装部署
  5. c和c++的结构体使用
  6. hdu 3016 Man Down
  7. ODPS技术架构及应用实践
  8. 服务器c盘windows文件夹太大,Win10C盘windows文件夹过大怎么办?Win10C盘windows文件夹过大的解决方法...
  9. 关于小微商户反欺诈监控指标的内容参考
  10. Spark入门实战系列--6.SparkSQL(下)--Spark实战应用
  11. (转)iOS-蓝牙学习资源博文收集
  12. ad怎么修改栅格_AD18怎么改变pcb原理图的网格大小
  13. linux kvm装ghost镜像,kvm安装win7虚拟机
  14. 微信小程序 简单动画入门
  15. 【转】Windows Error code (Windows错误码说明)
  16. 为什么便利店晚上顾客很少?还要24小时营业?
  17. android 常用机型尺寸_安卓手机屏幕多大合适?6.4英寸是“黄金尺寸”吗?
  18. python语言属于科学计算语言吗_python语言属于( )
  19. php数据迁移脚本,Laravel中数据迁移与数据填充的详细步骤
  20. 免费的天气API接口

热门文章

  1. transformers库的使用【二】tokenizer的使用,模型的保存自定义
  2. 国产 YI Tunnel 收银机器人如何秒杀日本自助收银方案
  3. 不是你无法入门自然语言处理(NLP),而是你没找到正确的打开
  4. 吴恩达:我们说人工智能时,实际在说些什么?
  5. Spring Cloud【Finchley】-15 查看Zuul的路由端点和过滤器
  6. Activity启动模式完全解读-更新中
  7. Linux keypad 设备树,SC7731客户配置文档.pdf
  8. 爬虫学习笔记(七)——Scrapy框架(二):Scrapy shell、选择器
  9. 学习笔记——使用下划线命名的规则
  10. h5 socket.io java,从HTML5 WebSocket到Socket.io