我需要从 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 元数据?
感谢@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
返回的信息相同。