使用 itextpdf 5.5.13.3 与 itext-core 8.0.3 读取 Java 中的 PDF 元数据

问题描述 投票:0回答:1

我需要从 PDF 文件中读取一些元数据。我有一个基于 itextpdf 库的代码库可以完成这项工作:

    static String getPdfFormVersion() throws IOException {

        InputStream inputStream = PDFVersionExtractor.class.getResourceAsStream("/test.pdf");
        final PdfReader pdfReader = new PdfReader(inputStream);
   
        final byte[] docMetaData = pdfReader.getMetadata();
        try (final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
            byteArrayOutputStream.write(docMetaData);
            final String fileXML = byteArrayOutputStream.toString(StandardCharsets.UTF_8.name());
            final String versionNode = fileXML.substring(fileXML.indexOf("<desc:version"), fileXML.indexOf("</desc:version>"));
            return versionNode;
        }
    }

我正在使用的库是:

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

我想迁移到最新版本的 itext:

         <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-core</artifactId>
            <version>8.0.3</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>kernel</artifactId>
            <version>8.0.3</version>
            <type>pom</type>
        </dependency> 

但不幸的是 .getMetaData() 方法不再可用。我试图在 PdfReader 类中找到等效项,但没有成功。 如何使用最新版本的 itextpdf 提取 PDF 元数据?

java pdf itext metadata
1个回答
0
投票

感谢@K J 评论,我创建了一个解决方案,其工作方式似乎与之前的相同:


import com.itextpdf.kernel.pdf.*;

import java.io.*;
import java.nio.charset.StandardCharsets;

public class PDFVersionExtractor {

    public static void main(String[] args) throws IOException {
        String pdfFormVersion = getPdfFormVersion();
        System.out.println(pdfFormVersion);
    }

    static String getPdfFormVersion() throws IOException {
        InputStream inputStream = PDFVersionExtractor.class.getResourceAsStream("/test.pdf");
        final PdfReader pdfReader = new PdfReader(inputStream);
       
        // create pdf document representation from the reader
        PdfDocument pdfDoc = new PdfDocument(pdfReader);
       
        // read xmpMetadata from the document
        final byte[] docMetaData = pdfDoc.getXmpMetadata();
       
        try (final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
            byteArrayOutputStream.write(docMetaData);
            final String fileXML = byteArrayOutputStream.toString(StandardCharsets.UTF_8);
            return fileXML.substring(fileXML.indexOf("<desc:version"), fileXML.indexOf("</desc:version>"));
        }
    }
}

我所做的是,我使用

PdfDocument
类来调用
getXmpMetadata
方法。返回的 byte[] 似乎与
PdfReader.getMetaData
返回的信息相同。

© www.soinside.com 2019 - 2024. All rights reserved.