2012-04-13 7 views
21

का उपयोग करके पीडीएफ से टेक्स्ट निकालें क्या पीडीएफएसआरपी के साथ पीडीएफ फाइल से सादे पाठ निकालने की संभावना है? मैं अपने लाइसेंस के कारण iTextSharp का उपयोग नहीं करना चाहता हूं।सी # पीडीएफएसआरपी

आपके उत्तरों के लिए धन्यवाद।

संपादित करें: मुझे पता है कि यह संभव है। लेकिन मैं यह कैसे करूँ?

+0

बस सोच रहा है, क्यों डाउनवॉट्स? (लेखक को प्रश्न सुधारने में मदद करने के लिए कोई स्पष्ट टिप्पणी नहीं है।) –

उत्तर

6

पीडीएफएसएचपी पीडीएफ से पाठ निकालने के लिए सभी टूल्स प्रदान करता है। प्रत्येक पृष्ठ के भीतर आदेशों तक पहुंचने के लिए ContentReader कक्षा का उपयोग करें और टीजे/टीजे ऑपरेटरों से स्ट्रिंग निकालें।

मैंने github पर एक सरल कार्यान्वयन अपलोड किया है।

+1

कई पीडीएफ पर CString.Value कुछ जंक लौटाता है (उदा। ओपनऑफिस.org का उपयोग करके पीडीएफ बनाएं और इस विधि का उपयोग करके इसे आयात करने का प्रयास करें)। –

11

मैंने इसे किसी भी तरह से लागू किया है कि डेविड ने इसे कैसे किया।

{ 
     // .... 
     var page = document.Pages[1]; 
     CObject content = ContentReader.ReadContent(page); 
     var extractedText = ExtractText(content); 
     // ... 
    } 

    private IEnumerable<string> ExtractText(CObject cObject) 
    { 
     var textList = new List<string>(); 
     if (cObject is COperator) 
     { 
      var cOperator = cObject as COperator; 
      if (cOperator.OpCode.Name== OpCodeName.Tj.ToString() || 
       cOperator.OpCode.Name == OpCodeName.TJ.ToString()) 
      { 
       foreach (var cOperand in cOperator.Operands) 
       { 
        textList.AddRange(ExtractText(cOperand)); 
       } 
      } 
     } 
     else if (cObject is CSequence) 
     { 
      var cSequence = cObject as CSequence; 
      foreach (var element in cSequence) 
      { 
       textList.AddRange(ExtractText(element)); 
      } 
     } 
     else if (cObject is CString) 
     { 
      var cString = cObject as CString; 
      textList.Add(cString.Value); 
     } 
     return textList; 
    } 
+0

आपको स्ट्रिंगबिल्डर को छीनना नहीं चाहिए था, पीडीएफ काफी बड़े हैं और यह समाधान एक बड़ी अनावश्यक स्मृति खपत का कारण बन जाएगा। –

19

सर्जियो का जवाब लिया और कुछ विस्तार तरीकों बनाया: यहाँ मेरी कोड है। मैंने तारों के संचय को एक पुनरावर्तक में भी बदल दिया।

public static class PdfSharpExtensions 
{ 
    public static IEnumerable<string> ExtractText(this PdfPage page) 
    {  
     var content = ContentReader.ReadContent(page);  
     var text = content.ExtractText(); 
     return text; 
    } 

    public static IEnumerable<string> ExtractText(this CObject cObject) 
    { 
     if (cObject is COperator) 
     { 
      var cOperator = cObject as COperator; 
      if (cOperator.OpCode.Name== OpCodeName.Tj.ToString() || 
       cOperator.OpCode.Name == OpCodeName.TJ.ToString()) 
      { 
       foreach (var cOperand in cOperator.Operands) 
        foreach (var txt in ExtractText(cOperand)) 
         yield return txt; 
      } 
     } 
     else if (cObject is CSequence) 
     { 
      var cSequence = cObject as CSequence; 
      foreach (var element in cSequence) 
       foreach (var txt in ExtractText(element)) 
        yield return txt; 
     } 
     else if (cObject is CString) 
     { 
      var cString = cObject as CString; 
      yield return cString.Value; 
     } 
    } 
} 
+0

मैं पीडीएफशर्प लाइब्रेरी का उपयोग कर रहा हूं लेकिन यह कहता है कि ContentReader क्लास संदर्भ से बाहर है। समस्या क्या हो सकती है? –

+0

कंटेंट रीडर क्लास संदर्भ से बाहर है। –

+2

विरोध नहीं कर सका। आईडीके इसका क्या अर्थ है या इसे कैसे ठीक किया जाए। मैं पीडीएफ की तरह प्लेग की तरह काम करने से बचने की कोशिश करता हूं क्योंकि उनके साथ काम करने के लिए उपकरण बकवास और नाटक कर रहे हैं कि एक मानव पठनीय प्रारूप मशीन पठनीय है, कुल मूर्खों की भूल है। –