亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

SpringBoot框架如何操作Excel和PDF

瀏覽:99日期:2022-06-15 17:20:36
目錄一、文檔類型簡介1、Excel文檔2、PDF文檔二、Excel文件管理1、POI依賴2、文件讀取3、文件創建4、文件導出5、文件導出接口三、PDF文件管理1、IText依賴2、API二次封裝3、生成PDF文件4、頁面效果四、網頁轉PDF1、頁面Jar包依賴2、編寫頁面樣式3、核心配置類4、轉換效果圖五、源代碼地址一、文檔類型簡介1、Excel文檔

Excel一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,在系統開發中,經常用來把數據轉存到Excel文件,或者Excel數據導入系統中,這就涉及數據轉換問題。

2、PDF文檔

PDF是可移植文檔格式,是一種電子文件格式,具有許多其他電子文檔格式無法相比的優點。PDF文件格式可以將文字、字型、格式、顏色及獨立于設備和分辨率的圖形圖像等封裝在一個文件中。該格式文件還可以包含超文本鏈接、聲音和動態影像等電子信息,支持特長文件,集成度和安全可靠性都較高。

二、Excel文件管理1、POI依賴

Apache POI是Apache軟件基金會的開源類庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。

<!-- Excel 依賴 --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version></dependency><!-- 2007及更高版本 --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version></dependency>2、文件讀取

public static List<List<Object>> readExcel(String path) throws Exception { File file = new File(path) ; List<List<Object>> list = new LinkedList<>(); XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file)); // 讀取 Sheet1 表格內容 XSSFSheet sheet = xwb.getSheetAt(0); // 讀取行數:不讀取Excel表頭 for (int i = (sheet.getFirstRowNum()+1); i <= (sheet.getPhysicalNumberOfRows()-1); i++) {XSSFRow row = sheet.getRow(i);if (row == null) { continue; }List<Object> linked = new LinkedList<>();for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { XSSFCell cell = row.getCell(j); if (cell == null) { continue; } Object value ; // 這里需根據實際業務情況處理 switch (cell.getCellType()) {case XSSFCell.CELL_TYPE_NUMERIC: //處理數值帶{.0}問題 value = Double.valueOf(String.valueOf(cell)).longValue() ; break;default: value = cell.toString(); } linked.add(value);}if (linked.size()!= 0) { list.add(linked);} } return list;}3、文件創建

