ITextSharp:提取没有小空格的文本

时间:2015-03-22 20:51:51

标签: itextsharp spaces

我正在尝试提取一些pdf文件的标题以对它们进行排序。不幸的是,每个字母之间都有一个空格,单词之间的空格大于同一个单词的字母之间的空格。 这是我的提取方法:

PdfReader reader = new PdfReader(filename);
Rectangle rect = new Rectangle(0, 0, 1000, 1000);
RenderFilter regionFilter = new RegionTextRenderFilter(rect);
FontRenderFilter fontFilter = new FontRenderFilter();
FilteredTextRenderListener strategy = new FilteredTextRenderListener(
    new LocationTextExtractionStrategy(), regionFilter, fontFilter);
string result = PdfTextExtractor.GetTextFromPage(reader, 1, strategy);
reader.Close();

有没有办法过滤掉较小的空格?

1 个答案:

答案 0 :(得分:1)

iText使用渲染的字形的距离作为基础来决定是否存在空格。应用的一般规则是,如果距离大于正常空间的宽度,则除以2,则识别出空格字符。虽然这在大多数情况下都能很好地工作,但如果无法确定所用字体的空格字符宽度,它根本不起作用。在我的情况下空间的宽度被识别为0 ,因此字形之间的最小距离被识别为空格。我的解决方案基于mkl的另一个答案,与你的问题非常相似。

简而言之:你需要从例如SimpleTextExtractionStrategy或LocationTextExtractionStrategy并覆盖将字形之间的距离转换为空格的方法(分别为renderText或isChunkAtWordBoundary)

您还可以参考the answer I gave hereoriginal solution by mkl