目录
-
- [一、为什么需要导出 PDF 文件?](#一、为什么需要导出 PDF 文件?)
- [二、使用 iText 库生成 PDF 文件](#二、使用 iText 库生成 PDF 文件)
-
- [1. 添加依赖](#1. 添加依赖)
- [2. 生成 PDF 文件](#2. 生成 PDF 文件)
- [3. 添加表格和图像](#3. 添加表格和图像)
- [三、使用 Apache PDFBox 生成 PDF 文件](#三、使用 Apache PDFBox 生成 PDF 文件)
-
- [1. 添加依赖](#1. 添加依赖)
- [2. 生成 PDF 文件](#2. 生成 PDF 文件)
- [3. 添加表格和图像](#3. 添加表格和图像)
- 四、总结
在 Java 开发中,生成 PDF 文件是一个常见的需求。无论是生成报告、发票还是其他文档,掌握 PDF 文件的生成技巧都可以大大提高工作效率。本文将详细介绍 Java 中如何导出 PDF 文件,包括使用 iText 和 Apache PDFBox 两种流行的库,并通过具体代码示例帮助你快速上手。

一、为什么需要导出 PDF 文件?
PDF(Portable Document Format)是一种广泛使用的文档格式,具有以下优点:
- 跨平台:可以在任何操作系统上查看和打印。
- 格式保留:无论在何种设备上查看,文档的格式都能保持一致。
- 安全性:可以设置密码保护,防止未经授权的访问。
在实际开发中,生成 PDF 文件的需求非常普遍。例如:
- 报表生成:生成销售报表、财务报表等。
- 文档转换:将其他格式的文件(如 HTML、TXT)转换为 PDF。
- 电子发票:生成符合标准的电子发票。
二、使用 iText 库生成 PDF 文件
iText 是一个功能强大的 Java 库,用于生成和操作 PDF 文件。以下是一个使用 iText 生成 PDF 文件的示例。
1. 添加依赖
在 Maven 项目中,添加以下依赖:
xml
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.2.5</version>
</dependency>
2. 生成 PDF 文件
java
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
public class ITextExample {
public static void main(String[] args) {
// 创建 PDF 文档
PdfDocument pdfDoc = new PdfDocument(new PdfWriter("hello.pdf"));
Document doc = new Document(pdfDoc);
// 添加内容
doc.add(new Paragraph("Hello, iText!"));
// 关闭文档
doc.close();
}
}
3. 添加表格和图像
java
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Image;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.geom.PageSize;
public class ITextExample {
public static void main(String[] args) {
// 创建 PDF 文档
PdfDocument pdfDoc = new PdfDocument(new PdfWriter("hello.pdf"));
Document doc = new Document(pdfDoc);
// 添加标题
doc.add(new Paragraph("Hello, iText!").setBold().setFontSize(18));
// 添加表格
Table table = new Table(3);
table.addCell("Name");
table.addCell("Age");
table.addCell("Country");
table.addCell("John");
table.addCell("25");
table.addCell("USA");
table.addCell("Anna");
table.addCell("30");
table.addCell("Germany");
doc.add(table);
// 添加图像
Image image = new Image(ImageDataFactory.create("logo.png"));
image.scaleToFit(100, 100);
doc.add(image);
// 关闭文档
doc.close();
}
}
三、使用 Apache PDFBox 生成 PDF 文件
Apache PDFBox 是另一个流行的 Java 库,用于生成和操作 PDF 文件。以下是一个使用 Apache PDFBox 生成 PDF 文件的示例。
1. 添加依赖
在 Maven 项目中,添加以下依赖:
xml
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>
2. 生成 PDF 文件
java
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class PDFBoxExample {
public static void main(String[] args) {
try (PDDocument document = new PDDocument()) {
PDPage page = new PDPage(PageSize.A4);
document.addPage(page);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.beginText();
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello, PDFBox!");
contentStream.endText();
}
document.save("hello.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. 添加表格和图像
java
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.PDImageXObject;
public class PDFBoxExample {
public static void main(String[] args) {
try (PDDocument document = new PDDocument()) {
PDPage page = new PDPage(PageSize.A4);
document.addPage(page);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
// 添加标题
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 18);
contentStream.beginText();
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello, PDFBox!");
contentStream.endText();
// 添加表格
contentStream.setFont(PDType1Font.HELVETICA, 12);
contentStream.beginText();
contentStream.newLineAtOffset(100, 650);
contentStream.showText("Name\tAge\tCountry");
contentStream.newLineAtOffset(0, -20);
contentStream.showText("John\t25\tUSA");
contentStream.newLineAtOffset(0, -20);
contentStream.showText("Anna\t30\tGermany");
contentStream.endText();
// 添加图像
PDImageXObject image = PDImageXObject.createFromFile("logo.png", document);
contentStream.drawImage(image, 100, 500, 100, 100);
} catch (Exception e) {
e.printStackTrace();
}
document.save("hello.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
}
四、总结
通过本文的介绍,我们详细学习了 Java 中如何导出 PDF 文件,包括使用 iText 和 Apache PDFBox 两种流行的库。iText 提供了更丰富的功能和更灵活的 API,适用于复杂的 PDF 生成需求。Apache PDFBox 则是一个轻量级的库,适用于简单的 PDF 生成和操作。希望本文的内容能够帮助你在 Java 开发中更好地实现 PDF 文件的导出功能。