Java操作PDF文件的能力在开发中变得越来越重要,尤其是在需要生成报告、处理文档或者进行数据交换时。本文将介绍使用Java操作PDF文件的几种方式,并提供相应的代码示例。

1. 使用Apache PDFBox

Apache PDFBox是一个开源的Java库,可以创建、操作和提取PDF文件内容。以下是一些基本操作的示例。

1.1 创建PDF文件

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 java.io.IOException;

public class CreatePDF {
    public static void main(String[] args) {
        try (PDDocument document = new PDDocument()) {
            PDPage page = new PDPage();
            document.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            contentStream.beginText();
            contentStream.setFont(PDType1Font.HELVETICA, 12);
            contentStream.newLineAtOffset(100, 700);
            contentStream.showText("Hello, PDFBox!");
            contentStream.endText();
            contentStream.close();

            document.save("example.pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

该示例创建了一个名为example.pdf的PDF文件,并在其中写入“Hello, PDFBox!”。

1.2 读取PDF文件

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

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

public class ReadPDF {
    public static void main(String[] args) {
        try (PDDocument document = PDDocument.load(new File("example.pdf"))) {
            PDFTextStripper pdfStripper = new PDFTextStripper();
            String text = pdfStripper.getText(document);
            System.out.println(text);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个示例读取并输出example.pdf中的文本内容。

1.3 修改PDF文件

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 java.io.File;
import java.io.IOException;

public class ModifyPDF {
    public static void main(String[] args) {
        try (PDDocument document = PDDocument.load(new File("example.pdf"))) {
            PDPage page = document.getPage(0);

            PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
            contentStream.beginText();
            contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
            contentStream.newLineAtOffset(100, 650);
            contentStream.showText("This is a modification.");
            contentStream.endText();
            contentStream.close();

            document.save("modified_example.pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

该示例在已有的PDF文件中添加了一行文本。

2. 使用iText

iText是一个功能强大的PDF处理库,常用于创建和操作PDF文件,适合商业用途。以下是iText的一些基本用法。

2.1 创建PDF文件

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

import java.io.FileNotFoundException;

public class CreatePDFWithiText {
    public static void main(String[] args) {
        try {
            PdfWriter writer = new PdfWriter("itext_example.pdf");
            PdfDocument pdf = new PdfDocument(writer);
            Document document = new Document(pdf);

            document.add(new Paragraph("Hello, iText!"));

            document.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

2.2 读取PDF文件

iText库通常不用于读取现有PDF文件的文本。在此领域,Apache PDFBox 更适合该任务。

2.3 合并PDF文件

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;

import java.io.FileNotFoundException;

public class MergePDFs {
    public static void main(String[] args) throws FileNotFoundException {
        String dest = "merged.pdf";
        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));

        String[] srcFiles = {"file1.pdf", "file2.pdf"};
        for (String src : srcFiles) {
            PdfDocument srcDoc = new PdfDocument(new PdfReader(src));
            srcDoc.copyPagesTo(1, srcDoc.getNumberOfPages(), pdfDoc);
            srcDoc.close();
        }
        pdfDoc.close();
    }
}

这个示例演示了如何将多个PDF文件合并成一个新的PDF文件。

结论

Java提供了多种库来处理PDF文件,其中Apache PDFBox和iText是最常用的选择。Apache PDFBox更强调开源和免费的特性,适合基本的PDF操作;而iText则功能更为强大,适用于复杂的PDF处理需求。选择合适的库可以根据项目的需求、预算以及特定的功能要求来决定。掌握这些操作后,开发者将能够更高效地处理PDF文件,提升工作效率。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部