如何按字体大小搜索 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
使流入文本块的许多属性可用于过滤。
我正在做一个项目,我必须在一些 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
使流入文本块的许多属性可用于过滤。