Java 导出excel、pdf

公共导出方法

  1 package com.rexen.rest.common.util;
  2 
  3 
  4 import com.itextpdf.text.*;
  5 import com.itextpdf.text.html.simpleparser.HTMLWorker;
  6 import com.itextpdf.text.pdf.*;
  7 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  8 import org.apache.poi.hssf.usermodel.HSSFFont;
  9 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 10 import org.apache.poi.ss.usermodel.*;
 11 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 12 import org.apache.poi.xssf.usermodel.XSSFFont;
 13 
 14 import javax.servlet.http.HttpServletRequest;
 15 import javax.servlet.http.HttpServletResponse;
 16 import java.io.IOException;
 17 import java.io.OutputStream;
 18 import java.io.StringReader;
 19 import java.io.UnsupportedEncodingException;
 20 import java.net.URLEncoder;
 21 import java.util.List;
 22 
 23 /**
 24  * 导出表格
 25  * 27  * @since 2019-05-10
 28  */
 29 public class Export {
 30     /**
 31      * 导出excel,xls格式
 32      *
 33      * @param sheetName sheet名称
 34      * @param title     标题, 参数类型:数组
 35      * @param list      需要导出内容数据, 参数类型:List<List<String>> 需要将所有数据转换成字符串类型
 36      * @param fileName  excel文件名,参数类型:字符串 38      * @since 2019-05-10
 39      */
 40     public static void getHSSFWorkbook(HttpServletResponse response, HttpServletRequest request, String sheetName, String[] title, List<List<String>> list, String fileName) {
 41         /* 获取文件名称后缀*/
 42         final String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1);
 43 
 44         /* 创建HSSFWorkbook,对应一个Excel文件*/
 45         HSSFWorkbook workbook = new HSSFWorkbook();
 46         /* 在workbook中添加一个sheet,对应Excel文件中的sheet*/
 47         Sheet sheet = workbook.createSheet(sheetName);
 48         /* 在sheet中添加表头第0行*/
 49         Row row = sheet.createRow(0);
 50         /* 创建单元格*/
 51         Cell cell = null;
 52 
 53         /* 创建单元格样式*/
 54         CellStyle style = workbook.createCellStyle();
 55         /*设置单元格填充样式,SOLID_FOREGROUND纯色使用前景颜色填充*/
 56         style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
 57         /* 设置填充颜色*/
 58         style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
 59         /* 水平居中*/
 60         style.setAlignment(HorizontalAlignment.CENTER);
 61         /*垂直对齐居中*/
 62         style.setVerticalAlignment(VerticalAlignment.CENTER);
 63         /* 自动换行*/
 64         style.setWrapText(true);
 65         /*创建字体样式*/
 66         HSSFFont font = workbook.createFont();
 67         /*设置字体大小*/
 68         font.setFontHeightInPoints((short) 14);
 69         style.setFont(font);
 70 
 71         /* 设置内容样式*/
 72         HSSFCellStyle tableStyle = workbook.createCellStyle();
 73         /* 水平居中*/
 74         tableStyle.setAlignment(HorizontalAlignment.CENTER);
 75         /* 垂直对齐居中*/
 76         tableStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 77         /* 自动换行*/
 78         tableStyle.setWrapText(true);
 79 
 80         /* 创建表头*/
 81         for (int i = 0; i < title.length; i++) {
 82             // 设置列宽
 83             sheet.setColumnWidth(i, 20 * 256);
 84             cell = row.createCell(i);
 85             cell.setCellValue(title[i]);
 86             cell.setCellStyle(style);
 87         }
 88 
 89         /* 创建内容*/
 90         for (int i = 0; i < list.size(); i++) {
 91             row = sheet.createRow(i + 1);
 92             for (int j = 0; j < list.get(i).size(); j++) {
 93                 /* 将内容按顺序赋给对应的列对象*/
 94                 Cell tableCell = row.createCell(j);
 95                 tableCell.setCellValue(list.get(i).get(j));
 96                 tableCell.setCellStyle(tableStyle);
 97             }
 98         }
 99         try {
100             /* 响应到客户端*/
101             setResponseHeader(response, fileName + ".xls");
102             OutputStream os = response.getOutputStream();
103             workbook.write(os);
104             os.flush();
105             os.close();
106 
107         } catch (IOException e) {
108             e.printStackTrace();
109         }
110 
111     }
112 
113 
114     /**
115      * 导出pdf文档
116      *
117      * @param lists    导出数据,注: 表头需要添加到lists中第一条
118      * @param request  请求对象
119      * @param response 响应对象121      * @since 2019-05-10
122      */
123     // 下载pdf文档
124     public static void download(HttpServletRequest request, HttpServletResponse response, List<List<String>> lists, String fileName) throws Exception {
125         // 告诉浏览器用什么软件可以打开此文件
126         response.setHeader("content-Type", "application/pdf");
127         // 下载文件的默认名称
128         response.setHeader("Content-Disposition","attachment;fileName=" +URLEncoder.encode(fileName + ".pdf", "UTF-8"));
129         BaseFont baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
130         // 自定义字体属性
131         com.itextpdf.text.Font font = new com.itextpdf.text.Font(baseFont, 11);
132         com.itextpdf.text.Font titleFont = new com.itextpdf.text.Font(baseFont, 14);
133         Document document = new Document(PageSize.A4);
134         PdfWriter.getInstance(document, response.getOutputStream());
135         document.open();
136         if (lists.size() > 0 && lists != null) {
137             for (int i = 0; i < lists.size(); i++) {
138                 PdfPTable table = new PdfPTable(lists.get(i).size());
139                 table.setWidthPercentage(100);
140                 PdfPCell cell = new PdfPCell();
141                 if (i == 0) {
142                     if (lists.get(i).size() > 0 && lists.get(i) != null) {
143                         for (int j = 0; j < lists.get(i).size(); j++) {
144                             System.out.println(lists.get(i).get(j));
145                             Paragraph p=new Paragraph(lists.get(i).get(j), titleFont);
146                             p.setFont(titleFont);
147                             // 水平居中
148                             cell.setHorizontalAlignment(Element.ALIGN_CENTER);
149                             cell.setPhrase(p);
150                             cell.setBackgroundColor(new BaseColor(204, 204, 204));
151                             // 文档中加入该段落
152                             table.addCell(cell);
153                             document.add(table);
154                         }
155                     }
156                 }else {
157                     if (lists.get(i).size() > 0 && lists.get(i) != null) {
158                         for (int j = 0; j < lists.get(i).size(); j++) {
159                             System.out.println(lists.get(i).get(j));
160                             Paragraph p=new Paragraph(lists.get(i).get(j),font);
161                             p.setFont(font);
162                             // 设置段落居中,其中1为居中对齐,2为右对齐,3为左对齐
163                             cell.setHorizontalAlignment(Element.ALIGN_CENTER);
164                             cell.setPhrase(p);
165                             table.addCell(cell);
166                             document.add(table);
167                         }
168                     }
169                 }
170             }
171             document.close();
172         }
173     }
174 
175     /**
176      * 导出excel,xlsx格式
177      *
178      * @param sheetName sheet名称, 参数类型:数组
179      * @param title     标题, 参数类型:数组
180      * @param list      需要导出内容数据, 参数类型:List<List<String>> 需要将所有数据转换成字符串类型
181      * @param fileName  excel文件名,参数类型:字符串183      * @since 2019-05-10
184      */
185     public static void getSXSSFWorkbook(HttpServletResponse response, HttpServletRequest request, String sheetName, String[] title, List<List<String>> list, String fileName) {
186 
187         SXSSFWorkbook workbook = new SXSSFWorkbook();
188 
189         // 在workbook中添加一个sheet,对应Excel文件中的sheet
190         Sheet sheet = workbook.createSheet(sheetName);
191 
192         // 在sheet中添加表头第0行
193         Row row = sheet.createRow(0);
194 
195         // 声明列对象
196         Cell cell = null;
197 
198         /* 创建单元格样式*/
199         CellStyle style = workbook.createCellStyle();
200         /*设置单元格填充样式,SOLID_FOREGROUND纯色使用前景颜色填充*/
201         style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
202         /* 设置填充颜色*/
203         style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
204         /* 水平居中*/
205         style.setAlignment(HorizontalAlignment.CENTER);
206         /*垂直对齐居中*/
207         style.setVerticalAlignment(VerticalAlignment.CENTER);
208         /* 自动换行*/
209         style.setWrapText(true);
210         /*创建字体样式*/
211         XSSFFont font = (XSSFFont) workbook.createFont();
212         /*设置字体大小*/
213         font.setFontHeightInPoints((short) 14);
214         style.setFont(font);
215 
216         /* 设置内容样式*/
217         CellStyle tableStyle = workbook.createCellStyle();
218         /* 水平居中*/
219         tableStyle.setAlignment(HorizontalAlignment.CENTER);
220         /* 垂直对齐居中*/
221         tableStyle.setVerticalAlignment(VerticalAlignment.CENTER);
222         /* 自动换行*/
223         tableStyle.setWrapText(true);
224 
225         // 创建标题
226         for (int i = 0; i < title.length; i++) {
227             // 设置列宽
228             sheet.setColumnWidth(i, 20 * 256);
229             cell = row.createCell(i);
230             cell.setCellValue(title[i]);
231             cell.setCellStyle(style);
232         }
233 
234         // 创建内容
235         for (int i = 0; i < list.size(); i++) {
236             row = sheet.createRow(i + 1);
237             for (int j = 0; j < list.get(i).size(); j++) {
238                 Cell celll = row.createCell(j);
239                 // 将内容按顺序赋给对应的列对象
240                 celll.setCellValue(list.get(i).get(j));
241                 celll.setCellStyle(tableStyle);
242             }
243         }
244         try {
245             /* 响应到客户端*/
246             Export.setResponseHeader(response, fileName + ".xlsx");
247             OutputStream os = response.getOutputStream();
248             workbook.write(os);
249             os.flush();
250             os.close();
251 
252         } catch (IOException e) {
253             e.printStackTrace();
254         }
255     }
256 
257     /**
258      * 发送响应流方法
259      *
260      * @param response 响应
261      * @param fileName excel文件名263      * @since 2019-05-10
264      */
265     public static void setResponseHeader(HttpServletResponse response, String fileName) {
266         try {
267             response.setCharacterEncoding("utf-8");
268             fileName = URLEncoder.encode(fileName, "UTF-8");
269             response.setHeader("content-Type", "application/x-xls");
270             response.setHeader("Content-Disposition", "inline;filename=" + fileName);
271         } catch (Exception ex) {
272             ex.printStackTrace();
273         }
274     }
275 
276 }

