【发布时间】:2020-07-31 01:19:09
【问题描述】:
有一种方法可以多次使用矩形从 pdf 文档的不同页面读取文本。因此,文件越大,处理的越慢,我尝试使用 Parallel.Foreach,但处理速度并没有大幅提高,一切似乎都受到了 PdfReader 的阻碍。
方法是这样的:
var lst = new ConcurrentBag<Test3>();
using(var reader = new PdfReader(byteArr))
{
Parallel.Foreach(areas, t =>
{
var pageSize = reader.GetPageSize(t.PageNumber);
var rectangle = GetRectagle(t.AreaData, pageSize);
var text = GetTextFromRectangle(reader, rectagle, t.PageNumber);
lst.Add(text);
}
}
public string GetTextFromRectagle(PdfReader reader, Rectangle rect, int pageNum)
{
RenderFilter[] filter = {
new RegionTextRenderText()
};
ITextExtractionStrategy strategy =
new FilteredTextRenderListener(new
LocationTextExtractionStrategy(), filter);
return PdfTextExtractor.GetTextFromPage(reader, pageNumber, strategy);
}
【问题讨论】:
-
真的每页最多有一个矩形吗?
-
每页大约 900 个矩形区域
-
精氨酸。然后很清楚为什么您的代码需要一些时间来执行。您没有显示您的
GetTextFromRectangle,我假设它在每次调用时都会使用区域过滤器解析页面。因此,对于 每页 900 个矩形区域,您解析每个页面 900 次。相反,您应该只解析每个页面一次并限制要提取的文本。 -
ItextSharp 完成所有工作,添加了 GetTextFromRectagle 方法的描述
标签: c# .net multithreading pdf itext