Как узнать, поврежден ли PDF-файл перед объединением с помощью iTextSharp в C # - PullRequest
0 голосов
/ 24 ноября 2011

Я использую iTextSharp для объединения PDF-страниц.

Но они могут быть поврежденными PDF.

Мой вопрос: как программно проверить, поврежден pdf или нет?

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Я обычно проверяю заголовок файла, чтобы увидеть, что это за файл.Заголовок PDF всегда начинается с %PDF.

Конечно, файл может быть поврежден ПОСЛЕ заголовка, тогда я не совсем уверен, есть ли другой способ, кроме как просто попытаться открыть и прочитать документ.Когда файл поврежден, открытие ИЛИ чтения из этого документа, вероятно, дает исключение.Я не уверен, что iTextSharp выдает всевозможные исключения, но я думаю, что вы можете проверить это.

0 голосов
/ 24 ноября 2011

Один из способов, поскольку вы объединяете файлы, - это обернуть ваш код в блок 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) достаточно умны, чтобы исправлять их на лету.

...