为什么iTextSharp的GetTextFromPage会返回更长更长的字符串?

时间:2016-03-10 08:21:56

标签: itextsharp pdf-scraping

我正在使用nuGet(5.5.8)中最新的iTextSharp lib来解析pdf文件中的一些文本。我面临的问题是GetTextFromPage方法不仅返回页面应该返回的文本,还返回上一页的文本。这是我的代码:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

您将所有页面都提供给相同的文本提取策略:

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