如何检测PDF文档是不是损坏了?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检测PDF文档是不是损坏了?相关的知识,希望对你有一定的参考价值。
我从网上下载了一些PDF格式的书籍,最近没有没有时间一一翻阅,又担心这些PDF文件是否损坏,请问有没有一个可靠的方法检测PDF文档是否损坏?
能打开就说明文件没有损坏?会不会中间的有几页损坏或者无法显示呢?
你说的是不会发生的,因为一个文档的好坏,在一开始就看能不能打开,如果不能打开的话,就有可能是文件损坏了,如果能够打开,它不会是在中间坏掉的,只有在一开始就提示文件打不开,或文件已损坏。 参考技术B 你电脑上应该装powerpoint了吧,或装个adobe reader .
只要可以打开就是好的,你可以保存下来.
文件如果中间有坏的那不大可能,因为你下的是一个整体.除非制作者故意的..呵呵
否则,肯定就是坏的. 参考技术C 没动它当然不会坏了,计算机文件又不像其他实物,放久了会坏掉,放心啦。
想打开检查的话,建议你下个Foxit Reader 2.2,比adobe reader小多了,才1.6M,功能也够了。
http://www.skycn.com/soft/21061.html 参考技术D 应该不会
没有检测的软件啊。
如果在你的机子上打不开
拷到别人机子上也打不开就是损坏
iText pdf完整性检查
我有一个pdf文件,其中:
- Rev. 1包含文档时间戳
- 在加时间戳之后添加了一些文本而没有创建新版本
- 在Rev.2文件中签署
这是来自签名面板
如何使用iText 5验证pdf的完整性?我想检测一下,有人在时间戳之后(Rev.1和Rev.2之间,或Rev.2之后)更改文档。
iText 5是否有可能在Adobe Acrobat评估时检测文档更改,如屏幕所示:
- “自签署以来,文件已被更改或损坏。”
- '2 Pages(s)Modified'
下面的伪JAVA代码,总是返回完整性检查OK?对于Rev.1 timestampField,则为true
PdfReader reader = new PdfReader("C:/tstEditSign.pdf");
AcroFields acro = reader.getAcroFields();
PdfPKCS7 pkcs7 = acro.verifySignature("timestampField");
System.out.println("Integrity check OK? " + pkcs7.verify());
感谢您提供任何帮助或提示,如何解决此问题。
请注意,有两种方法可以违反集成PDF签名的完整性:
- 它标记的PDF中的字节范围实际上已更改。
- 在其标记的字节范围引入不允许的更改之后的增量更新中的添加。
iText可以识别第一种类型的更改(使用类似您的伪代码的代码)但它不能开箱即用,区分增量更新中允许和不允许的更改。
Backgrounds
具有多个签名的PDF具有如下图所示的结构:原始版本中的签名signature1仅标记此原始版本的字节。签名2然后签署原始版本加上版本2等的更改。(有关详细信息,请阅读here和here。)
但是根据PDF规范,只允许后续版本应用一组有限的更改,这组更改可能取决于原始签名的属性。 (有关详细信息,请阅读here。)
您的代码,特别是pkcs7.verify()
,仅检查签名是否仍然正确地标记它适用的字节。但是,它不会检查第一个签名是否允许后续添加引入的更改类型。
实际上我并不知道有任何非Adobe软件执行该检查,甚至Adobe的检查也不完美:只有在以类似于Adobe软件应用它的方式应用它们时,它们才会偏向于识别允许的更改。这有时会导致相互矛盾的陈述,例如:都
- 文档作者不允许在应用此签名后对本文档所做的一些更改。
- 自应用此签名以来,未对此文档进行任何更改。
在
Implementing a check for (dis)allowed changes
虽然iText不提供开箱即用的检查,但它确实为您提供了一个基础框架,您可以自己尝试并实施它。特别是,您可以检索文档的每个完整签名修订版本,并在简单PDF对象的级别上比较它们的结构。
遗憾的是,允许和不允许的更改仅根据文档在查看器中的外观或其具有的行为来描述,而不是根据允许的哪些精确的低级别对象添加。这将使努力变得非常重要。
以上是关于如何检测PDF文档是不是损坏了?的主要内容,如果未能解决你的问题,请参考以下文章
怎么样快捷判断WORD\EXCEL\PDF\图片等文件,是不是已经损坏,或者判断文件是不是完好。