当前位置: 首页 > news >正文

Java根据模板文件生成excel文件,同时将excel文件转换成图片

需求

需要将指定数据导出成表格样式的图片,如图
在这里插入图片描述

业务拆解

  1. 定义一个导出模板
  2. 将得到的数据填入模板中,生成excel文件
  3. 将ecxel文件转换成png格式的图片

代码实现

需要引入的依赖

	  <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.10</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.0</version></dependency><dependency><groupId>e-iceblue</groupId><artifactId>spire.xls.free</artifactId><version>5.1.0</version></dependency>

如果spire.xls.free下载不下来,需在pom文件引入以下代码

 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories>

1、定义导出模板

新建如下图excel文件的模板文件(建议xls格式,方便后面转成图片)
在这里插入图片描述

2、将得到的数据填入模板中,生成excel文件

这部分代码主要引用的easyexcel,更多操作见官方文档
存放路径如下:
在这里插入图片描述

/*** 模板excel导出*/
public class TemplateExcelUtil {/*** 根据模板文件导出excel数据,param格式如下:* {* "dateTitle":"",* "rightDate":"",* "relatedPeoples":"",* "list":[*    {*      "projectCode":"",*      "projectName":"",*      "driverName":"",*      "licensePlateCode":"",*      "startMileage":"",*      "endMileage":""*      "diffMileage":""*      "setOutDay":""*      "setOutTime":""*      "remarks":""*      "projectPlanUsers":""*    }*  ]* }** @param templateFileName 模板文件名* @param param            传入参数* @param filePath         导出文件名路径*/public static void exportDataForTemplateExcel(String templateFileName, Map<String, Object> param, String filePath) {//我把模板文件放到了resource下面了,所以读取resource下的模板文件 && 这里也可以是从服务器获取到的文件InputStream inputStream = ResourceUtil.getResourceObj("templates/" + templateFileName).getStream();File file = new File(filePath);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {throw new ServiceException("文件创建失败");}}//设置创建行的方式//纵向换行FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(inputStream).build();//写入到sheetWriteSheet oneSheet = EasyExcel.writerSheet(0).build();//填充excelWriter.fill(param,oneSheet);//填充数组List<Map<String,Object>> list = (List<Map<String,Object>>)param.get("list");excelWriter.fill( list ,fillConfig, oneSheet);excelWriter.close();}}

3、将ecxel文件转换成png格式的图片

该部分主要引用spire.xls.free,更多操作见官方文档

//加载Excel工作表
Workbook wb = new Workbook();
wb.loadFromFile(filePath);
//获取工作表
Worksheet sheet = wb.getWorksheets().get(0);
//调用方法将Excel工作表保存为图片
String imagePath = "D:/temporary.png";
sheet.saveToImage(imagePath);

坑点:
如果在window中正常,但是部署到服务器导出时,出现下面这种情况,则是因为服务器缺少对应的字体
在这里插入图片描述

将字体导入到服务器

  1. window电脑中的C:\Windows\Fonts文件目录下获取字体。
    在这里插入图片描述
  2. 服务器中新建字体存放文件夹
mkdir /usr/share/fonts/chinese
  1. 将window中的字体移动到服务器
    在这里插入图片描述
  2. 设置访问权限
chmod -R 777 /usr/share/fonts/chinese
  1. 建立字体缓存
//字体扩展
mkfontscale
//新增字体目录
mkfontdir
//刷新缓存
fc-cache -fv
  1. 重启服务
reboot

相关文章:

  • Django ORM 中的单表查询 API(1)
  • 数学建模实战Matlab绘图
  • HarmonyOS应用开发者高级认证学习认证知识答疑笔记
  • c语言冒泡排序
  • Unity学习之坦克游戏制作(1)开始场景的制作
  • QT上位机开发(MySql访问)
  • STM32-04-STM32时钟树
  • vue 里 props 类型为 Object 时设置 default: () => {} 返回的是 undefined 而不是 {}?
  • 一些UE5 ControlRig小技巧
  • 关于VScode的这个ssh的配置的经验
  • 幻兽帕鲁开服教程——游戏
  • 使用 crypto-js 进行 AES 加解密操作
  • git add -u 什么意思
  • 009 Linux_文件系统 | 软硬链接
  • elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 2019.2.20 c++ 知识梳理
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ES6 学习笔记(一)let,const和解构赋值
  • httpie使用详解
  • java8 Stream Pipelines 浅析
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python socket服务器端、客户端传送信息
  • Solarized Scheme
  • 闭包,sync使用细节
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 译米田引理
  • 用简单代码看卷积组块发展
  • 在Unity中实现一个简单的消息管理器
  • 转载:[译] 内容加速黑科技趣谈
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​比特币大跌的 2 个原因
  • #大学#套接字
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读11/100)Fast R-CNN
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)memcache、redis缓存
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net mvc总结
  • .NET 药厂业务系统 CPU爆高分析
  • .NET分布式缓存Memcached从入门到实战