Java 操作 PDF 文件读写

Java 中读写 PDF 需要使用到第三方类库,目前比较流行的有 iText 和 PDFBox 。

PDF

iText

iText是一个强大的库,用于创建和操作PDF文档。它提供了丰富的功能,包括文本、图像、表格的添加,以及PDF的合并、分割和加密等。

iText 依赖库

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

最新版本可以查看MVN中央仓库

当前的最新版 5.5.x 发布与 2022 年,已经有比较久没有更新了。

获取PDF页数

下面的 getNumberOfPages()方法用于返回 PDF 文档中的页数:

    public static int getNumberOfPages(final String pdfFile) throws IOException {
        PdfReader reader = new PdfReader(pdfFile);
        int pages = reader.getNumberOfPages();
        reader.close();
        return pages;
    }

上面的代码中,首先,使用PdfReader类从File对象加载 PDF。之后,我们使用getNumberOfPages()方法。最后,还需要关闭PdfReader对象。

获取 PDF 元数据

下面的 getInfo()方法可以获取PDF文件的元信息,如标题、作者、创建日期、创建者等。

public static Map<String, String> getInfo(final String pdfFile) throws IOException {
    PdfReader reader = new PdfReader(pdfFile);
    Map<String, String> info = reader.getInfo();
    String producer = info.get("Producer");
    String writer = info.get("Creator");
    reader.close();
    return info;
}

可以从 Map<String, String> 中获取到部分元数据信息。

PDFBox

Apache PDFBox是由Apache软件基金会维护的开源库,用于处理PDF文档。它提供了一套全面的API来创建、渲染、打印和操作PDF文件。

PDFBox 依赖库

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>3.0.2</version>
</dependency>

PDFBox 是有 Apache 维护的,一直在持续迭代中。

获取PDF页数

PDFBox 库提供了处理 PDF 文档的功能。为了获取页数,我们只需使用Loader类及其loadPDF()方法从File对象加载文档。
之后,我们使用PDDocument类的getNumberOfPages()方法:

    public static int getNumberOfPages(final String pdfFile) throws IOException {
        File file = new File(pdfFile);
        PDDocument document = Loader.loadPDF(file);
        int pages = document.getNumberOfPages();
        document.close();
        return pages;
    }

获取 PDF 元数据

PDFBox 获取 PDF 元数据也很简单。 我们需要使用getDocumentInformation()方法。

此方法以PDDocumentInformation对象的形式返回文档元数据(例如文档的作者或其创建日期):

public static PDDocumentInformation getInfo(final String pdfFile) throws IOException {
    File file = new File(pdfFile);
    PDDocument document = Loader.loadPDF(file);
    PDDocumentInformation info = document.getDocumentInformation();
    String producer = info.getProducer();
    String writer = info.getCreator();
    document.close();
    return info;
}

可以看到,PDFBox 获取数据更加地面向对象

总结

iText和Apache PDFBox都是处理PDF文件的强大工具。iText提供了广泛的PDF创建和操作功能,而PDFBox则提供了一个全面的、面向对象的API来处理PDF文档。

选择哪个库取决于具体的项目需求、预算(iText在商业使用上可能有限制)以及对库的个人喜好。

开发者应该检查每个库的最新版本,以确保使用最新的功能和安全更新。在使用这些库时,还应该注意适当地管理资源,如在使用完毕后关闭文档,以避免内存泄漏。

转载请注明出处:码谱记录 » Java 操作 PDF 文件读写
标签: