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