Java 飞行前已正确验证PDF/A,但联机PDF工具无法验证

Java 飞行前已正确验证PDF/A,但联机PDF工具无法验证,java,pdfbox,pdfa,Java,Pdfbox,Pdfa,飞行前(版本2.0.15)工具已正确验证生成的pdf(使用pdfbox版本2.0.15创建)文件,但联机pdf工具(e.x.)未正确验证。我得到以下错误: 合规性pdfa-1b 结果文档不符合PDF/A。 细节 正在验证符合性级别pdfa-1b的文件“file.pdf” XMP元数据中不允许匿名RDF资源(RDF:Description,不带RDF:about属性) 外观词典不包含条目 外观词典不包含条目 外观词典不包含条目 外观词典不包含条目 外观词典不包含条目 该文件不符合要求的标准 文档包

飞行前(版本2.0.15)工具已正确验证生成的pdf(使用pdfbox版本2.0.15创建)文件,但联机pdf工具(e.x.)未正确验证。我得到以下错误:

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

XMP元数据中不允许匿名RDF资源(RDF:Description,不带RDF:about属性)

外观词典不包含条目

外观词典不包含条目

外观词典不包含条目

外观词典不包含条目

外观词典不包含条目

该文件不符合要求的标准

文档包含带有歧义或没有适当外观的批注或表单字段

文档的元数据缺失、不一致或损坏。 该文件不符合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中修复,请参阅。根据:

ISO 19005-1验证器应在其他方面不符合文件要求 小部件注释缺少外观字典

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

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


3) 小部件不包含条目是因为在调用
setValue()
时,没有足够的信息(例如矩形)。这就是为什么您得到消息
字段aa的小部件没有矩形,没有创建外观流,如注释中所述:

1) 未能报告“外观词典不包含条目”是PDFBox飞行前的一个错误,将在2.0.17中修复,请参阅。根据:

ISO 19005-1验证器应在其他方面不符合文件要求 小部件注释缺少外观字典

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

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


3) 小部件不包含条目是因为在调用
setValue()
时,没有足够的信息(例如矩形)。这就是为什么您得到消息
字段aa的小部件没有矩形,没有创建外观流

现在我们真的需要PDF。因为如果PDFBox验证,而PDF工具没有验证,那么它很可能是PDFBox中的一个错误:-(我们还需要用于生成PDF的代码。请从这里下载它。这是PDFBox飞行前的一个错误,我会很快修复它。“ISO 19005-1验证程序将失败,否则符合文件中的小部件注释缺少外观词典。”因此,您应该注意每个字段都有一个值,因此是一个外观流。请尝试一下,然后再次检查。VeraPDF不会抱怨元数据。我可以在那里创建一个问题,但我更希望修复您的文件以及其他问题。缺少的“关于”与您对都柏林核心架构的使用有关。请显示代码。如果您使用了
元数据。createAndAddDublinCoreSchema()
,则不会发生这种情况,因为它设置了“关于”的内容。Re xmp:
xmp.addDublinCoreSchema()
是PDFBox 1.8。您可以尝试调用
dcSchema.setAbout(“”);
.Re字段:尝试为每个字段调用setValue(某物)。这将设置外观流,至少在2.0.16中是这样。不确定是否在1.8中。现在我们确实需要PDF。因为如果PDFBox验证而PDF工具不验证,那么PDFBox中很可能存在错误:-(我们还需要用于生成PDF的代码。请从这里下载。这是PDFBox飞行前的一个错误,我会很快修复它。“ISO 19005-1验证程序将失败,否则,一致性文件中的小部件注释缺少外观词典。”因此,您应该注意每个字段都有一个值,因此是一个外观流。请尝试一下,然后再次检查。VeraPDF不会抱怨元数据。我可以在那里创建一个问题,但我更希望修复您的文件以及其他问题。缺少的“关于”与您对都柏林核心架构的使用有关。请显示代码。如果您使用了
元数据。createAndAddDublinCoreSchema()
,则不会发生这种情况,因为它设置了“关于”的内容。Re xmp:
xmp.addDublinCoreSchema()
是PDFBox 1.8。您可以尝试调用
dcSchema.setAbout(“”);
.Re字段:尝试为每个字段调用setValue(某物)。这将设置外观流,至少在2.0.16中是这样。不确定是否为1.8。