日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot框架如何操作Excel和PDF

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

Excel一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,在系統(tǒng)開發(fā)中,經(jīng)常用來把數(shù)據(jù)轉(zhuǎn)存到Excel文件,或者Excel數(shù)據(jù)導(dǎo)入系統(tǒng)中,這就涉及數(shù)據(jù)轉(zhuǎn)換問題。

2、PDF文檔

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

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

Apache POI是Apache軟件基金會的開源類庫,POI提供API給Java程序?qū)icrosoft 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 表格內(nèi)容 XSSFSheet sheet = xwb.getSheetAt(0); // 讀取行數(shù):不讀取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 ; // 這里需根據(jù)實際業(yè)務(wù)情況處理 switch (cell.getCellType()) {case XSSFCell.CELL_TYPE_NUMERIC: //處理數(shù)值帶{.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、文件創(chuàng)建

public static void createExcel(String excelName, String[] headList,List<List<Object>> dataList)throws Exception { // 創(chuàng)建 Excel 工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); // 創(chuàng)建表頭 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]); } //添加數(shù)據(jù) 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、文件導(dǎo)出

public static void exportExcel(String[] headList, List<List<Object>> dataList, OutputStream outputStream) throws Exception { // 創(chuàng)建 Excel 工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); // 創(chuàng)建表頭 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]); } //添加數(shù)據(jù) 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、文件導(dǎo)出接口

@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組件。通過在服務(wù)器端使用頁面或API封裝生成PDF報表,客戶端可以通過超鏈接直接顯示或下載到本地,在系統(tǒng)開發(fā)中通常用來生成比較正式的報告或者合同類的電子文檔。

<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做一下表格、段落、圖片等基礎(chǔ)樣式的二次封裝,可以更好的適配業(yè)務(wù)。

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);// 設(shè)置表格寬度比例為%100table.setWidthPercentage(100);// 設(shè)置寬度:寬度平均table.setTotalWidth(totalWidth);// 鎖住寬度table.setLockedWidth(true);// 設(shè)置表格上面空白寬度table.setSpacingBefore(10f);// 設(shè)置表格下面空白寬度table.setSpacingAfter(10f);// 設(shè)置表格默認為無邊框table.getDefaultCell().setBorder(0);table.setPaddingTop(50);table.setSplitLate(false);return table ; } /** * 表格內(nèi)容 */ public static PdfPCell getPdfPCell (Phrase phrase){return new PdfPCell (phrase) ; } /** * 表格內(nèi)容帶樣式 */ 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 { // 基礎(chǔ)配置 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數(shù)據(jù)導(dǎo)出報告' ; // 基礎(chǔ)樣式 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 {// 創(chuàng)建文檔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)) ;// 報告內(nèi)容// 段落標題 + 報表圖document.add(PdfFontUtil.getParagraph('城市數(shù)據(jù)分布統(tǒng)計',NODE_FONT,-1)) ;document.add(PdfFontUtil.getParagraph('n· 可視化圖表nn',BLOCK_FONT,-1)) ;// 設(shè)置圖片寬高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)) ;// 數(shù)據(jù)表格document.add(PdfFontUtil.getParagraph('n· 數(shù)據(jù)詳情nn',BLOCK_FONT,-1)) ;PdfPTable dataTable = PdfFontUtil.getPdfPTable01(4,400) ;// 設(shè)置表格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('數(shù)據(jù)報告可以監(jiān)控每天的推廣情況,' +'可以針對不同的數(shù)據(jù)表現(xiàn)進行分析,以提升推廣效果。',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('數(shù)量') ;tableHeadList.add('百分比') ;return tableHeadList ; } public static void main(String[] args) throws Exception {createPdfPage () ; }}4、頁面效果

SpringBoot框架如何操作Excel和PDF

四、網(wǎng)頁轉(zhuǎn)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();} } /** * 創(chuàng)建文檔 */ 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、轉(zhuǎn)換效果圖

SpringBoot框架如何操作Excel和PDF

五、源代碼地址

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

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

