我有一个使用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
答案 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();