SpringBoot框架怎么管理Excel和PDF文件类型
本篇内容介绍了“SpringBoot框架怎么管理Excel和PDF文件类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
海西网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
一、文档类型简介
1、Excel文档
Excel一款电子表格软件。直观的界面、出色的计算功能和图表工具,在系统开发中,经常用来把数据转存到Excel文件,或者Excel数据导入系统中,这就涉及数据转换问题。
2、PDF文档
PDF是可移植文档格式,是一种电子文件格式,具有许多其他电子文档格式无法相比的优点。PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息,支持特长文件,集成度和安全可靠性都较高。
二、Excel文件管理
1、POI依赖
Apache POI是Apache软件基金会的开源类库,POI提供API给Java程序对Microsoft 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 表格内容 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
3、文件创建
public static void createExcel(String excelName, String[] headList,List> 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
4、文件导出
public static void exportExcel(String[] headList, List> 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
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> dataList = ExcelUtil.readExcel("F:\\file-type\\user-excel.xlsx") ; String[] headList = new String[]{"用户ID", "用户名", "手机号"} ; ExcelUtil.exportExcel(headList,dataList,response.getOutputStream()) ; }}
三、PDF文件管理
1、IText依赖
iText是一种生成PDF报表的Java组件。通过在服务器端使用页面或API封装生成PDF报表,客户端可以通过超链接直接显示或下载到本地,在系统开发中通常用来生成比较正式的报告或者合同类的电子文档。
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); // 设置表格宽度比例为%100 table.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
3、生成PDF文件
这里基于上面的工具类,画一个PDF页面作为参考。
public class PdfPage01 { // 基础配置 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数据导出报告" ; // 基础样式 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-15\n\n",INFO_FONT,-1)) ; // 报告内容 // 段落标题 + 报表图 document.add(PdfFontUtil.getParagraph("城市数据分布统计",NODE_FONT,-1)) ; document.add(PdfFontUtil.getParagraph("\n· 可视化图表\n\n",BLOCK_FONT,-1)) ; // 设置图片宽高 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)) ; // 数据表格 document.add(PdfFontUtil.getParagraph("\n· 数据详情\n\n",BLOCK_FONT,-1)) ; PdfPTable dataTable = PdfFontUtil.getPdfPTable01(4,400) ; // 设置表格 List> tableDataList = getTableData () ; PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableHeadList); for (List
> getTableData (){ List
> tableDataList = new ArrayList<>() ; for (int i = 0 ; i < 3 ; i++){ List
四、网页转PDF
1、页面Jar包依赖
2、编写页面样式
名称:${name}
作者:${author}
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(); } } /** * 创建文档 */ 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文件类型”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
当前文章:SpringBoot框架怎么管理Excel和PDF文件类型
文章源于:http://scyanting.com/article/jpiceg.html