为啥来自 iTextSharp 的 GetTextFromPage 返回越来越长的字符串?

Posted

技术标签:

【中文标题】为啥来自 iTextSharp 的 GetTextFromPage 返回越来越长的字符串?【英文标题】:Why are GetTextFromPage from iTextSharp returning longer and longer strings?为什么来自 iTextSharp 的 GetTextFromPage 返回越来越长的字符串? 【发布时间】:2016-06-24 23:27:04 【问题描述】:

我正在使用来自 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】:

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

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

【讨论】:

我刚刚遇到了与 5.5.9 完全相同的问题。 @mkl 的回复清晰且完全准确。

以上是关于为啥来自 iTextSharp 的 GetTextFromPage 返回越来越长的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

来自 TextView 问题的 getText()

JAVA中对JTextField对象的值的获取操作,为啥注释的部分没有效果呢?难道有啥错误么?

用JAVA的表读取数据库的内容时,where语句后的条件例如sname(数据库表的列)='"+f1.getText()+"'为啥不显

为啥在eclipse中执行 sql server 的查询语句总是提示语法错误,请大家帮我看看。

让PdfStamper使用MemoryStreams(c#,itextsharp)

使用文本框中的值通过 iTextSharp 保存 PDF 文件