我正在尝试提取一些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();
有没有办法过滤掉较小的空格?
答案 0 :(得分:1)
iText使用渲染的字形的距离作为基础来决定是否存在空格。应用的一般规则是,如果距离大于正常空间的宽度,则除以2,则识别出空格字符。虽然这在大多数情况下都能很好地工作,但如果无法确定所用字体的空格字符宽度,它根本不起作用。在我的情况下空间的宽度被识别为0 ,因此字形之间的最小距离被识别为空格。我的解决方案基于mkl的另一个答案,与你的问题非常相似。
简而言之:你需要从例如SimpleTextExtractionStrategy或LocationTextExtractionStrategy并覆盖将字形之间的距离转换为空格的方法(分别为renderText或isChunkAtWordBoundary)。