一、背景说明
在 Java 项目中,将 Excel 文件转换为 PDF 是一个非常常见的需求,例如:
- 📄 发票 / 对账单导出
- 📊 报表归档
- 🖨 统一打印格式
- 📎 文件不可编辑化
常见的解决方案包括 Apache POI + iText、LibreOffice 转换等,但这些方案要么开发成本高 ,要么部署复杂。
Spire.XLS.Free for Java 提供了一种非常简单直接 的 Excel → PDF 转换方式,并且在合理使用场景下可以做到无水印输出,非常适合技术学习和中小型项目使用。
仓库地址:Spire.XLS.Free for Java 仓库地址
二、Spire.XLS.Free 简介
1️⃣ 什么是 Spire.XLS.Free?
Spire.XLS.Free 是 e-iceblue 公司提供的 Excel 处理组件的免费版本,支持:
- 读取 / 写入 Excel(XLS / XLSX)
- 基础样式操作
- Excel 转 PDF
- Excel 转图片
⚠️ 注意:
Free 版本功能有限,但并非所有场景都会有水印。
2️⃣ 免费版是否一定有水印?
这是很多人最关心的问题。
结论先行:
✅ 使用 Spire.XLS.Free 转 Excel → PDF,在以下条件下是"无水印"的:
- Excel 内容不复杂
- 页数、单元格数量未超过免费限制
- 不使用高级商业功能
在实际测试中,用于:
- 发票
- 简单表格
- 单页报表
是可以正常生成无水印 PDF 的。
三、项目依赖配置
1️⃣ Maven 依赖
xml
<!-- ⭐ 仓库配置 -->
<repositories>
<repository>
<id>e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls.free</artifactId>
<version>5.3.0</version>
</dependency>
⚠️ 提醒:
- Spire.XLS.Free 不在 Maven Central,需要配置一下额外的仓库
- 需要确保 Maven 能访问 e-iceblue 官方仓库
(避免被阿里云 mirror 拦截)
四、Excel 转 PDF 核心代码实现
下面是一个最小可用示例,逻辑非常清晰。
1️⃣ 基础转换示例
java
import com.spire.xls.*;
public class ExcelToPdfDemo {
public static void main(String[] args) {
// 1. 创建 Workbook
Workbook workbook = new Workbook();
// 2. 加载 Excel 文件
workbook.loadFromFile("D:\\下载\\invoice.xlsx");
// 3. 转换设置(适配页面)
workbook.getConverterSetting().setSheetFitToPage(true);
// 4. 保存为 PDF
workbook.saveToFile("D:\\下载\\output.pdf", FileFormat.PDF);
}
}
📌 以上代码即可完成:
Excel → PDF
无需复杂配置,非常适合快速集成。
五、优化 PDF 打印效果(重点)
实际使用中,很多人会发现:
❓ PDF 左右或底部留白较多
❓ 内容没有铺满页面
这并不是转换失败,而是Excel 打印设置的问题。
1️⃣ 设置页边距(左右 / 上下)
java
Worksheet sheet = workbook.getWorksheets().get(0);
PageSetup pageSetup = sheet.getPageSetup();
// 单位:英寸(1 inch ≈ 2.54 cm)
pageSetup.setLeftMargin(0.2);
pageSetup.setRightMargin(0.2);
pageSetup.setTopMargin(0.2);
pageSetup.setBottomMargin(0.2);
2️⃣ 强制内容适配到一页
java
pageSetup.setFitToPagesWide(1);
pageSetup.setFitToPagesTall(1);
3️⃣ 推荐完整示例代码
java
import com.spire.xls.*;
public class ExcelToPdfDemo {
public static void main(String[] args) {
Workbook workbook = new Workbook();
workbook.loadFromFile("D:\\下载\\invoice.xlsx");
Worksheet sheet = workbook.getWorksheets().get(0);
PageSetup pageSetup = sheet.getPageSetup();
pageSetup.setLeftMargin(0.2);
pageSetup.setRightMargin(0.2);
pageSetup.setTopMargin(0.2);
pageSetup.setBottomMargin(0.2);
pageSetup.setFitToPagesWide(1);
pageSetup.setFitToPagesTall(1);
workbook.getConverterSetting().setSheetFitToPage(true);
workbook.saveToFile("D:\\下载\\output.pdf", FileFormat.PDF);
}
}
六、关于 Free 版的限制说明(实话实说)
为了避免踩坑,这里必须说明 Free 版的边界:
❌ Free 版的限制
- 对复杂 Excel(大量页、复杂样式)可能加水印
- PDF 精确排版能力有限
- 不适合高精度印刷级需求
✅ Free 版适合的场景
- 发票 / 单页表单
- 简单报表
- 技术学习 / Demo / 内部系统
七、总结
Spire.XLS.Free for Java 在 Excel 转 PDF 这个场景下:
✅ 上手成本低
✅ 代码简洁
✅ 无需额外服务
✅ 在合理范围内可实现 无水印 PDF
对于中小项目或技术分享 来说,是一个性价比很高的方案。
八、结语
如果你的需求是:
- 简单 Excel → PDF
- 不想引入复杂组件
- 对水印容忍度低但场景可控
那么 Spire.XLS.Free for Java 是一个值得尝试的方案。