实现导出业务

 1     @Override
 2     public void export(HttpServletRequest request, HttpServletResponse response, List<EventStatusVO> list, String reportType) {
 3         List<List<String>> listList = new ArrayList<>();
 4         String dataFormatStr = "yyyy-MM-dd HH:mm:ss";
 5         SimpleDateFormat dateFormat = new SimpleDateFormat(dataFormatStr);
 6         for (EventStatusVO item: list) {
 7             List<String> lists = new ArrayList<>();
 8             //事件名称
 9             lists.add(item.getName());
10             //事件类型
11             lists.add(item.getEventType());
12             //事件级别
13             lists.add(String.valueOf(item.getEventRate()));
14             //事件场所
15             lists.add(item.getEventPlace());
16             //上报日期
17             lists.add(dateFormat.format(item.getReportDate()));
18             //发生日期 起止
19             lists.add(dateFormat.format(item.getHappenDateStart()) + "至" + dateFormat.format(item.getHappenDateEnd()));
20             //事件进度
21             lists.add(item.getEventStatus());
22             listList.add(lists);
23         }
24         String fileName = "我的上报表" + dateFormat.format(new Date());
25         String sheetName = "我的上报";
26         String []title = {"事件名称", "事件类型", "事件级别", "发生场所", "上报日期", "发生时间", "事件进度"};
27 
28         final String xls = "xls";
29         final String xlsx = "xlsx";
30         final String pdf = "pdf";
31         if (xls.equals(reportType)) {
32             Export.getHSSFWorkbook(response,request, sheetName, title, listList, fileName);
33         }
34         if (xlsx.equals(reportType)) {
35             Export.getSXSSFWorkbook(response,request, sheetName, title, listList, fileName);
36         }
37         if (pdf.equals(reportType)) {
38             try {
39                 List<String> allList = Arrays.asList(title);
40                 listList.add(0, allList);
41                 Export.download(request, response, listList, fileName);
42             } catch (Exception e) {
43                 e.printStackTrace();
44             }
45         }
46     }

 

posted @ 2019-06-20 14:07  lovleo  阅读(1232)  评论(0编辑  收藏  举报