2016-03-10 4 views
1

Я использую последнюю версию iTextSharp lib из nuGet (5.5.8), чтобы разобрать текст из pdf-файла. Проблема, с которой я сталкиваюсь, заключается в том, что метод GetTextFromPage не только возвращает текст со страницы, которую он должен, но также возвращает текст с предыдущей страницы. Вот мой код:Почему GetTextFromPage из iTextSharp возвращает более длинные и длинные строки?

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); 
    } 
} 

Результат выглядит так, и это не то, что мне нужно. Мне нужен текст, который на самом деле находится на странице:

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

Любые идеи?

ответ

6

Вы кормите все страницы в ту же стратегию извлечения текста:

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 ... 
    } 
} 

Как вы хотите обработать содержание каждой страницы самого по себе, вы должны вместо этого создать новую стратегию для каждой страницы:

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

У меня была точно такая же проблема с 5.5.9. Ответ от @mkl был четким и совершенно точным. – TonyG