2011-11-24 76 views

回答

1

我通常會檢查一個文件的標題以查看它是什麼類型的文件。 PDF標題始終始於%PDF

Ofcourse該文件可能會損壞後的頭,然後我不確定是否有任何其他方式,而不是隻是試圖打開和從文檔中讀取。當文件損壞時,打開或讀取該文件可能會導致異常。我不確定iTextSharp會拋出各種異常,但我認爲你可以測試一下。

0

的一種方式,因爲你合併文件,是包裝你的代碼在try...catch塊:

Dictionary<string, Exception> errors = 
    new Dictionary<string, Exception>(); 
document.Open(); 
PdfContentByte cb = writer.DirectContent; 
foreach (string filePath in testList) { 
    try { 
    PdfReader reader = new PdfReader(filePath); 
    int pages = reader.NumberOfPages; 
    for (int i = 0; i < pages;) { 
     document.NewPage(); 
     PdfImportedPage page = writer.GetImportedPage(reader, ++i); 
     cb.AddTemplate(page, 0, 0); 
    } 
    } 
// **may** be PDF spec, but not supported by iText  
    catch (iTextSharp.text.exceptions.UnsupportedPdfException ue) { 
    errors.Add(filePath, ue); 
    } 
// invalid according to PDF spec 
    catch (iTextSharp.text.exceptions.InvalidPdfException ie) { 
    errors.Add(filePath, ie); 
    } 
    catch (Exception e) { 
    errors.Add(filePath, e); 
    } 
} 
if (errors.Keys.Count > 0) { 
    document.NewPage(); 
    foreach (string key in errors.Keys) { 
    document.Add(new Paragraph(string.Format(
     "FILE: {0}\nEXCEPTION: [{1}]: {2}", 
     key, errors[key].GetType(), errors[key].Message 
    ))); 
    } 
} 

其中testList是文件路徑,你歸併的PDF文檔的集合。

另外還需要考慮您定義爲損壞的。有許多不符合PDF規範的PDF文檔,但是一些讀者(Adobe Reader)足夠聰明,可以即時修復/修復它們。

相關問題