如何检查文档是否为有效的PDF文档

问题描述:

我正在创建一个应用程序,用户在其中上传服务器上不同类型的文档。我正在验证不同类型的文件,如jpeg,jpg,PNG,TIF,TIFF,GIF,BMP,ICO。如何检查文档是否为有效的PDF文档

Dictionary<string, byte[]> imageHeader = new Dictionary<string, byte[]>(); 
    imageHeader.Add("JPG", new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 }); 
    imageHeader.Add("JPEG", new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 }); 
    imageHeader.Add("PNG", new byte[] { 0x89, 0x50, 0x4E, 0x47 }); 
    imageHeader.Add("TIF", new byte[] { 0x49, 0x49, 0x2A, 0x00 }); 
    imageHeader.Add("TIFF", new byte[] { 0x49, 0x49, 0x2A, 0x00 }); 
    imageHeader.Add("GIF", new byte[] { 0x47, 0x49, 0x46, 0x38 }); 
    imageHeader.Add("BMP", new byte[] { 0x42, 0x4D }); 
    imageHeader.Add("ICO", new byte[] { 0x00, 0x00, 0x01, 0x00 }); 

我也想为pdf,docx,excel,PPT做同样的事情。请帮我找到这些文件的十六进制代码。

如果有人试图上传无效文档,我也想验证损坏的文档。

+1

验证docx会非常复杂,因为主要的二进制格式只是一个ZIP存档,但内容是特定的。所以你真的想验证它实际上是docx,或者“可能是docx”,意思是一个ZIP压缩文件,它可能是xlsx,或者只是一个随机的文件集合?另外一个有效的PDF文档将需要实际解析整个文件,但检查开始可能表明它可能是一个。 – 2015-02-23 10:19:55

+0

我只想验证上面提到的文档 – Bheeshamteche 2015-02-23 10:55:12

libmagic是这类事情的图书馆。它落后于现代Unix系统中的file命令。你可以通过FFI /绑定使用它,或者只是看他们的magic number database