有没有办法在不打开的情况下检查byte []是否为pdf?
我有一些代码来显示byte []列表作为pdf缩略图。我以前知道所有byte []都是pdf的,因为我们过滤了servlet只返回这些。现在需求已经改变,我需要恢复所有文件类型。有没有办法检查字节[]是什么,或更具体地确定它是不是,pdf?
答案 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。但是,我们收到的一些文件
%PDF-
之前有不同的起始字节(5)0A 0D 0A 30 0D 0A 0D 0A
因此,当带有PDF扩展名的文件与其他文件不匹配时,我添加了逻辑以检查这些起始字节5-9和结尾8个字节。