2016-03-10 2 views
1

J'utilise le dernier iTextSharp lib de nuGet (5.5.8) pour analyser du texte à partir d'un fichier pdf. Le problème que je suis confronté est que la méthode GetTextFromPage ne renvoie pas seulement le texte de la page qu'il devrait, il renvoie également le texte de la page précédente. Voici mon code:Pourquoi GetTextFromPage de iTextSharp retourne-t-il des chaînes plus longues et plus longues?

var url = "https://www.oslo.kommune.no/getfile.php/Innhold/Politikk%20og%20administrasjon/Etater%20og%20foretak/Utdanningsetaten/Postjournal%20Utdanningsetaten/UDE03032016.pdf"; 
var strategy = new SimpleTextExtractionStrategy(); 
using (var reader = new PdfReader(new Uri(url))) 
{ 
    for (var page = 1; page <= reader.NumberOfPages; page++) 
    { 
     var textFromPage = PdfTextExtractor.GetTextFromPage(reader, page, strategy); 
     Console.WriteLine(textFromPage.Length); 
    } 
} 

La sortie ressemble à ceci, ce qui n'est pas ce dont j'ai besoin. J'ai besoin du texte qui est réellement sur la page:

1106 
2248 
3468 
4835 
5167 
6431 
7563 
8860 
9962 
11216 
12399 
13640 
14690 
15760 

Des idées?

Répondre

6

Vous nourrissez toutes les pages dans la même stratégie d'extraction de texte:

var strategy = new SimpleTextExtractionStrategy(); 
using (var reader = new PdfReader(new Uri(url))) 
{ 
    for (var page = 1; page <= reader.NumberOfPages; page++) 
    { 
     var textFromPage = PdfTextExtractor.GetTextFromPage(reader, page, strategy); 
     ... process textFromPage ... 
    } 
} 

Comme vous voulez traiter le contenu de chaque page par lui-même, créer à la place une nouvelle stratégie pour chaque page:

using (var reader = new PdfReader(new Uri(url))) 
{ 
    for (var page = 1; page <= reader.NumberOfPages; page++) 
    { 
     var strategy = new SimpleTextExtractionStrategy(); 
     var textFromPage = PdfTextExtractor.GetTextFromPage(reader, page, strategy); 
     ... process textFromPage ... 
    } 
} 
+0

Je viens d'avoir exactement le même problème avec 5.5.9. La réponse de @mkl était claire et parfaitement exacte. – TonyG