2011-09-20 178 views
0

我們有一個應用程序生成PDF文件,有些時候出於某種未知的原因,其中一個PDF文件被損壞,即它被創建損壞,我們需要檢查這個pdf在繼續閱讀其他pdf文件之前是否被破壞,如果它已損壞,我們需要重新創建它。檢查一個PDF文件是否被損壞使用C#

謝謝

+1

什麼是「破壞」從技術角度看是什麼意思?怎麼了? 0字節文件,只有x字節被複制,內部亂碼等。 –

+0

要補充說明的是,幻數沒有正確設置?它是否產生直到一個點,然後突然你有胡言亂語? – tafoo85

+0

jpeg改名爲pdf? –

回答

3

看看PDF解析器,並嘗試使用它們來檢測腐敗。例如,ghostscript

聲明:我Atalasoft

工作在DotImage Document Imaging,我們包括一些PDF解析類,如果該文件已損壞,將拋出。

如果您添加了我們的PDF閱讀器附加組件,我們將嘗試對PDF進行柵格化 - 如果它已損壞,將拋出。如果問題缺失,則可以在結果圖像中查找它們。

0

您可以查看PDF標題是這樣的:

public bool IsPDFHeader(string fileName)  
{ 

    byte[] buffer = null; 
    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 
    BinaryReader br = new BinaryReader(fs); 

    long numBytes = new FileInfo(fileName).Length; 
    //buffer = br.ReadBytes((int)numBytes); 
    buffer = br.ReadBytes(5); 

    var enc = new ASCIIEncoding(); 
    var header = enc.GetString(buffer); 

    //%PDF−1.0 
    // If you are loading it into a long, this is (0x04034b50). 
    if (buffer[0] == 0x25 && buffer[1] == 0x50 
     && buffer[2] == 0x44 && buffer[3] == 0x46) 
    { 
     return header.StartsWith("%PDF-"); 
    } 
    return false; 
} 
+0

以非常複雜的方式檢查並仔細檢查文件是否以「%PDF-」開頭,這是PDF文件的魔術字節。但這不是合適的腐敗測試,它應該測試整個文件。 – mkl

+0

這個答案只是https://stackoverflow.com/questions/3108201/detect-if-pdf-file-is-correct-header-pdf的副本 – Bidou