使用Java实现Excel转PDF的示例详解

 更新时间:2025年02月10日 10:19:10   作者:五行星辰  
在实际的开发过程中,我们常常会遇到需要将 Excel 文件转换为 PDF 文件的需求,本文为大家介绍一种Java中的常见实现方式,需要的可以参考一下

在实际的开发过程中,我们常常会遇到需要将 Excel 文件转换为 PDF 文件的需求。Java 提供了多种库和工具来实现这个功能,下面我将为你介绍一种常见的实现方式,使用 Apache POI 读取 Excel 文件,再使用 iText 生成 PDF 文件。

1. 引入所需的库

首先,我们需要在项目中引入 Apache POI 和 iText 相关的库。如果你使用的是 Maven 项目,就在 pom.xml 文件里添加以下依赖:

<!-- Apache POI 用于读取 Excel 文件 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>
 
<!-- iText 用于生成 PDF 文件 -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

2. 实现 Excel 转 PDF 的代码

下面是具体的 Java 代码示例:

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
import java.io.*;
 
public class ExcelToPdfConverter {
    public static void main(String[] args) {
        try {
            // 读取 Excel 文件
            FileInputStream excelFile = new FileInputStream("input.xlsx");
            Workbook workbook = new XSSFWorkbook(excelFile);
            Sheet sheet = workbook.getSheetAt(0);
 
            // 创建 PDF 文档
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
            document.open();
 
            // 创建 PDF 表格,列数与 Excel 表格的列数相同
            int columnCount = sheet.getRow(0).getLastCellNum();
            PdfPTable pdfTable = new PdfPTable(columnCount);
 
            // 遍历 Excel 表格的每一行
            for (Row row : sheet) {
                // 遍历当前行的每一个单元格
                for (Cell cell : row) {
                    // 获取单元格的值
                    String cellValue = getCellValueAsString(cell);
                    // 创建 PDF 表格的单元格
                    PdfPCell pdfCell = new PdfPCell(new Phrase(cellValue));
                    // 将单元格添加到 PDF 表格中
                    pdfTable.addCell(pdfCell);
                }
            }
 
            // 将 PDF 表格添加到 PDF 文档中
            document.add(pdfTable);
 
            // 关闭文档和 Excel 文件
            document.close();
            workbook.close();
            excelFile.close();
 
            System.out.println("Excel 转 PDF 成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Excel 转 PDF 失败:" + e.getMessage());
        }
    }
 
    // 将单元格的值转换为字符串
    private static String getCellValueAsString(Cell cell) {
        if (cell == null) {
            return "";
        }
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }
}

3. 代码详细解释

1.读取 Excel 文件:

  • FileInputStream excelFile = new FileInputStream("input.xlsx");:创建一个 FileInputStream 对象,用于读取 input.xlsx 文件。
  • Workbook workbook = new XSSFWorkbook(excelFile);:使用 XSSFWorkbook 类创建一个 Workbook 对象,用于表示 Excel 文件。
  • Sheet sheet = workbook.getSheetAt(0);:获取 Excel 文件的第一个工作表。

2.创建 PDF 文档:

  • Document document = new Document();:创建一个 Document 对象,用于表示 PDF 文档。
  • PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));:使用 PdfWriter 将 Document 对象与 FileOutputStream 关联起来,指定生成的 PDF 文件名为 output.pdf。
  • document.open();:打开 PDF 文档,准备写入内容。

3.创建 PDF 表格:

  • int columnCount = sheet.getRow(0).getLastCellNum();:获取 Excel 表格第一行的列数。
  • PdfPTable pdfTable = new PdfPTable(columnCount);:创建一个 PdfPTable 对象,用于表示 PDF 表格,列数与 Excel 表格的列数相同。

4.遍历 Excel 表格并填充 PDF 表格:

  • for (Row row : sheet) {... }:遍历 Excel 表格的每一行。
  • for (Cell cell : row) {... }:遍历当前行的每一个单元格。
  • String cellValue = getCellValueAsString(cell);:调用 getCellValueAsString 方法将单元格的值转换为字符串。
  • PdfPCell pdfCell = new PdfPCell(new Phrase(cellValue));:创建一个 PdfPCell 对象,用于表示 PDF 表格的单元格。
  • pdfTable.addCell(pdfCell);:将 PdfPCell 对象添加到 PdfPTable 中。

5.将 PDF 表格添加到 PDF 文档中:

document.add(pdfTable);:将 PdfPTable 对象添加到 Document 中。

6.关闭文档和 Excel 文件:

document.close(); workbook.close(); excelFile.close();:关闭 PDF 文档、Excel 文件和输入流,释放资源。

4. 注意事项

上述代码仅处理了 Excel 文件的第一个工作表,如果需要处理多个工作表,可以使用 workbook.getNumberOfSheets() 方法获取工作表的数量,然后遍历每个工作表进行处理。

代码中的 getCellValueAsString 方法用于将不同类型的单元格值转换为字符串,确保在处理不同类型的单元格时不会出现异常。

到此这篇关于使用Java实现Excel转PDF的示例详解的文章就介绍到这了,更多相关Java Excel转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Bean的定义及三种创建方式

    Spring Bean的定义及三种创建方式

    本文主要介绍了Spring容器获取Bean的9种方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • IDEA安装插件的两种方式详解

    IDEA安装插件的两种方式详解

    插件是开发工具的扩展程序,通常由第三方提供,当安装了插件后,原开发工作的菜单、按钮等开发环境可能会发生变化,本文通过图文给大家详细介绍了IDEA安装插件的两种方式,需要的朋友可以参考下
    2025-09-09
  • Java 创建线程的3种方法及各自的优点

    Java 创建线程的3种方法及各自的优点

    这篇文章主要介绍了Java 创建线程的3种方法及各自的优点,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • java导出Excel文件的步骤全纪录

    java导出Excel文件的步骤全纪录

    这篇文章主要给大家介绍了关于java导出Excel文件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Java代码实现矩形覆盖实例

    Java代码实现矩形覆盖实例

    这篇文章主要介绍了Java代码实现矩形覆盖实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • SpringBoot基于数据库的定时任务统一管理的实现

    SpringBoot基于数据库的定时任务统一管理的实现

    这篇文章主要介绍了SpringBoot基于数据库的定时任务统一管理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Flink ExecutionGraph生成源码解析

    Flink ExecutionGraph生成源码解析

    这篇文章主要为大家介绍了Flink ExecutionGraph生成源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java多线程之生产者消费者模式详解

    Java多线程之生产者消费者模式详解

    这篇文章主要为大家详细介绍了Java多线程之生产者消费者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Java封装统一的Result Model案例

    Java封装统一的Result Model案例

    这篇文章主要介绍了Java封装统一的Result Model案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • idea统计代码行数Statistic的步骤详解

    idea统计代码行数Statistic的步骤详解

    这篇文章主要介绍了idea统计代码行数Statistic的步骤详解,本文通过使用Statistic插件操作的,通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论