Java中使用iText生成PDF文档

2025-04发布12次浏览

Java中使用iText生成PDF文档

引言

在Java开发中,有时需要将数据以PDF格式输出,例如生成报告、合同等。iText是一个功能强大的Java库,用于创建和操作PDF文件。本文将详细介绍如何在Java项目中使用iText库生成PDF文档,并提供具体实践步骤和代码示例。


iText简介

iText是一个开源的Java库,能够帮助开发者轻松地创建、修改和操作PDF文档。它支持多种PDF特性,包括文本、图像、表格、超链接等。目前最新版本为iText 7,相比之前的版本提供了更多特性和更好的性能。


准备工作

  1. 引入依赖:首先需要在项目中引入iText库。如果使用Maven构建工具,可以在pom.xml中添加以下依赖:

    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext7-core</artifactId>
        <version>7.2.5</version>
    </dependency>
    
  2. 下载库:如果不使用Maven,可以从iText官网下载JAR包并手动添加到项目中。


实践步骤

步骤1:创建一个简单的PDF文档

以下代码演示了如何使用iText生成一个包含简单文本的PDF文档。

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 CreateSimplePDF {
    public static void main(String[] args) {
        // 定义输出路径
        String dest = "example.pdf";

        // 创建PdfWriter实例
        PdfWriter writer = new PdfWriter(dest);

        // 创建PdfDocument实例
        PdfDocument pdfDoc = new PdfDocument(writer);

        // 创建Document实例
        Document document = new Document(pdfDoc);

        // 添加段落
        document.add(new Paragraph("Hello, this is a simple PDF document created using iText."));

        // 关闭文档
        document.close();

        System.out.println("PDF has been created successfully.");
    }
}
步骤2:向PDF中添加表格

iText还支持创建复杂的表格结构。以下代码展示了如何在PDF中添加一个表格。

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Table;

public class CreateTablePDF {
    public static void main(String[] args) {
        String dest = "table_example.pdf";
        PdfWriter writer = new PdfWriter(dest);
        PdfDocument pdfDoc = new PdfDocument(writer);
        Document document = new Document(pdfDoc);

        // 创建一个3列的表格
        Table table = new Table(3);

        // 添加表头
        table.addCell(new Cell().add(new Paragraph("Name")));
        table.addCell(new Cell().add(new Paragraph("Age")));
        table.addCell(new Cell().add(new Paragraph("City")));

        // 添加数据行
        table.addCell("Alice");
        table.addCell("25");
        table.addCell("New York");

        table.addCell("Bob");
        table.addCell("30");
        table.addCell("Los Angeles");

        // 将表格添加到文档中
        document.add(table);

        // 关闭文档
        document.close();
        System.out.println("Table PDF has been created successfully.");
    }
}
步骤3:添加图片到PDF

除了文本和表格,iText还可以将图片嵌入到PDF中。以下代码展示了如何实现这一功能。

import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;

public class AddImageToPDF {
    public static void main(String[] args) {
        String dest = "image_example.pdf";
        String imagePath = "path/to/your/image.jpg"; // 替换为实际图片路径

        PdfWriter writer = new PdfWriter(dest);
        PdfDocument pdfDoc = new PdfDocument(writer);
        Document document = new Document(pdfDoc);

        try {
            // 加载图片
            ImageData data = ImageDataFactory.create(imagePath);
            Image img = new Image(data);

            // 将图片添加到文档中
            document.add(img);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 关闭文档
        document.close();
        System.out.println("Image PDF has been created successfully.");
    }
}

扩展知识

  1. 字体支持:iText支持多种字体,包括中文字体。可以通过PdfFontFactory加载自定义字体文件(如.ttf)。
  2. 水印:可以使用iText为PDF文档添加水印,例如“机密”或“草稿”等。
  3. 加密与权限:iText允许对PDF进行加密,并设置阅读、打印、编辑等权限。