Некоторые прослушиватели событий, в частности большинство стратегий извлечения текста, не предназначены для повторного использования на нескольких страницах. Вместо этого вы должны создать новый экземпляр для каждой страницы.
Как правило, каждый такой слушатель, который собирает информацию во время синтаксического анализа страницы и впоследствии позволяет вам получить доступ к этим данным (например, стратегии извлечения текста позволяют вам доступ к собранному тексту страницы), скорее всего, его нужно создавать отдельно для каждой страницы, если вы не хотите, чтобы данные со всех страниц накапливались.
Таким образом, в вашем коде переместите реализацию стратегии
var strategy = new iText.Kernel.Pdf.Canvas.Parser.Listener.LocationTextExtractionStrategy();
в for
l oop:
// for each page to read...
for (int i = 1; i <= pagesToRead; ++i)
{
var strategy = new iText.Kernel.Pdf.Canvas.Parser.Listener.LocationTextExtractionStrategy();
// get the page and save it
var page = pdfDocument.GetPage(i);
var txt = iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor.GetTextFromPage(page, strategy);
pages.Add(txt);
}
В качестве альтернативы вы можете сократить l oop до
// for each page to read...
for (int i = 1; i <= pagesToRead; ++i)
{
// get the page and save it
var page = pdfDocument.GetPage(i);
var txt = iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor.GetTextFromPage(page);
pages.Add(txt);
}
Эта перегрузка PdfTextExtractor.GetTextFromPage
создает новый LocationTextExtractionStrategy
экземпляр каждый раз внутри.