2016-11-14 6 views
2

enter image description here Ich habe diesen Code und ich verwende es, um den Text einer PDF zu nehmen. Es ist großartig für ein PDF in Englisch, aber wenn ich versuche, den Text in Arabisch zu extrahieren, zeigt es mir so etwas.Extrahieren von arabischem Text in C# mit Hilfe von itextsharp

") + n 9 n < +, +) + $ # $ + $ F% 9 & < $:;."

using (PdfReader reader = new PdfReader(path)) 
{ 
    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); 
    String text = ""; 
    for (int i = 1; i <= reader.NumberOfPages; i++) 
    { 
     text = PdfTextExtractor.GetTextFromPage(reader, i,strategy); 
    } 
+0

Das sieht umgekehrt wie das pdf nicht enthält die Informationen, die für die Textextraktion gemäß der PDF-Spezifikation benötigt werden. – mkl

+0

Haben Sie das versucht http://stackoverflow.com/questions/35436158/itextsharp-cant-extract-pdf-unicode-content-in-c-sharp? – KMoussa

+0

nein, es gibt viele Wörter, aber die itextsharp Codes die arabischen Wörter –

Antwort

2

ich hatte die Strategie wie diese

var t = PdfTextExtractor.GetTextFromPage(reader, i, new LocationTextExtractionStrategy()); 
var te = Convert(t); 

und diese Funktion zu ändern, um die arabischen Wörter und halten Sie die englische

private string Convert(string source) 
     { 
      string arabicWord = string.Empty; 
      StringBuilder sbDestination = new StringBuilder(); 

      foreach (var ch in source) 
      { 
       if (IsArabic(ch)) 
        arabicWord += ch; 
       else 
       { 
        if (arabicWord != string.Empty) 
         sbDestination.Append(Reverse(arabicWord)); 

        sbDestination.Append(ch); 
        arabicWord = string.Empty; 
       } 
      } 

      // if the last word was arabic  
      if (arabicWord != string.Empty) 
       sbDestination.Append(Reverse(arabicWord)); 

      return sbDestination.ToString(); 
     } 


     private bool IsArabic(char character) 
     { 
      if (character >= 0x600 && character <= 0x6ff) 
       return true; 

      if (character >= 0x750 && character <= 0x77f) 
       return true; 

      if (character >= 0xfb50 && character <= 0xfc3f) 
       return true; 

      if (character >= 0xfe70 && character <= 0xfefc) 
       return true; 

      return false; 
     } 

     // Reverse the characters of string 
     string Reverse(string source) 
     { 
      return new string(source.ToCharArray().Reverse().ToArray()); 
     } 
+0

Keines der Zeichen, die die Ausgabe in Ihrer Frage zeigt, ist in den Bereichen, für die in 'IsArabic' getestet wurde. Wenn der Code aus Ihrer Antwort wirklich hilft, haben Sie daher die Daten, die Sie wirklich in Ihrer Frage extrahiert haben, nicht präsentiert ... – mkl

+0

tatsächlich passiert es für einige und besonders wenn es alte Version war :) –

+0

OK, vielen Dank für das Teilen Code. Ich bin sicher, dass es auch für andere hilfreich sein wird. –