以上就是SpringBoot框架如何管理Excel和PDF的詳細內(nèi)容,更多關(guān)于SpringBoot 管理Excel和PDF的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: excel
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产伦精品一区二区三区在线播放| 日韩成人三级| 国产极品模特精品一二| 亚洲一区二区三区在线免费| 色一区二区三区| 国产精品天堂蜜av在线播放| 久久精品国产大片免费观看| 精品日本视频| 日本欧美一区| 日韩美女精品| 日本欧美一区二区| 久久国产精品毛片| 久久要要av| 99久久99久久精品国产片果冰| 精品国产成人| 久久国产免费看| 日本精品久久| 在线一区av| 日韩国产精品久久久久久亚洲| 日韩欧美一区免费| 日本成人在线视频网站| 久久一级电影| 国产成人在线中文字幕| 日韩欧美久久| 91成人超碰| 日韩国产欧美一区二区三区| 亚洲色诱最新| 国产色播av在线| 精品久久视频| 欧美成人日韩| 六月丁香综合| 麻豆91小视频| 亚洲黄色免费av| 日韩亚洲一区在线| 综合五月婷婷| 国产精品久久久久久久久久齐齐 | 亚洲人成网站在线在线观看| 亚洲久草在线| 国产欧美日韩在线一区二区| 日韩黄色大片| 午夜欧美精品| 成人午夜在线| 涩涩涩久久久成人精品| 国产精品videosex极品| 中文日韩欧美| 色爱综合网欧美| 五月亚洲婷婷 | 蜜桃成人av| 91精品久久久久久久久久不卡| 日韩1区2区| 精品国产乱码久久久久久樱花| 欧美有码在线| 国产美女精品视频免费播放软件| 国产麻豆一区二区三区精品视频| 国产精品啊v在线| 日韩精品中文字幕一区二区| 欧美亚洲福利| 亚洲少妇一区| 欧美专区一区二区三区| 亚洲一区二区三区高清| 极品日韩av| 欧美网站在线| 日韩高清在线不卡| 久久免费影院| 亚洲高清毛片| 日韩久久99| 麻豆成全视频免费观看在线看| 久久这里只有| 91久久久久| 99国产精品免费视频观看| 7777精品| 欧美亚洲二区| 精品国产第一福利网站| 亚洲成av人片一区二区密柚| 香蕉人人精品| 国产日韩综合| 一区二区日韩免费看| 欧美精品激情| 亚洲精品免费观看| 精品在线99| 国产精品毛片在线| 国产精品男女| 欧美网站在线| 裤袜国产欧美精品一区| 午夜久久99| 99xxxx成人网| 精品国产乱码| 五月天激情综合网| 日本99精品| 亚洲综合激情在线| 黄色在线观看www| 久久wwww| 午夜精品影视国产一区在线麻豆| 中文字幕系列一区| 97人人精品| 精品免费av| 欧美日韩国产免费观看视频| 日韩美女国产精品| 精品欠久久久中文字幕加勒比| 日本在线不卡视频一二三区| 欧美69视频| 水野朝阳av一区二区三区| 国产成人a视频高清在线观看| 日韩精品久久理论片| 一区久久精品| 激情欧美一区| 亚洲欧美不卡| 老牛影视一区二区三区| 美女视频网站久久| 日韩精品欧美成人高清一区二区| 日韩中文字幕| 国产精品啊v在线| 青草久久视频| 日本aⅴ精品一区二区三区| 石原莉奈在线亚洲二区| 日韩欧美三级| 婷婷激情一区| 久久国产尿小便嘘嘘| 国产一区二区三区亚洲| 欧美日韩精品一区二区视频| 精品视频一区二区三区在线观看 | 黑丝美女一区二区| 成人午夜在线| 九九99久久精品在免费线bt| 日韩中文首页| 精品精品国产三级a∨在线| 亚洲欧美日韩一区在线观看| 国产精品尤物| 日产精品一区二区| 蜜桃久久精品一区二区| 久久免费大视频| 欧美日韩99| 日韩欧美精品一区| 亚洲国产日韩欧美在线| 欧美日韩视频一区二区三区| 奶水喷射视频一区| 国产九一精品| 三上悠亚国产精品一区二区三区| 天堂av在线一区| 91福利精品在线观看| 欧美激情福利| 欧美丝袜一区| 日韩欧美精品一区二区综合视频| 另类欧美日韩国产在线| 欧美日韩国产综合网| 好吊日精品视频| 欧美综合另类| 日产精品一区二区| 99久久精品国产亚洲精品| 亚洲手机在线| 在线日韩欧美| 黄色亚洲精品| 久久中文字幕一区二区| 欧美激情91| 精品三级国产| 麻豆视频在线观看免费网站黄| 给我免费播放日韩视频| 青青草91久久久久久久久| 亚洲一级在线| 国产欧美日韩影院| 久久福利精品| 四虎精品永久免费| 婷婷综合福利| 国产精品片aa在线观看| 欧美日韩亚洲三区| 亚洲精品午夜av福利久久蜜桃| 久久国产中文字幕| 免费看av不卡| 久久久久国产精品一区三寸| 国产欧美激情| 亚洲激情婷婷| 蜜臀a∨国产成人精品| 亚洲黑丝一区二区| 欧美女激情福利| 婷婷激情图片久久| 首页国产欧美日韩丝袜| 日韩免费在线| 国产在线视频欧美一区| 日韩三级视频| 蜜桃av一区二区三区电影| 久久福利一区| 亚洲成人一区| 亚洲激情二区| 99热精品在线观看| 视频一区欧美精品| 国产精品视频一区二区三区| 蜜臀av亚洲一区中文字幕| 国产伦理一区| 久久狠狠久久| 麻豆精品少妇| 香蕉久久99| 欧美有码在线| 久久久天天操| 性色一区二区| 久久久国产亚洲精品| 性欧美69xoxoxoxo| 99国产精品久久久久久久| 爽好多水快深点欧美视频| 日本久久一区| 一区二区精品伦理...|