如何使用itext7知道文档是否声称是PDF / A

时间:2018-04-03 07:44:50

标签: java pdf itext itext7 pdfa

我有一个使用iText v5编写的功能,我尝试更新它以使用iText v7。该函数检查文档是否声称是PDF / A(我知道iText不是PDF / A Validatior,我只需要知道它是否声明)。

v5中的实现是来自this other question的实现。但是,iText v7中不再提供 reader.getMetadata()方法。

我发现v7中的读者提供了一种看起来非常适合该情况的新方法 getPdfAConformanceLevel ,但它总是返回null。在检查source code后,我不知道 pdfAConformanceLevel 的初始化位置,所以我想知道,这是如何工作的?

我也试过阅读DocumentInformation,但没有成功。

我的代码是:

PdfReader reader = new PdfReader(file);
PdfAConformanceLevel level = reader.getPdfAConformanceLevel();

if (level != null) {
    String conformance = level.getConformance();
    return "A".equalsIgnoreCase(conformance) || "B".equalsIgnoreCase(conformance);
}

return false

1 个答案:

答案 0 :(得分:2)

至少有两种方法可以达到一致性水平。

第一种方式是明确的 - 您手动完成所有工作并负责异常处理。

// Open the document
PdfDocument pdfDocument = new PdfDocument(new PdfReader(filePath));

// Parse conformance level from metadata explicitly
byte[] existingXmpMetadata = pdfDocument.getXmpMetadata();
XMPMeta meta = XMPMetaFactory.parseFromBuffer(existingXmpMetadata);
PdfAConformanceLevel conformanceLevel = PdfAConformanceLevel.getConformanceLevel(meta);

第二种方式确实是通过PdfReader。您已正确识别出这种方式。文档打开时会设置conformanceLevel字段,因此仅创建PdfReader是不够的,您需要打开文档:

PdfDocument pdfDocument = new PdfDocument(new PdfReader(filePath));
PdfAConformanceLevel conformanceLevel = pdfDocument.getReader().getPdfAConformanceLevel();