java - PDF/A 已通过印前检查正确验证,但在线 pdf-tools 无法验证它

标签 java pdfbox pdfa

预检(版本 2.0.15)工具已正确验证生成的 pdf(使用 pdfbox 版本 2.0.15 创建)文件,但在线 pdf 工具(例如 https://www.pdf-online.com/osa/validate.aspx )无法正确验证它。我收到以下错误:

合规性 pdfa-1b 结果文档不符合 PDF/A。 细节 验证文件“file.pdf”的一致性级别 pdfa-1b

XMP 元数据中不允许使用匿名 RDF 资源(没有 rdf:about 属性的 rdf:Description)。

外观字典不包含条目。

外观字典不包含条目。

外观字典不包含条目。

外观字典不包含条目。

外观字典不包含条目。

该文档不符合所要求的标准。

文档包含不明确或外观不适当的注释或表单字段。

文档的元数据丢失、不一致或损坏。 该文档不符合 PDF/A-1b 标准。

完成。

为了生成元数据,我使用以下代码:

private void addMetadata(PDDocument pdDocument,final String zzz,final String yyy) {

    PDDocumentCatalog catalog = pdDocument.getDocumentCatalog();
    PDDocumentInformation info = pdDocument.getDocumentInformation();
    info.setCreationDate(Calendar.getInstance());
    info.setModificationDate(Calendar.getInstance());
    info.setAuthor(metadataAuthor);
    info.setProducer(metadataProducer);
    info.setTitle(zzz + "_" + yyy);
    info.setKeywords("aaa");
    info.setCreator("aaa");
    info.setSubject("aaa");

    PDMarkInfo markInfo = new PDMarkInfo();
    markInfo.setMarked(true);
    catalog.setMarkInfo(markInfo);

    try {
        PDMetadata metadataStream = new PDMetadata(pdDocument);
        catalog.setMetadata( metadataStream );

        XMPMetadata xmp = new XMPMetadata();
        XMPSchemaPDFAId pdfaid = new XMPSchemaPDFAId(xmp);
        xmp.addSchema(pdfaid);
        pdfaid.setConformance("B");
        pdfaid.setPart(1);
        pdfaid.setAbout("");

        XMPSchemaDublinCore dcSchema = xmp.addDublinCoreSchema();
        dcSchema.setTitle( info.getTitle() );
        dcSchema.addCreator("aaa");
        dcSchema.setDescription( info.getSubject() );

        XMPSchemaPDF pdfSchema = xmp.addPDFSchema();
        pdfSchema.setKeywords( info.getKeywords() );
        pdfSchema.setProducer( info.getProducer() );

        XMPSchemaBasic basicSchema = xmp.addBasicSchema();
        basicSchema.setModifyDate( info.getModificationDate() );
        basicSchema.setCreateDate( info.getCreationDate() );
        basicSchema.setCreatorTool( info.getCreator() );

        metadataStream.importXMPMetadata(xmp.asByteArray());

        InputStream colorProfile = getClass().getClassLoader().getResourceAsStream("icm/sRGB Color Space Profile.icm");
        // create output intent

        PDOutputIntent oi = new PDOutputIntent(pdDocument, colorProfile); 
        String value = "sRGB IEC61966-2.1";
        oi.setInfo(value); 
        oi.setOutputCondition(value); 
        oi.setOutputConditionIdentifier(value); 
        oi.setRegistryName("http://www.color.org"); 
        catalog.addOutputIntent(oi);

    } catch (Exception e) {
        e.printStackTrace()
    }

}

有什么建议吗?

最佳答案

正如评论中所讨论的:

1) 无法报告“外观字典不包含条目”是 PDFBox 预检中的一个错误,将在 2.0.17 中修复,请参阅 PDFBOX-4586 。根据this document :

An ISO 19005-1 validator shall FAIL otherwise conforming files in which a widget annotation lacks an appearance dictionary

2) “rdf:Description without rdf:about attribute”可能是也可能不是错误。 VeraPDF不认为它是一个。您的代码使用了 1.8.* 版本。如需这些,您可以调用dcSchema.setAbout("")解决这个问题。在 2.0.* 中,如果您使用 metadata.createAndAddDublinCoreSchema() 创建架构,则不会出现此问题。 .

我在 VeraPDF project 中创建了一个问题他们将在验证技术工作组的下次 session 上讨论这个问题

3) 小部件不包含条目是因为当时 setValue()被调用时,没有足够的信息(例如矩形)。这就是为什么您收到消息 widget of field aa has no rectangle, no appearance stream created .

关于java - PDF/A 已通过印前检查正确验证,但在线 pdf-tools 无法验证它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56791435/

相关文章:

java - 二维数组,如何以编程方式添加新的数组元素? java

java - 需要一些关于 java 中扫描仪生成的字符串中空格的指导

javascript - 使用 spring mvc 和 apache pdf 框从 UI 下载的空的和损坏的 pdf 文件

java - 我无法在 pdf 中嵌入颜色空间以创建 Pdf/A

java - PDF/A生成中字体编码的问题

java - 如何使用 itext 知道文档是否声称是 PDF/A

java - 为什么 getItem(position) 与新实例一起使用? (不应该为零?)

java - java中的随机访问文件

java - 从 java 源创建 .jar 不起作用

java - 如何使用pdfbox获取字体颜色