Java POI Excel 转 PDF

介绍

在日常工作中,我们经常需要处理 Excel 数据,并且有时需要将 Excel 数据转换为 PDF 格式,以便与他人共享或打印。Java POI 是一个流行的 Java 库,可以轻松地读取、写入和操作 Excel 文件。在本文中,我们将探讨如何使用 Java POI 将 Excel 文件转换为 PDF 格式。

准备工作

在开始之前,我们需要确保已经安装了 Java 开发环境(JDK)和 Maven 构建工具。还需要下载并引入 Java POI 和 Apache PDFBox 的相关依赖。

添加依赖项

首先,我们需要在 Maven pom.xml 文件中添加以下依赖项:

<dependencies>
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.25</version>
  </dependency>
</dependencies>

这些依赖项将帮助我们使用 Java POI 和 Apache PDFBox 库。

创建示例 Excel 文件

为了演示如何将 Excel 文件转换为 PDF 格式,我们需要创建一个示例的 Excel 文件。我们可以使用 Java POI 来创建一个新的 Excel 文件,并填充一些数据。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelConverter {

    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Example Sheet");

        Row headerRow = sheet.createRow(0);
        Cell headerCell1 = headerRow.createCell(0);
        headerCell1.setCellValue("Name");
        Cell headerCell2 = headerRow.createCell(1);
        headerCell2.setCellValue("Age");

        Row dataRow1 = sheet.createRow(1);
        Cell dataCell1 = dataRow1.createCell(0);
        dataCell1.setCellValue("John Doe");
        Cell dataCell2 = dataRow1.createCell(1);
        dataCell2.setCellValue(30);

        Row dataRow2 = sheet.createRow(2);
        Cell dataCell3 = dataRow2.createCell(0);
        dataCell3.setCellValue("Jane Smith");
        Cell dataCell4 = dataRow2.createCell(1);
        dataCell4.setCellValue(28);

        try (FileOutputStream outputStream = new FileOutputStream("example.xlsx")) {
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码将创建一个包含两列数据的 Excel 文件,并将其保存为 example.xlsx

Excel 转 PDF

现在,我们已经准备好了一个示例的 Excel 文件,我们将使用 Java POI 和 Apache PDFBox 将其转换为 PDF 格式。

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelToPdfConverter {

    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.xlsx");
             Workbook workbook = new XSSFWorkbook(fis);
             PDDocument document = new PDDocument()) {

            XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0);
            int lastRowNum = sheet.getLastRowNum();

            PDRectangle pageSize = PDRectangle.A4;
            float pageWidth = pageSize.getWidth();
            float pageHeight = pageSize.getHeight();
            
            PDPage page = new PDPage(pageSize);
            document.addPage(page);
            
            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
            contentStream.beginText();
            contentStream.newLineAtOffset(50, pageHeight - 50);
            
            // 将 Excel 数据转换为 PDF 表格
            for (int i = 0; i <= lastRowNum; i++) {
                Row row = sheet.getRow(i);
                int lastCellNum = row.getLastCellNum();

                for (int j = 0; j < lastCellNum; j++) {
                    Cell cell = row.getCell