如何按字体大小搜索 pdf 文件或在搜索时将页脚分开?

How to search in a pdf file by font size or keep apart footer while searching?

我正在做一个项目,我必须在一些 pdf 文件中搜索一些文本。这些 pdf 文件的页面有页脚部分。在页脚中,文本字体大小与主要内容不同。我正在使用 iTextSharp 的 PdfReader class,我不希望它搜索我在页脚部分提供的文本。我认为解决方案必须要么按字体大小搜索,要么忽略页脚。有什么想法吗?

这是我的代码:

private List<int> ReadPdfFile(string fileName, String searchText, int index)
    {
        List<int> pages = new List<int>();
        if (File.Exists(fileName))
        {
            for (int page = 1; page <= pdfReaders[index].NumberOfPages; page++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReaders[index], page, strategy);
                if (currentPageText.Contains(searchText))
                {
                    pages.Add(page);
                }
            }
        }
        return pages;
    }

如果只想提取页面文本的某一部分,例如

  • 仅位于页面区域给定部分的文本,例如左半页(如果是两列)、给定 y 值之间(不包括页眉和页脚)或外部裁剪框(检测隐藏在那里的文本),或

  • 仅给定样式的文本,例如仅红色文本,仅给定大小范围的文本,...

可以使用具有匹配 RenderFilter 个实例的 FilteredTextRenderListener 过滤文本提取策略作为输入接收的信息:

RenderFilter filter = ...;
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
ITextExtractionStrategy filtered = new FilteredTextRenderListener(strategy, filter);
string filteredCurrentPageText = PdfTextExtractor.GetTextFromPage(pdfReaders[index], page, filtered);

您的过滤器 class 只需扩展抽象 class RenderFilter 并根据需要覆盖 Allow* 方法:

public abstract class RenderFilter
{
    public virtual bool AllowText(TextRenderInfo renderInfo)
    {
        return true;
    }

    public virtual bool AllowImage(ImageRenderInfo renderInfo)
    {
        return true;
    }
}

TextRenderInfo 使流入文本块的许多属性可用于过滤。