Java基于Spire.XLS实现从Excel到PDF的发票自动化生成
目录
- 一、为什么选择 Excel + PDF 的组合
- 二、两种常见场景:没有模板 v编程客栈s 已有模板
- 场景 1:没有模板,从零生成 Excel 并导出 PDF
- 场景 2:已有 Excel 模板,填充数据后导出 PDF
- 三、总结与建议
随着业务数字化进程的不断推进,许多企业开始尝试用自动化手段替代手工开票。尤其是那些已经习惯用 Excel 管理订单或发票模板的公司,更希望能将其一键转换成标准格式的 PDF,方便发送、归档与打印。本文将基于 Spire.XLS for Java 介绍如何快速实现“从 Excel 到 PDF”的发票生成自动化流程。
一、为什么选择 Excel + PDF 的组合
在企业日常经营中,发票是不可或缺的重要凭证。许多企业使用 Excel 来管理订单、记录商品信息,并据此生成发票。将这些发票以 PDF 格式保存,不仅便于归档、打印,还方便通过邮件等方式发送给客户。
相比直接从系统输出 PDF,采用“Excel 设计模板 + 自动生成 PDF”这一方案具备明显优势:
- 灵活设计:可利用 Excel 丰富的排版功能,自由控制表格样式、字体、边框等;
- 低学习成本:非开发人员也能通过 Excel 模板快速修改发票样式;
- 批量处理更高效:通过程序批量填充数据、自动生成 PDF,适合大批量开票场景。
Spire.XLS for Java 正好提供了这样一套解决方案:用 Java 代码控制 Excel 内容生成,并保存为 PDF 格式,整个过程无需安装 Microsoft Office,适合部署在服务器或后台系统中。
二、两种常见场景:没有模板 vs 已有模板
根据实际情况,我们可以将发票生成分为两类:没有模板和已经有模板javascript。若是前者,您可以同样使用 Spire.XLS 来创建 Excel 模板,也可以在微软办公套件中进行设计。如果是后者,您可以直接查看场景 2 查看如何将 Excel 形式的发票转换为 PDF 格式。
场景 1:没有模板,从零生成 Excel 并导出 PDF
这种方式适用于初期系统搭建,尚未固定格式,或者格式需要根据业务动态变化的场景。
我们可以使用 Spire.XLS 直接用代码构建表格结构,并填充内容。下面是一个简单示例,展示如何用 Java 创建一个包含表头和数据的 Excel 发票表格:
import com.spire.xls.*; import java.awt.*; public class CreateInvoiceExcel { public static void main(String[] args){ // 创建Workbook实例 Workbook workbook = new Workbook(); // 获取默认的第一张工作表并重命名 Worksheet sheet = workbook.getWorksheets().get(0); sheet.setName("Invoice"); // 设置列宽 for (int i = 1; i <= 4; i++) { sheet.setColumnWidth(i, 18f); } // 设置客户信息(保持和模板对应) sheet.getCellRange("B2").setText("客户名称:张三"); sheet.getCellRange("B3").setText("订单编号:INV20240530"); sheet.getCellRange("B4").setText("日期:2025-05-30"); // 创建样式:表头 CellStyle headerStyle = workbook.getStyles().addStyle("Header"); headerStyle.getFont().isBold(true); headerStyle.getFont().setSize(12f); headerStyle.setHorizontalAlignment(HorizontalAlignType.Center); headerStyle.setVerticalAlignment(VerticalAlignType.Center); // 填充表头(从第5行开始,避免覆盖客户信息) String[] headers = {"商品名称", "单价", "数量", "总价"}; for (int col = 0; col < headers.length; col++) { CellRange cell = sheet.getCellRange(5, col + 1); cell.setValue(headers[col]); cell.setStyle(headerStyle); } // 填充数据(从第6行开始) String[][] data = { {"U盘", "35", "2", "70"}, {"键盘", "120", "1", "120"}, {"鼠标", "45", "3", "135"}, }; for (int row = 0; row < data.length; row++) { for (int col = 0; col < data[row].length; col++) { sheet.getCellRange(row + 6, col + 1).setValue(data[row][col]); } } // 保存为 Excel 文件 workbook.saveToFile("/发票模板.xlsx", FileFormat.Version2013); } }
此方式的优点是完全不依赖已有 Excel 文件,自由度高。但也意味着格式全部需用代码实现,适合对自动化要求更高的场景。
场景 2:已有 Excel 模板,填充数据后导出 PDF
更常见的情况是,企业已经设计好一套标准的 Excel 发票模板,程序只需读取模板,填入相应数据即可。这种方式的好处是设计和开发分离,易于维护。
实现步骤也很简单:
- 设计好 Excel 模板,例如在特定单元格留空;
- 程序加载模板文件;
- 根据业务数据填入相应位置;
- 保存为 PDF。
以下是完整编程的示例www.devze.com代码,展示了如何在 Excel 模板中填充数据并导出为 PDF 文件。你可以直接复制粘贴到 Java 编辑器中运行,并根据实际业务场景调整相应内容:
import com.spire.xls.*; public class FillTemplateAndExport { public static void main(String[] args){ // 加载已有模板 Workbook workbook = new Workbook(); workbook.loadFromFile("E:/Administrator/python1/output/发票模板.xlsx"); // 获取工作表 Worksheet sheet = workbook.getWorksheets().get(0); // 替换客户信息(B2 ~ B4) sheet.getCellRange("B2").setText("客户名称:李思"); sheet.getCellRange("B3").setText("订单编号:INV20250527"); sheet.getCellRange("B4").setText("日期:2025-05-27"); // 填充商品信息,从第6行开始,与模板一致 String[][] data = { {"鼠标垫", "15", "3", "45"}, {"鼠标", "45", "1", "45"}, {"键盘", "120", "4", "480"} }; for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { sheet.geandroidtCellRange(i + 6, j + 1).setText(data[i][j]); } } // 设置 PDF 导出时页面自动适配内容 workbook.getConverterSetting().setSheetFitToPage(true); // 导出为 PDF 文件 workbook.saveToFile("E:/Administrator/Python1/发票1.pdf", FileFormat.PDF); } }
这种方式更加适合业务流程已定型的企业,发票样式清晰统一,后续只需关注数据变化即可。
友情提示:如果你还在评估产品是否适合自己,不妨先试试免费版。导出的文件没有水印,只是在页数上有些限制。
三、总结与建议
Excel 与 PDF 的组合,为企业带来了灵活、高效、易维护的发票自动化生成方案。通过 Spire.XLS for Java,您可以:
- 纯代码生成发票内容并导出 PDF;
- 利用已有 Excel 模板实现自动填充;
- 无需安装 Excel 软件即可运行;
- 满足服务端或批处理的使用场景。
未来,您还可以进一步结合数据库,实现批量生成发票、导出 PDF 并打包下载等功能,全面提升业务自动化水平。如果您正在寻找一套可靠的 Java Excel 组件,Spire.XLS 是值得一试的选择。
到此这篇关于Java基于Spire.XLS实现从Excel到PDF的发票自动化生成的文章就介绍到这了,更多相关Java自动生成发票内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论