2012-05-16 9 views
13

नहीं मिला मैं पीडीएफ दस्तावेजों की सामग्री पढ़ने की iTextSharp उपयोग कर रहा हूँ:iTextSharp अपवाद: पीडीएफ हैडर हस्ताक्षर

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% समय यह सिर्फ ठीक काम करता है की

पीडीएफ हैडर हस्ताक्षर नहीं मिला: हालांकि, इस एक पीडीएफ फ़ाइल है कि कभी कभी यह अपवाद फेंक नहीं है। StackTrace: iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader() iTextSharp.text.pdf.PdfReader.ReadPdf() पर पर iTextSharp.text.pdf.PdfReader..ctor पर (स्ट्रिंग फ़ाइल नाम, बाइट [] ownerPassword) सी में Reader.PDF.DownloadPdf (स्ट्रिंग यूआरएल) पर: \ दस्तावेज़ \ दृश्य स्टूडियो

क्या कष्टप्रद है कि मैं हमेशा त्रुटि पुन: पेश नहीं कर सकते। कभी-कभी यह काम करता है, कभी-कभी ऐसा नहीं होता है। क्या किसी को इस समस्या का सामना करना पड़ा है?

उत्तर

16

कुछ शोध के बाद, मुझे पता चला है कि यह समस्या पीडीएफ पीढ़ी के दौरान दूषित फ़ाइल से संबंधित है, या दस्तावेज़ में किसी ऑब्जेक्ट से संबंधित एक त्रुटि से संबंधित है जो iTextSharp में लागू किए गए पीडीएफ मानक के अनुरूप नहीं है। यह तब भी होता है जब आप डिस्क से पीडीएफ फ़ाइल से पढ़ते हैं।

मुझे समस्या का पूरा समाधान नहीं मिला है, लेकिन केवल एक कामकाज है। मैंने जो किया है वह PdfReader itextsharp ऑब्जेक्ट का उपयोग करके पीडीएफ दस्तावेज पढ़ता है और देखें कि सामान्य ऑपरेशन में फ़ाइल पढ़ने से पहले कोई त्रुटि या अपवाद होता है या नहीं।

तो यह करने के लिए कुछ इसी तरह से चल रहा है:

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

    PdfReader reader = null; 

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

    return Ret; 
} 
+4

यह मुझे कुछ समय लिया, लेकिन मैं अंत में पता लगा है कि फाइल वास्तव में दूषित है। दोष उस वेबसाइट पर जाता है जिसने पीडीएफ बनाया है, और iTextSharp के साथ एक बग नहीं है। मेरे प्रश्न का उत्तर देने के लिए समय निकालने के लिए धन्यवाद। – broke

+2

मैं पुष्टि कर सकता हूं कि अगर आप स्टीम के साथ-साथ डिस्क से पाठक लोड करते हैं तो यह हो सकता है :) – JoshBerke

+1

बाहर निकलता है मैं अपने मामले में गलत फ़ाइल देख रहा था। फ़ाइल नाम पहले से उपयोग की जा रही संपत्तियों (छवियों) में से एक का जिक्र कर रहा था, यानी एक jpg एक पीडीएफ नहीं है, दोह :), तो वास्तव में यह एक दूषित पीडीएफ था (या बिल्कुल भी नहीं)। धन्यवाद - मुझे सही रास्ते पर मिला। –