Подтвердить что ты не робот

Исключение iTextSharp: подпись заголовка PDF не найдена

Я использую iTextSharp для чтения содержимого документов PDF:

  PdfReader reader = new PdfReader(pdfPath);

                using (StringWriter output = new StringWriter())
                {
                    for (int i = 1; i <= reader.NumberOfPages; i++)
                        output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()));

                    reader.Close();
                    pdfText = output.ToString();
                }

В 99% случаев он работает отлично. Однако есть этот файл PDF, который иногда вызывает это исключение:

Подпись заголовка PDF не найдена. StackTrace: at iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader() в iTextSharp.text.pdf.PdfReader.ReadPdf() в iTextSharp.text.pdf.PdfReader..ctor(String filename, Byte [] ownerPassword) в Reader.PDF.DownloadPdf(String url) в C:\Documents\Visual Studio

Что раздражает то, что я не всегда могу воспроизвести ошибку. Иногда это работает, иногда это не так. Кто-нибудь столкнулся с этой проблемой?

4b9b3361

Ответ 1

После некоторых исследований я обнаружил, что эта проблема связана либо с поврежденным файлом во время генерации PDF, либо с ошибкой, связанной с объектом в документе, который не соответствует стандарту PDF, реализованному в iTextSharp. Это также происходит, только когда вы читаете файл PDF с диска.

Я не нашел полного решения проблемы, но только обходной путь. Я прочитал PDF-документ, используя объект PdfReader itextsharp, и посмотрю, произошла ли ошибка или исключение, прежде чем читать файл в нормальной работе.

Итак, запустите что-то похожее на это:

private bool IsValidPdf(string filepath)
{
    bool Ret = true;

    PdfReader reader = null;

    try
    {
        reader = new PdfReader(filepath);
    }
    catch
    {
        Ret = false;
    }

    return Ret;
}