2010-09-13 4 views
2

d'abord excusez-moi pour mon mauvais anglais! Je veux rechercher dans le document pdf un mot comme "bonjour". Je dois donc lire chaque page en pdf par PdfTextExtractor. Je l'ai bien fait. Je peux lire tous les mots de chaque page séparément et les enregistrer dans un tampon de chaînes. mais quand je pousse ce code dans la boucle For, (par exemple de la page 1 à 7 pour la recherche dedans) les mots de la page précédente resteront dans le tampon de chaîne. J'espère que vous comprenez mon problème. Tanx tous. ceci est mon code:Problème avec PdfTextExtractor dans itext!

 PdfReader reader2 = new PdfReader(openFileDialog1.FileName); 
     int pagen = reader2.NumberOfPages; 
     reader2.Close(); 
     ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy(); 
     for (int i = 1; i < pagen; i++) 
     { 
      textBox1.Text = ""; 
      PdfReader reader = new PdfReader(openFileDialog1.FileName); 

      String s = PdfTextExtractor.GetTextFromPage(reader, i, its); 
      //MessageBox.Show(s.Length.ToString()); 
      //PdfTextArray h = new PdfTextArray(s); 

      // 
      // s = ""; 
      s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s))); 
      textBox1.Text = s; 
      reader.Close(); 

}

Répondre

5

SimpleTextExtractionStrategy ne vous permet pas de le réinitialiser malheureusement, vous devez donc déplacer votre « nouvelle SimpleTextExtractionStrategy() » dans la boucle au lieu de réutiliser le même objet.

2

Il y a un autre problème potentiel dans l'instruction qui contrôle votre boucle:

for (int i = 1; i < pagen; i++) 

Si pagen = 1, la boucle est pas exécutée du tout. Il faut lire:

for (int i = 1; i <= pagen; i++) 
0
public string ReadPdfFile(object Filename,DataTable ReadLibray) 
    { 
    PdfReader reader2 = new PdfReader((string)Filename); 
    string strText = string.Empty; 

    for (int page = 1; page <= reader2.NumberOfPages; page++) 
    { 
     ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy();  
     PdfReader reader = new PdfReader((string)Filename); 
     String s = PdfTextExtractor.GetTextFromPage(reader, page, its); 

     s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s))); 
     strText = strText + s; 
     reader.Close(); 
     } 
     return strText; 
    } 

Ce code est très utile de lire à l'aide itext

pDf
+0

Quelle est la ligne "s = Encoding.UTF8.GetString (..." destinée à faire –

+0

@? ThomasS, bonne question! On dirait qu'il s'agit d'encoder le texte, de changer l'encodage et de le décoder, en d'autres termes, probablement rien d'utile – Sam

+0

@ThomasS: J'ai utilisé cette ligne de code parce que j'essayais de lire les caractères persans. –

Questions connexes