确定byte []是否是pdf文件

rik*_*rik 26 .net c# pdf bytearray file

有没有办法检查一个byte []是不是打开的pdf?

我有一些代码来显示byte []列表作为pdf缩略图.我以前知道所有byte []都是pdf的,因为我们过滤了servlet只返回这些.现在需求已经改变,我需要恢复所有文件类型.有没有办法检查字节[]是什么,或更具体地确定它是不是,pdf?

a_h*_*ame 47

检查数组的前4个字节.

如果是0x25 0x50 0x44 0x46那么它很可能是一个PDF文件.

  • 看起来这些字节前缀为UTF-8格式的PDF.这意味着你不能盲目检查0x25 0x50 ... (6认同)
  • 我用这个答案已经有好几年了,现在我正盯着一个以0xEF 0XBB 0XBF开头的PDF.任何的想法? (5认同)
  • *“较旧的 PDF 文件可能在前 1,024 字节的任何地方都具有 %PDF 魔力”* - 再次是的,就像“在野外存在类似的文档,其中大多数都较旧”,但尽管如此,这些 pdf 从来都不是“有效”的 pdf ,只是处理器不够宽松,忽略了该错误。 (2认同)

cho*_*dze 16

前四个字节应该是:( 0x25 0x50 0x44 0x46十六进制格式,ASCII格式%PDF).您可以在此处找到其他格式的"幻数"


Dan*_*elB 9

据我所知,所有PDF的开头都是%PDF,所以你可以检查这个字符串的第一个字节.


Con*_*nic 5

当标记的答案和其他答案正确时,它们将不会100%地成功。问题是PDF规范说%PDF-1.x只需要在前1024个字节中,而不必在前4个字节中。某些程序会在%PDF之前添加信息,并且仍然有效。

我建议查看以下堆栈溢出问题的答案:如何检测文件是PDF还是TIFF?

  • ... 只是 Adob​​e PDF 参考资料的***实现说明***说“**Acrobat 查看器仅要求标题出现在文件的前 1024 字节内的某个位置。**”因此,“某些程序将在 %PDF 之前添加信息并且仍然有效。” 是错误的,创建的 PDF ***无效***,尽管已损坏,但它们只是被许多查看者接受并显示;它们也被许多其他 PDF 处理器拒绝。 (3认同)
  • 您认为哪些标准有效?它们显然违反了规范(这是ISO规范,不是某些Adobe参考)。诸如Adobe acrobat和Reader之类的选定产品可能会接受这些文件,但这不会使它们有效。 (3认同)
  • *问题是 PDF 规范说 %PDF-1.x 只需要在前 1024 个字节而不是前 4 个* - 这是错误的,规范 (ISO 32000-1) 明确指出“**第一个PDF 文件的行应是由 5 个字符 %PDF- 后跟格式为 1.N 的版本号组成的标题,其中 N 是 0 到 7** 之间的数字。甚至 Adob​​e PDF 参考文献也同样说“PDF 文件的第一行是标识文件符合的 PDF 规范版本的标题”,并提供与规范相同的变体。仅仅... (2认同)
  • 不,较旧的 pdf 参考文献还需要以“%PDF”开头的 pdf 文件。仅在“实施说明”中,它指出“Acrobat 查看器”仅要求它出现在文件的前 1024 个字节中。因此,读者比规范更宽松。 (2认同)