java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.

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


这个图就是我们的需求


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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java使用com.lowagie.text.pdf插件编写的PDF报表工具类,支持动态报表创建,使用简单,附件中包含了测试类和生成的报表文件。附件中的代码需要修改相关的保存路径后可以直接使用。创建一张报表例子: private JsFileExportResult createRowReport() { String condition = "开始时间:2018-02-02 14:00:30 结束时间:2018-02-06 16:00:30"; PDFGridReport pdfReport = new PDFGridReport("报表创建测试", GridReportTestModel.getModels()); pdfReport.addCondition(condition); pdfReport.header("字段名称1", "item1", 0, 0).width(160); pdfReport.header("字段名称3", "item3", 0, 2).getCell().backgroundColor(Color.ORANGE); pdfReport.header("字段名称4", "item4", 0, 3); pdfReport.header("字段名称5", "item5", 0, 4); pdfReport.header("字段名称2", "item2", 0, 1); pdfReport.header("值", "value", 0, 5).alignH(HAlign.ALIGN_CENTER).getCell().alignH(HAlign.ALIGN_RIGHT); pdfReport.header("时间", "time", 0, 6); pdfReport.header("图片", "image", 0, 7).width(60).alignH(HAlign.ALIGN_CENTER).getCell() .alignH(HAlign.ALIGN_CENTER).alignV(VAlign.ALIGN_MIDDLE); // 横向打印 pdfReport.getPageSetting().setPrintHorizontal(); pdfReport.group("item1").childGroup("item2"); pdfReport.setCellFormat(new PDFCellValueFormat() { @Override public String format(String fieldName, String oriValue) { if ("value".equals(fieldName)) { return String.format("%.2f", Double.parseDouble(oriValue)).toString(); } else { return oriValue; } } }); JsFileExportResult fileResult = pdfReport.createReport(); return fileResult; }
在前端页面中展示 ExcelCSVPDF 文件需要使用相应的插件或库来实现。以下是一些常用的库和方法的示例: 1. 使用 `<iframe>` 元素展示 PDF 文件: ```html <iframe src="path/to/file.pdf" width="100%" height="600px"></iframe> ``` 这会在页面上嵌入一个用于展示 PDF 文件的 `<iframe>` 元素。 2. 使用第三方库来展示 ExcelCSV 文件,比如 SheetJS: ```html <!-- 引入 SheetJS 库 --> <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> <!-- 选择文件的 input 元素 --> <input type="file" id="fileInput"> <!-- 用于展示表格的容器 --> <div id="tableContainer"></div> <!-- JavaScript 代码 --> <script> document.getElementById('fileInput').addEventListener('change', function(evt) { var file = evt.target.files[0]; var reader = new FileReader(); reader.onload = function(e) { var data = new Uint8Array(e.target.result); var workbook = XLSX.read(data, { type: 'array' }); var sheetName = workbook.SheetNames[0]; var worksheet = workbook.Sheets[sheetName]; var tableHtml = XLSX.utils.sheet_to_html(worksheet); document.getElementById('tableContainer').innerHTML = tableHtml; }; reader.readAsArrayBuffer(file); }); </script> ``` 这段代码使用 SheetJS 库来读取 Excel 文件,并将其转换为 HTML 表格。当用户选择文件后,通过 `FileReader` 对象读取文件内容,并使用 SheetJS 的方法将其转换为 HTML 表格,并将表格内容展示在指定的容器中。 请注意,这只是一种展示 ExcelCSVPDF 文件的方法,你可以根据需要选择合适的库或插件,并根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值