【问题标题】:How to know if a document claims to be in PDF/A using itext7如何使用 itext7 知道文档是否声称是 PDF/A
【发布时间】:2018-09-12 11:16:35
【问题描述】:

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

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

我发现 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

【问题讨论】:

    标签: java pdf itext itext7 pdfa


    【解决方案1】:

    至少有两种方法可以获得一致性级别。

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

    // 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();
    

    【讨论】:

    • 完美答案!非常感谢!
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2020-03-09
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多