无法添加 PDF/A 个有效的元数据
Unable to add PDF/A valid meta data
Java: 1.8
pdfbox: 2.0.18
预检:2.0.18
我可以创建工作 PDF,但我们的要求是它必须符合 PDF/A 标准。
我已经设法解决了除元数据之外的所有验证问题。
没有添加任何元数据我得到错误:
The fileexample.pdf is not valid, error(s) :
7.1 : Error on MetaData, Metadata is not a stream
根据一些示例(在 v2+ 下不存在这方面的文档)我想出了以下内容:
PDMetadata documentMetadata = new PDMetadata(document);
XMPMetadata xmpMetadata = XMPMetadata.createXMPMetadata();
xmpMetadata.createAndAddPFAIdentificationSchema();
XmpSerializer serializer = new XmpSerializer();
ByteArrayOutputStream out = new ByteArrayOutputStream();
serializer.serialize(xmpMetadata, out, false);
documentMetadata.importXMPMetadata(out.toByteArray());
catalog.setMetadata(documentMetadata);
这给了我错误:
The fileexample.pdf is not valid, error(s) :
7.1 : Error on MetaData, xmp should start with a processing instruction
然后我尝试将 withXpacket 的序列化程序更改为 true,但出现以下错误:
org.apache.pdfbox.preflight.exception.ValidationException: Failed while validating
at org.apache.pdfbox.preflight.process.MetadataValidationProcess.validate(MetadataValidationProcess.java:162)
at org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:102)
at org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:141)
at org.apache.pdfbox.preflight.PreflightDocument.validate(PreflightDocument.java:166)
at uk.ac.port.pdf.Main.validate(Main.java:53)
at uk.ac.port.pdf.Main.main(Main.java:21)
Caused by: org.apache.pdfbox.preflight.exception.ValidationException: Schemas not found in the given metadata representation
at org.apache.pdfbox.preflight.metadata.RDFAboutAttributeConcordanceValidation.validateRDFAboutAttributes(RDFAboutAttributeConcordanceValidation.java:51)
at org.apache.pdfbox.preflight.process.MetadataValidationProcess.validate(MetadataValidationProcess.java:99)
... 5 more
此时我显然不明白这是如何工作的。我发现了很多不同的示例,但它们似乎都适用于 v1.8 而不是 v2+。
有人可以向我提供一个向 PDF 文件添加 PDF/A 元数据和架构的有效示例吗?该网站没有文档,尤其是 PDF/A.
原来我少了一个简单的步骤。有默认值设置,但您必须告诉它您的 PDF/A 文档将遵循哪个部分和一致性级别。例如1B.
XMPMetadata xmp = XMPMetadata.createXMPMetadata();
XMPBasicSchema xmpschema = xmp.createAndAddXMPBasicSchema();
xmpschema.setCreatorTool(creatorTool);
xmpschema.setCreateDate(creationDate);
DublinCoreSchema dc = xmp.createAndAddDublinCoreSchema();
dc.setTitle(title);
PDFAIdentificationSchema id = xmp.createAndAddPFAIdentificationSchema();
id.setPart(1);
id.setConformance("B");
XmpSerializer serializer = new XmpSerializer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.serialize(xmp, baos, true);
PDMetadata metadata = new PDMetadata(document);
metadata.importXMPMetadata(baos.toByteArray());
catalog.setMetadata(metadata);
我现在得到:
The file example.pdf is a valid PDF/A-1b file
当与在线验证器核对时..
Compliance pdfa-1b
Java: 1.8
pdfbox: 2.0.18
预检:2.0.18
我可以创建工作 PDF,但我们的要求是它必须符合 PDF/A 标准。 我已经设法解决了除元数据之外的所有验证问题。
没有添加任何元数据我得到错误:
The fileexample.pdf is not valid, error(s) :
7.1 : Error on MetaData, Metadata is not a stream
根据一些示例(在 v2+ 下不存在这方面的文档)我想出了以下内容:
PDMetadata documentMetadata = new PDMetadata(document);
XMPMetadata xmpMetadata = XMPMetadata.createXMPMetadata();
xmpMetadata.createAndAddPFAIdentificationSchema();
XmpSerializer serializer = new XmpSerializer();
ByteArrayOutputStream out = new ByteArrayOutputStream();
serializer.serialize(xmpMetadata, out, false);
documentMetadata.importXMPMetadata(out.toByteArray());
catalog.setMetadata(documentMetadata);
这给了我错误:
The fileexample.pdf is not valid, error(s) :
7.1 : Error on MetaData, xmp should start with a processing instruction
然后我尝试将 withXpacket 的序列化程序更改为 true,但出现以下错误:
org.apache.pdfbox.preflight.exception.ValidationException: Failed while validating
at org.apache.pdfbox.preflight.process.MetadataValidationProcess.validate(MetadataValidationProcess.java:162)
at org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:102)
at org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:141)
at org.apache.pdfbox.preflight.PreflightDocument.validate(PreflightDocument.java:166)
at uk.ac.port.pdf.Main.validate(Main.java:53)
at uk.ac.port.pdf.Main.main(Main.java:21)
Caused by: org.apache.pdfbox.preflight.exception.ValidationException: Schemas not found in the given metadata representation
at org.apache.pdfbox.preflight.metadata.RDFAboutAttributeConcordanceValidation.validateRDFAboutAttributes(RDFAboutAttributeConcordanceValidation.java:51)
at org.apache.pdfbox.preflight.process.MetadataValidationProcess.validate(MetadataValidationProcess.java:99)
... 5 more
此时我显然不明白这是如何工作的。我发现了很多不同的示例,但它们似乎都适用于 v1.8 而不是 v2+。
有人可以向我提供一个向 PDF 文件添加 PDF/A 元数据和架构的有效示例吗?该网站没有文档,尤其是 PDF/A.
原来我少了一个简单的步骤。有默认值设置,但您必须告诉它您的 PDF/A 文档将遵循哪个部分和一致性级别。例如1B.
XMPMetadata xmp = XMPMetadata.createXMPMetadata();
XMPBasicSchema xmpschema = xmp.createAndAddXMPBasicSchema();
xmpschema.setCreatorTool(creatorTool);
xmpschema.setCreateDate(creationDate);
DublinCoreSchema dc = xmp.createAndAddDublinCoreSchema();
dc.setTitle(title);
PDFAIdentificationSchema id = xmp.createAndAddPFAIdentificationSchema();
id.setPart(1);
id.setConformance("B");
XmpSerializer serializer = new XmpSerializer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.serialize(xmp, baos, true);
PDMetadata metadata = new PDMetadata(document);
metadata.importXMPMetadata(baos.toByteArray());
catalog.setMetadata(metadata);
我现在得到:
The file example.pdf is a valid PDF/A-1b file
当与在线验证器核对时..
Compliance pdfa-1b