public static void createExcel(String excelName, String[] headList,List<List<Object>> dataList)throws Exception { // 創建 Excel 工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); // 創建表頭 XSSFRow row = sheet.createRow(0); for (int i = 0; i < headList.length; i++) {XSSFCell cell = row.createCell(i);cell.setCellType(XSSFCell.CELL_TYPE_STRING);cell.setCellValue(headList[i]); } //添加數據 for (int line = 0; line < dataList.size(); line++) {XSSFRow rowData = sheet.createRow(line+1);List<Object> data = dataList.get(line);for (int j = 0; j < headList.length; j++) { XSSFCell cell = rowData.createCell(j); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue((data.get(j)).toString());} } FileOutputStream fos = new FileOutputStream(excelName); workbook.write(fos); fos.flush(); fos.close();}4、文件導出

public static void exportExcel(String[] headList, List<List<Object>> dataList, OutputStream outputStream) throws Exception { // 創建 Excel 工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); // 創建表頭 XSSFRow row = sheet.createRow(0); for (int i = 0; i < headList.length; i++) {XSSFCell cell = row.createCell(i);cell.setCellType(XSSFCell.CELL_TYPE_STRING);cell.setCellValue(headList[i]); } //添加數據 for (int line = 0; line < dataList.size(); line++) {XSSFRow rowData = sheet.createRow(line+1);List<Object> data = dataList.get(line);for (int j = 0; j < headList.length; j++) { XSSFCell cell = rowData.createCell(j); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue((data.get(j)).toString());} } workbook.write(outputStream); outputStream.flush(); outputStream.close();}5、文件導出接口

@RestControllerpublic class ExcelWeb { @RequestMapping('/web/outExcel') public void outExcel (HttpServletResponse response) throws Exception {String exportName = '2020-01-user-data' ;response.setContentType('application/vnd.ms-excel');response.addHeader('Content-Disposition', 'attachment;filename='+ URLEncoder.encode(exportName, 'UTF-8') + '.xlsx');List<List<Object>> dataList = ExcelUtil.readExcel('F:file-typeuser-excel.xlsx') ;String[] headList = new String[]{'用戶ID', '用戶名', '手機號'} ;ExcelUtil.exportExcel(headList,dataList,response.getOutputStream()) ; }}三、PDF文件管理1、IText依賴

iText是一種生成PDF報表的Java組件。通過在服務器端使用頁面或API封裝生成PDF報表,客戶端可以通過超鏈接直接顯示或下載到本地,在系統開發中通常用來生成比較正式的報告或者合同類的電子文檔。

<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.11</version></dependency><dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.11</version></dependency>2、API二次封裝

首先對于Itext提供的API做一下表格、段落、圖片等基礎樣式的二次封裝,可以更好的適配業務。

public class PdfFontUtil { private PdfFontUtil(){} /** * 段落樣式獲取 */ public static Paragraph getParagraph (String content, Font font,Integer alignment){Paragraph paragraph = new Paragraph(content,font) ;if (alignment != null && alignment >= 0){ paragraph.setAlignment(alignment);}return paragraph ; } /** * 圖片樣式 */ public static Image getImage (String imgPath,float width,float height) throws Exception {Image image = Image.getInstance(imgPath);image.setAlignment(Image.MIDDLE);if (width > 0 && height > 0){ image.scaleAbsolute(width, height);}return image ; } /** * 表格生成 */ public static PdfPTable getPdfPTable01 (int numColumns,float totalWidth) throws Exception {// 表格處理PdfPTable table = new PdfPTable(numColumns);// 設置表格寬度比例為%100table.setWidthPercentage(100);// 設置寬度:寬度平均table.setTotalWidth(totalWidth);// 鎖住寬度table.setLockedWidth(true);// 設置表格上面空白寬度table.setSpacingBefore(10f);// 設置表格下面空白寬度table.setSpacingAfter(10f);// 設置表格默認為無邊框table.getDefaultCell().setBorder(0);table.setPaddingTop(50);table.setSplitLate(false);return table ; } /** * 表格內容 */ public static PdfPCell getPdfPCell (Phrase phrase){return new PdfPCell (phrase) ; } /** * 表格內容帶樣式 */ public static void addTableCell (PdfPTable dataTable,Font font,List<String> cellList){for (String content:cellList) { dataTable.addCell(getParagraph(content,font,-1));} }}3、生成PDF文件

這里基于上面的工具類,畫一個PDF頁面作為參考。

public class PdfPage01 { // 基礎配置 private static String PDF_SITE = 'F:file-typePDF頁面2020-01-15.pdf' ; private static String FONT = 'C:/Windows/Fonts/simhei.ttf'; private static String PAGE_TITLE = 'PDF數據導出報告' ; // 基礎樣式 private static Font TITLE_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,20, Font.BOLD); private static Font NODE_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,15, Font.BOLD); private static Font BLOCK_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,13, Font.BOLD, BaseColor.BLACK); private static Font INFO_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,12, Font.NORMAL,BaseColor.BLACK); private static Font CONTENT_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); private static void createPdfPage () throws Exception {// 創建文檔Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(PDF_SITE));document.open();// 報告標題document.add(PdfFontUtil.getParagraph(PAGE_TITLE,TITLE_FONT,1)) ;document.add(PdfFontUtil.getParagraph('n商戶名稱:XXX科技有限公司',INFO_FONT,-1)) ;document.add(PdfFontUtil.getParagraph('n生成時間:2020-01-15nn',INFO_FONT,-1)) ;// 報告內容// 段落標題 + 報表圖document.add(PdfFontUtil.getParagraph('城市數據分布統計',NODE_FONT,-1)) ;document.add(PdfFontUtil.getParagraph('n· 可視化圖表nn',BLOCK_FONT,-1)) ;// 設置圖片寬高float documentWidth = document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin();float documentHeight = documentWidth / 580 * 320;document.add(PdfFontUtil.getImage('F:file-typemyChart.jpg',documentWidth-80,documentHeight-80)) ;// 數據表格document.add(PdfFontUtil.getParagraph('n· 數據詳情nn',BLOCK_FONT,-1)) ;PdfPTable dataTable = PdfFontUtil.getPdfPTable01(4,400) ;// 設置表格List<String> tableHeadList = tableHead () ;List<List<String>> tableDataList = getTableData () ;PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableHeadList);for (List<String> tableData : tableDataList) { PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableData);}document.add(dataTable);document.add(PdfFontUtil.getParagraph('n· 報表描述nn',BLOCK_FONT,-1)) ;document.add(PdfFontUtil.getParagraph('數據報告可以監控每天的推廣情況,' +'可以針對不同的數據表現進行分析,以提升推廣效果。',CONTENT_FONT,-1)) ;document.newPage() ;document.close();writer.close(); } private static List<List<String>> getTableData (){List<List<String>> tableDataList = new ArrayList<>() ;for (int i = 0 ; i < 3 ; i++){ List<String> tableData = new ArrayList<>() ; tableData.add('浙江'+i) ; tableData.add('杭州'+i) ; tableData.add('276'+i) ; tableData.add('33.3%') ; tableDataList.add(tableData) ;}return tableDataList ; } private static List<String> tableHead (){List<String> tableHeadList = new ArrayList<>() ;tableHeadList.add('省份') ;tableHeadList.add('城市') ;tableHeadList.add('數量') ;tableHeadList.add('百分比') ;return tableHeadList ; } public static void main(String[] args) throws Exception {createPdfPage () ; }}4、頁面效果

SpringBoot框架如何操作Excel和PDF

四、網頁轉PDF1、頁面Jar包依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>2、編寫頁面樣式

<!DOCTYPE html><html lang='en' xmlns:th='http://www.w3.org/1999/xhtml'><head> <meta charset='UTF-8'/> <title>Title</title> <style>body{font-family:SimSun;} </style></head><body>項目信息:<br/>名稱:${name}<br/>作者:${author}<br/><br/><img src='https://img2018.cnblogs.com/blog/1691717/201906/1691717-20190603213911854-1098366582.jpg'/><br/></body></html>3、核心配置類

public class PageConfig { private static final String DEST = 'F:file-typeHTML頁面2020-01-15.pdf'; private static final String HTML = '/pdf_page_one.html'; private static final String FONT = 'C:/Windows/Fonts/simsun.ttc'; private static Configuration freemarkerCfg = null ; static {freemarkerCfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);//freemarker的模板目錄try { String path = 'TODO:模板路徑{自定義}' ; freemarkerCfg.setDirectoryForTemplateLoading(new File(path));} catch (IOException e) { e.printStackTrace();} } /** * 創建文檔 */ private static void createPdf(String content,String dest) throws Exception {Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));document.open();XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);fontImp.register(FONT);XMLWorkerHelper.getInstance().parseXHtml(writer, document,new ByteArrayInputStream(content.getBytes()), null, Charset.forName('UTF-8'), fontImp);document.close(); } /** * 頁面渲染 */ private static String freeMarkerRender(Map<String, Object> data, String htmlTmp) throws Exception {Writer out = new StringWriter();Template template = freemarkerCfg.getTemplate(htmlTmp,'UTF-8');template.process(data, out);out.flush();out.close();return out.toString(); } /** * 方法入口 */ public static void main(String[] args) throws Exception {Map<String,Object> data = new HashMap<> ();data.put('name','smile');data.put('author','知了') ;String content = PageConfig.freeMarkerRender(data,HTML);PageConfig.createPdf(content,DEST); }}4、轉換效果圖

SpringBoot框架如何操作Excel和PDF

五、源代碼地址

文中涉及文件類型,在該章節源碼ware18-file-parent/case-file-type目錄下。

GitHub·地址https://github.com/cicadasmile/middle-ware-parentGitEE·地址https://gitee.com/cicadasmile/middle-ware-parent

以上就是SpringBoot框架如何管理Excel和PDF的詳細內容,更多關于SpringBoot 管理Excel和PDF的資料請關注好吧啦網其它相關文章!

標簽: excel
相關文章:
主站蜘蛛池模板: 久久久久青草 | 黄色毛片免费看 | 婷婷婷色| 亚洲欧美综合网 | 男女啪啪免费体验区 | 四虎黄色 | 国产精品视频一区二区三区 | 中文字幕乱码二三区免费 | 亚洲第一a亚洲 | 黄色一级视频在线观看 | 一级女人毛片人一女人 | 国产在线观看91精品不卡 | 成人片在线播放 | 国产精品第四页 | 欧美精品v国产精品v | 男女自偷自拍视频免费观看篇 | 色婷婷激情综合 | 手机看片日韩国产福利视频 | 女人毛片在线 | 91亚洲人成手机在线观看 | 亚洲精品午夜在线观看 | 青青青青在线成人视99 | 国产成人精品视频频 | 国产精品αv在线观看 | www永久免费视频 | 欧美一级做一a做片性视频 欧美一级做一级爱a做片性 | 亚洲成a人片在线观看中文 亚洲成a人片在线观看中文动漫 | 婷婷丁香久久 | 免费高清毛片在线播放视频 | 小明永久视频 | av蜜桃| 免费黄视频在线观看 | 国产剧情麻豆精品免费 | 正在播放国产乱子伦视频 | 美女mm翘臀后进式动态图 | 911国产在线观看精品 | 中文岛国精品亚洲一区 | 中日韩毛片 | 黄色无遮挡 | 久久青青草原精品老司机 | 国产后进白嫩翘臀美女图片 |