使用iText将Factur-X PDF转换为PDF/A-3时遭遇ISO 19005-3:2012第6.8条测试4不通过问题
使用iText将Factur-X PDF转换为PDF/A-3时遭遇ISO 19005-3:2012第6.8条测试4不通过问题
兄弟,我太懂你这种卡最后一个bug的憋屈感了!折腾这么久就剩这一个问题,换谁都急得上火。先给你理清楚:你现在要把Factur-X PDF转成PDF/A-3,用fnfe-mpe.org校验后卡在了ISO 19005-3:2012第6.8条测试4——这个测试核心是检查关联文件的附加信息是否完全符合PDF/A-3的规范,而Factur-X本身是带XML数据附件的PDF,这块刚好是重灾区。
结合PDF/A-3的规范和iText的实际用法,你可以从这几个关键点排查修复:
- 盯死AFRelationship属性:这是测试4的核心检查项,PDF/A-3要求关联文件的关系类型必须用标准枚举值(比如
Data、Alternative、Supplement等),绝对不能用自定义值。对于Factur-X的XML附件,正确设置应该是PdfName.Data,你用iText添加附件时,是不是没显式指定这个属性?默认值大概率不符合要求。 - 核对MIME类型:Factur-X的XML附件对应的MIME类型必须是
application/xml,创建PdfFileSpec时要精准设置,别写错成text/xml这类不兼容的类型。 - 规范附件描述:附件的描述文本必须用UTF-8编码,不能包含PDF/A不支持的特殊字符,得是正常可读的合规文本。
给你个iText处理的代码片段参考,重点看标注的关键部分:
// 假设你已经初始化了PdfDocument对象 byte[] xmlBytes = ...; // 你的Factur-X XML文件字节数组 // 构建附件参数 PdfDictionary parameters = new PdfDictionary(); parameters.put(PdfName.ModDate, new PdfDate().getPdfObject()); // 创建文件规范,重点设置AFRelationship和MIME类型 PdfFileSpec fileSpec = PdfFileSpec.createEmbeddedFileSpec( pdfDoc, xmlBytes, "factur-x.xml", // 附件文件名 "Factur-X Invoice Data", // 合规的附件描述 PdfName.ApplicationXml, // 正确的MIME类型 parameters, PdfName.Data, // 关键:设置符合要求的AFRelationship false ); // 添加附件到PDF pdfDoc.addFileAttachment("Factur-X Data", fileSpec);
要是排查完这几点还是不行,建议把你处理Factur-X转PDF/A的核心代码片段贴出来——毕竟有时候细节(比如你是先转PDF/A再加附件,还是先加附件再转?)会直接影响结果,能帮你更精准定位问题。
备注:内容来源于stack exchange,提问作者Shiftenas
相关产品推荐
相关产品推荐

