Невозможно добавить PDF / A допустимые метаданные - PullRequest
1 голос
/ 19 февраля 2020

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

Затем я попытался изменить сериализатор на true для withXpacket, и я получил следующее ошибка:

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 / A и схемы в PDF файл? На сайте нет документации, особенно для PDF / A.

1 Ответ

2 голосов
/ 19 февраля 2020

Оказывается, я пропустил простой шаг. Существуют настройки по умолчанию, но вы должны указать, какой части и уровню соответствия будет следовать ваш документ 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
...