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

java excel转图片常用的几种方法

十分想念顺店杂可。。。

在 Java 中实现 Excel 转图片,常用的方法主要分为两类:使用商业库(简单高效但可能收费)和使用开源库组合(免费但实现复杂)。以下是几种常用方案及实现思路:

一、使用商业库(推荐用于复杂场景)

商业库通常封装了完整的 Excel 渲染逻辑,支持复杂表格、公式、图表等转换,使用简单。

1. Aspose.Cells(功能最全面)

Aspose.Cells 是处理 Excel 的专业库,支持将工作表、单元格区域或图表直接转换为图片,支持多种格式(PNG/JPG/BMP 等)。

特点

  • 支持复杂表格、公式、图表、样式渲染
  • 无需安装 Office,纯 Java 实现
  • 商业付费(免费版有水印)

示例代码

import com.aspose.cells.*;
import java.io.File;public class AsposeExcelToImage {public static void main(String[] args) throws Exception {// 加载Excel文件Workbook workbook = new Workbook("input.xlsx");// 获取第一个工作表Worksheet worksheet = workbook.getWorksheets().get(0);// 配置图片选项(格式、分辨率等)ImageOrPrintOptions options = new ImageOrPrintOptions();options.setImageType(ImageType.PNG); // 输出PNG格式options.setHorizontalResolution(300); // 分辨率options.setVerticalResolution(300);// 渲染整个工作表为图片SheetRender render = new SheetRender(worksheet, options);render.toImage(0, "output_aspose.png"); // 保存图片// 也可渲染指定单元格区域(例如A1到D10)CellArea area = new CellArea();area.startRow = 0;area.startColumn = 0;area.endRow = 9;area.endColumn = 3;worksheet.setPrintArea(area); // 设置打印区域即渲染区域render.toImage(0, "output_range.png");}
}

依赖(Maven):

<dependency><groupId>com.aspose</groupId><artifactId>aspose-cells</artifactId><version>23.12</version>
</dependency>
2. Spire.XLS(性价比高)

Spire.XLS 是另一个商业库,功能类似 Aspose.Cells,免费版有页数限制(如最多转换 5 页)。

特点

  • 支持表格、图表、形状转图片
  • 免费版可满足简单需求

示例代码

import com.spire.xls.*;public class SpireExcelToImage {public static void main(String[] args) {// 加载ExcelWorkbook workbook = new Workbook();workbook.loadFromFile("input.xlsx");// 获取第一个工作表Worksheet sheet = workbook.getWorksheets().get(0);// 保存为图片(支持指定区域)sheet.saveToImage("output_spire.png");// 保存指定单元格区域(A1到C8)sheet.saveToImage(0, 0, 7, 2, "output_spire_range.png"); // 行、列起始索引及结束索引}
}

依赖(Maven):

<dependency><groupId>e-iceblue</groupId><artifactId>spire.xls</artifactId><version>14.7.0</version>
</dependency>

二、开源方案(适合简单场景,免费)

开源方案需要组合多个库实现,核心思路是:用 Excel 解析库读取内容 + 用图形库绘制图片

1. Apache POI + BufferedImage(基础实现)

Apache POI 是处理 Excel 的主流开源库,但本身不支持直接转图片,需要手动读取单元格内容、样式(边框、颜色等),再用 Java 的BufferedImage绘制。

特点

  • 完全免费,可定制化
  • 仅适合简单表格(复杂样式、公式、图表难以实现)
  • 需手动处理样式渲染,开发成本高

核心步骤

  1. 用 Apache POI 读取 Excel 内容(单元格值、字体、颜色、边框等)
  2. 计算表格宽高、单元格大小
  3. BufferedImageGraphics2D绘制单元格、文字、边框
  4. 保存为图片

示例代码片段

import org.apache.poi.ss.usermodel.*;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;public class PoiExcelToImage {public static void main(String[] args) throws Exception {Workbook workbook = WorkbookFactory.create(new File("input.xlsx"));Sheet sheet = workbook.getSheetAt(0);// 简单计算图片宽高(实际需根据单元格大小动态计算)int width = 800;int height = 600;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g = image.createGraphics();// 绘制背景g.setColor(Color.WHITE);g.fillRect(0, 0, width, height);// 绘制单元格(简化示例,仅绘制文本)int rowY = 50;for (Row row : sheet) {int colX = 50;for (Cell cell : row) {String value = cell.getStringCellValue();// 绘制文本g.setColor(Color.BLACK);g.drawString(value, colX, rowY);colX += 100; // 单元格宽度}rowY += 30; // 行高}// 保存图片ImageIO.write(image, "PNG", new File("output_poi.png"));g.dispose();}
}

依赖(Maven):

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.4</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.4</version>
</dependency>
2. Apache POI + JFreeChart(处理图表)

如果需要转换 Excel 中的图表,可结合 JFreeChart(开源图表库):

  1. 用 POI 读取图表数据
  2. 用 JFreeChart 生成对应图表图片
  3. 合并表格图片和图表图片(如需)

三、方法对比与选择建议

方法优点缺点适用场景
Aspose.Cells功能全面,支持复杂表格 / 图表,易用商业付费,免费版有水印生产环境、复杂 Excel 转换
Spire.XLS性价比高,免费版可用免费版有页数限制简单需求、小文件转换
Apache POI + 自定义免费开源,可深度定制开发复杂,不支持复杂样式 / 公式简单表格、低成本场景

总结

  • 追求效率和完整性:优先选择 Aspose.Cells 或 Spire.XLS
  • 免费且简单场景:用 Apache POI 手动绘制(仅限简单表格)
  • 避免重复造轮子:商业库是大多数企业的选择(可评估成本)
http://www.lryc.cn/news/613299.html

相关文章:

  • 玳瑁的嵌入式日记D14-0807(C语言)
  • NVIDIA/k8s-device-plugin仓库中GPU无法识别问题的issues分析报告
  • Linux学习记录 DNS
  • LocalSqueeze(图片压缩工具) v1.0.4 压缩
  • nlp-句法分析
  • ClickHouse数据迁移
  • Redis持久化存储
  • 【网络运维】Linux:NFS服务器原理及配置
  • ansible-playbook之获取服务器IP存储到本地文件
  • Linux---第三天---权限
  • Idea打包可执行jar,MANIFEST.MF文件没有Main-Class属性:找不到或无法加载主类
  • 3a服务器的基本功能1之身份认证
  • LINUX-文件查看技巧,重定向以及内容追加,man及echo的使用
  • Java开发时出现的问题---架构与工程实践缺陷
  • vue开发的计算机课程页面
  • Salesforce 的Event Monitoring和Audit Trail 区别
  • C语言中级_动态内存分配、指针和常量、各种指针类型、指针和数组、函数指针
  • 洛谷P1990 覆盖墙壁
  • AMO:超灵巧人形机器人全身控制的自适应运动优化
  • 前端学习 7:EDA 工具
  • 板块三章节3——NFS 服务器
  • SupChains技术团队:需求预测中减少使用分层次预测(五)
  • 写Rust GPU内核驱动:GPU驱动工作原理简述
  • SymPy 中 atan2(y, x)函数的深度解析
  • CentOS 7 安装 Anaconda
  • 14天搞定Excel公式:告别加班,效率翻倍!
  • Windows Oracle 11 g dmp数据库恢复笔记
  • mysql 索引失效分析
  • 全面解析 URL 重定向原理:从协议、实现到安全实践
  • X4000 私有 5G 实验室入门套件