为了达到 PDF/A-1A 的可访问性级别,我正在使用 PDFBox v2.0.13 在 PDF 上设置 XMP 元数据。在设置元数据之前,我将文件从 .docx 转换为 pdf。我尝试了两种进行转换的方法:一种使用 XDocReport v.2.0.1,另一种使用 Docx4j v.6.1.0。
在 Java 类中,我有以下代码:
PDDocumentInformation info = pdf.getDocumentInformation();
info.setTitle("Apache PDFBox");
info.setSubject("Apache PDFBox adding meta-data to PDF document");
info.setCreator("MyCreator");
...
DublinCoreSchema dcSchema = metadata.createAndAddDublinCoreSchema();
dcSchema.setTitle(info.getTitle());
dcSchema.setDescription(info.getSubject());
dcSchema.addCreator(info.getCreator());
使用 XDocReport 进行转换,我得到以下元数据:
</rdf:Description>
<rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">Apache PDFBox</rdf:li>
</rdf:Alt>
</dc:title>
<dc:description>
<rdf:Alt>
<rdf:li xml:lang="x-default">Apache PDFBox adding meta-data to PDF document</rdf:li>
</rdf:Alt>
</dc:description>
<dc:creator>
<rdf:Seq>
<rdf:li>MyCreator</rdf:li>
</rdf:Seq>
</dc:creator>
</rdf:Description>
而是使用 Docx4j 进行转换,我得到以下元数据:
<rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
<dc:title>
<rdf:Alt>
<rdf:li lang="x-default">Apache PDFBox</rdf:li>
</rdf:Alt>
</dc:title>
<dc:description>
<rdf:Alt>
<rdf:li lang="x-default">Apache PDFBox adding meta-data to PDF document</rdf:li>
</rdf:Alt>
</dc:description>
<dc:creator>
<rdf:Seq>
<rdf:li>MyCreator</rdf:li>
</rdf:Seq>
</dc:creator>
</rdf:Description>
由于“标题”和“描述”生成的元数据不同,使用 XDocReport 生成的最终 pdf 结果 PDF/A-1A 可访问,而使用 Docx4j 生成的最终 pdf 不可访问。
可访问性检查是使用 VeraPDF 进行的。
由于 Docx4j 生成了更具可读性的 PDF,有没有办法修复最终 pdf 中的元数据?