确定byte []是否是pdf文件

时间:2011-05-31 11:38:23

标签: c# .net file pdf bytearray

有没有办法在不打开的情况下检查byte []是否为pdf?

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

5 个答案:

答案 0 :(得分:47)

检查数组的前4个字节。

如果这些是0x25 0x50 0x44 0x46,那么它很可能是PDF文件。

答案 1 :(得分:17)

前四个字节应为:0x25 0x50 0x44 0x46(十六进制格式,ASCII格式为%PDF)。您可以找到其他格式的“幻数”here

答案 2 :(得分:10)

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

答案 3 :(得分:4)

虽然明确的答案和其他答案都是正确的,但它们在100%的时间内都不会成功。问题是PDF规范说%PDF-1.x只需要在前1024个字节而不是前4个。有些程序会在%PDF之前添加信息并且仍然有效。

我建议您查看以下Stack Overflow问题的答案:How to detect if a file is PDF or TIFF?

答案 4 :(得分:0)

我一直遇到这个问题。我们使用了一些来自GitHub的Magic库,它很好地将内容确定为PDF。但是,我们收到的一些文件

  1. 在PDF阅读器中打开
  2. %PDF-之前有不同的起始字节(5)
  3. 以这8个字节0A 0D 0A 30 0D 0A 0D 0A
  4. 结尾

因此,当带有PDF扩展名的文件与其他文件不匹配时,我添加了逻辑以检查这些起始字节5-9和结尾8个字节。