在Java中实现PDF导出,通常使用一个开源库——iText。iText是一个非常强大的库,广泛应用于创建和操作PDF文档。

步骤 1:添加依赖

如果你使用Maven构建项目,可以在pom.xml中添加iText的依赖。iText有一个商业许可版本(iText 7)和一个AGPL开源版本。我们将使用iText 7的开源版本。

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.2.4</version>
    <type>pom</type>
</dependency>

如果你使用Gradle,可以在build.gradle中添加如下依赖:

dependencies {
    implementation 'com.itextpdf:itext7-core:7.2.4'
}

步骤 2:创建PDF文档

以下是一个使用iText生成简单PDF文档的示例代码:

import com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;

import java.io.File;
import java.io.IOException;

public class PDFExportExample {

    public static void main(String[] args) {
        try {
            // 创建PDF文档的文件
            File file = new File("example.pdf");
            
            // 创建PdfWriter对象
            PdfWriter writer = new PdfWriter(file);
            
            // 创建PdfDocument对象
            PdfDocument pdfDoc = new PdfDocument(writer);
            
            // 创建Document对象
            Document document = new Document(pdfDoc);
            
            // 添加内容到PDF
            document.add(new Paragraph("Hello, world!").setTextAlignment(TextAlignment.CENTER));
            document.add(new Paragraph("This is a sample PDF document generated using iText."));

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

            System.out.println("PDF generated successfully!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解释:

  1. 创建文件和PdfWriter:
    使用PdfWriter指定生成的PDF文件路径。
  2. 创建PdfDocument:
    通过PdfWriter对象创建PdfDocument对象,表示一个空的PDF文件。
  3. 创建Document对象:
    Document是iText中的高级API,用于构建PDF文档,可以添加段落、表格、图片等元素。
  4. 添加段落内容:
    使用document.add(new Paragraph("Text"))将段落添加到PDF文件中,setTextAlignment(TextAlignment.CENTER)方法使文本居中。
  5. 关闭文档:
    document.close()用于完成并保存PDF文档。

步骤 3:导出复杂内容(如表格、图片等)

你可以在PDF中添加更多复杂的内容,如表格和图片:

添加表格

import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.kernel.colors.ColorConstants;

public class PDFExportExample {

    public static void main(String[] args) {
        try {
            // 创建PDF文档的文件
            File file = new File("example_with_table.pdf");
            
            // 创建PdfWriter对象
            PdfWriter writer = new PdfWriter(file);
            
            // 创建PdfDocument对象
            PdfDocument pdfDoc = new PdfDocument(writer);
            
            // 创建Document对象
            Document document = new Document(pdfDoc);

            // 创建表格
            float[] columnWidths = {1, 2, 3};
            Table table = new Table(columnWidths);
            
            // 添加表格头部
            table.addCell(new Cell().add("Header 1"));
            table.addCell(new Cell().add("Header 2"));
            table.addCell(new Cell().add("Header 3"));
            
            // 添加表格内容
            table.addCell(new Cell().add("Row 1, Column 1"));
            table.addCell(new Cell().add("Row 1, Column 2"));
            table.addCell(new Cell().add("Row 1, Column 3"));
            
            table.addCell(new Cell().add("Row 2, Column 1"));
            table.addCell(new Cell().add("Row 2, Column 2"));
            table.addCell(new Cell().add("Row 2, Column 3"));
            
            // 将表格添加到文档
            document.add(table);

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

            System.out.println("PDF with table generated successfully!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

添加图片

import com.itextpdf.layout.element.Image;
import com.itextpdf.io.image.ImageDataFactory;

public class PDFExportExample {

    public static void main(String[] args) {
        try {
            // 创建PDF文档的文件
            File file = new File("example_with_image.pdf");
            
            // 创建PdfWriter对象
            PdfWriter writer = new PdfWriter(file);
            
            // 创建PdfDocument对象
            PdfDocument pdfDoc = new PdfDocument(writer);
            
            // 创建Document对象
            Document document = new Document(pdfDoc);

            // 添加图片
            Image img = new Image(ImageDataFactory.create("path/to/your/image.jpg"));
            img.scaleToFit(500, 500);  // 调整图片大小
            document.add(img);

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

            System.out.println("PDF with image generated successfully!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

说明:

  • 添加表格: 使用Table类创建表格,可以指定列宽,并通过addCell方法填充每个单元格。
  • 添加图片: 使用Image类添加图片,ImageDataFactory.create()用于加载图片文件,scaleToFit方法用于调整图片大小。