Java PDF-A文件的验证
我正在尝试使用PdfBox实现java pdf-a验证程序。我正在处理的文件是一个数字签名pdf(PADES)。我使用pdfbox或在线工具,结果是:Java PDF-A文件的验证,java,validation,pdfbox,pades,Java,Validation,Pdfbox,Pades,我正在尝试使用PdfBox实现java pdf-a验证程序。我正在处理的文件是一个数字签名pdf(PADES)。我使用pdfbox或在线工具,结果是: PreflightDocument document = parser.getPreflightDocument(); document.validate(); 1.1 : Header Syntax error, First line must match %PDF-1.\d 1.1 : Header Synt
PreflightDocument document = parser.getPreflightDocument();
document.validate();
1.1 : Header Syntax error, First line must match %PDF-1.\d
1.1 : Header Syntax error, Second line must begin with '%' followed by at least 4 bytes greater than 127
1.0 : Syntax error, Missing end of file marker '%%EOF'
但是当我用任何阅读器打开文件时,它的格式确实是pdf-a。
查看pdf内部实际上第一行不是%pdf-1,也不是最后一行%%EOF。可能是因为pdf已签名。可能是吗?在这种情况下,我怎样才能在签名的pdf中通过这种验证呢
0ƒ;f *†H†÷
ƒ;V0ƒ;Q10
`†He
ƒ;‡=ƒ;‡8%PDF-1.4
%ÿÿÿÿ
1 0 obj
<<
...
....
.....
0ƒ;f*†H†÷
ƒ;V0ƒ;问题10
`†他
ƒ;‡=ƒ;‡8%PDF-1.4
%ÿÿÿÿ
10 obj
把蒂尔曼的评论充实一点
标题
根据PDF规范ISO 32000-1:
7.5.2文件头
PDF文件的第一行应为标题,由5个字符组成%PDF–,后跟格式为1.N的版本号,其中N是介于0和7之间的数字
如“应”所示,这是一项要求。因此,您的文件不仅不是有效的PDF/a文档,甚至不是有效的PDF
如果你想知道为什么AdobeReader不抱怨。。。Adobe在附录H.3实施说明中的PDF 1.7参考文件中指出,他们的软件对PDF标题的要求非常宽松:
Acrobat查看器只要求头显示在文件的前1024字节内的某个位置
因此,您有一个无效的PDF,Adobe Viewer仍会显示该PDF
页脚
同样根据PDF规范
7.5.5文件拖车
PDF文件的尾部使合规读者能够快速找到交叉参考表和某些特殊对象。合格的读者应该从末尾阅读PDF文件。文件的最后一行应仅包含文件结束标记,%%EOF
Adobe查看器再次接受一些不符合此要求的文件;根据Adobe PDF参考资料:
Acrobat查看器仅要求%%EOF标记出现在文件最后1024字节的某个位置
由于文件的最后一行不是%%EOF,这是它无法满足的有效PDF文件的另一个要求
关于你的索赔:
但是当我用任何阅读器打开文件时,它的格式确实是pdf-a
Adobe Reader不会检查文件是否为有效的PDF/a,它只报告文件声称的内容。与发送该文件的人交谈。PDF文件必须以%PDF开头,而不是以“0ƒ;f*†H†÷V0ƒ;Q10`†Heƒ;‡=ƒ8”开头,即使在签名时也是如此。Re“但是当我用任何阅读器打开文件时,它的格式确实是pdf-a”不,不是。蓝色栏中的文本为“文件声明符合性”。索赔不是事实。