本篇內(nèi)容介紹了“SpringBoot框架怎么管理Excel和PDF文件類型”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
海西網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(liá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格式檔案讀和寫的功能。
2、文件讀取
public static List> readExcel(String path) throws Exception { File file = new File(path) ; List
> 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
3、文件創(chuàng)建
public static void createExcel(String excelName, String[] headList,List> 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
4、文件導(dǎo)出
public static void exportExcel(String[] headList, List> 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
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> dataList = ExcelUtil.readExcel("F:\\file-type\\user-excel.xlsx") ; String[] headList = new String[]{"用戶ID", "用戶名", "手機(jī)號"} ; ExcelUtil.exportExcel(headList,dataList,response.getOutputStream()) ; }}
三、PDF文件管理
1、IText依賴
iText是一種生成PDF報表的Java組件。通過在服務(wù)器端使用頁面或API封裝生成PDF報表,客戶端可以通過超鏈接直接顯示或下載到本地,在系統(tǒng)開發(fā)中通常用來生成比較正式的報告或者合同類的電子文檔。
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è)置表格寬度比例為%100 table.setWidthPercentage(100); // 設(shè)置寬度:寬度平均 table.setTotalWidth(totalWidth); // 鎖住寬度 table.setLockedWidth(true); // 設(shè)置表格上面空白寬度 table.setSpacingBefore(10f); // 設(shè)置表格下面空白寬度 table.setSpacingAfter(10f); // 設(shè)置表格默認(rèn)為無邊框 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
3、生成PDF文件
這里基于上面的工具類,畫一個PDF頁面作為參考。
public class PdfPage01 { // 基礎(chǔ)配置 private static String PDF_SITE = "F:\\file-type\\PDF頁面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(); // 報告標(biāo)題 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-15\n\n",INFO_FONT,-1)) ; // 報告內(nèi)容 // 段落標(biāo)題 + 報表圖 document.add(PdfFontUtil.getParagraph("城市數(shù)據(jù)分布統(tǒng)計",NODE_FONT,-1)) ; document.add(PdfFontUtil.getParagraph("\n· 可視化圖表\n\n",BLOCK_FONT,-1)) ; // 設(shè)置圖片寬高 float documentWidth = document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin(); float documentHeight = documentWidth / 580 * 320; document.add(PdfFontUtil.getImage("F:\\file-type\\myChart.jpg",documentWidth-80,documentHeight-80)) ; // 數(shù)據(jù)表格 document.add(PdfFontUtil.getParagraph("\n· 數(shù)據(jù)詳情\n\n",BLOCK_FONT,-1)) ; PdfPTable dataTable = PdfFontUtil.getPdfPTable01(4,400) ; // 設(shè)置表格 List> tableDataList = getTableData () ; PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableHeadList); for (List
> getTableData (){ List
> tableDataList = new ArrayList<>() ; for (int i = 0 ; i < 3 ; i++){ List
四、網(wǎng)頁轉(zhuǎn)PDF
1、頁面Jar包依賴
2、編寫頁面樣式
3、核心配置類
public class PageConfig { private static final String DEST = "F:\\file-type\\HTML頁面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
“SpringBoot框架怎么管理Excel和PDF文件類型”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!