2012-05-16 11 views
13

estoy usando iTextSharp para leer el contenido de PDF documentos:iTextSharp excepción: la firma de cabecera PDF no encontró

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% de las veces funciona muy bien. Sin embargo, no es éste PDF archivo que a veces lanzar esta excepción:

PDF firma de cabecera no se encuentra. StackTrace: en iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader() en iTextSharp.text.pdf.PdfReader.ReadPdf() en iTextSharp.text.pdf.PdfReader..ctor (filename String, Byte [] ownerPassword) en Reader.PDF.DownloadPdf (String url) en C: \ Documents \ Visual Studio

lo molesto es que no siempre se puede reproducir el error. A veces funciona, a veces no funciona. ¿Alguien ha encontrado este problema?

Respuesta

16

Después de algunas investigaciones, descubrí que este problema se relaciona con la corrupción de un archivo durante la generación de PDF o un error relacionado con un objeto del documento que no cumple con el estándar PDF implementado en iTextSharp. También parece suceder solo cuando lees un archivo PDF del disco.

No he encontrado una solución completa al problema, pero solo una solución alternativa. Lo que he hecho es leer el documento PDF utilizando el objeto itextsharp de PdfReader y ver si ocurre un error o excepción antes de leer el archivo en una operación normal.

Entonces, ejecutar algo similar a esto:

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

    PdfReader reader = null; 

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

    return Ret; 
} 
+4

Me tomó un tiempo, pero finalmente me di cuenta de que el archivo fue hecho dañado. La culpa recae en el sitio web que creó el PDF, y no en un error con iTextSharp. Gracias por tomarse el tiempo para responder a mi pregunta. – broke

+2

Puedo confirmar que esto puede ocurrir si carga el lector desde un dispositivo de vapor y desde el disco :) – JoshBerke

+1

Resulta que estaba buscando el archivo incorrecto en mi caso. El nombre del archivo se refería a uno de los activos (imágenes) que estaba usando anteriormente, es decir, un jpg no es un pdf, doh :), por lo que era en realidad un PDF dañado (o no uno en absoluto). Gracias - me puso en el camino correcto. –

Cuestiones relacionadas