Исключение 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
Что раздражает то, что я не всегда могу воспроизвести ошибку. Иногда это работает, иногда это не так. Кто-нибудь столкнулся с этой проблемой?
Ответы
Ответ 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;
}