page.getTextBlocks()
输出
[(42.5, 86.45002746582031, 523.260009765625, 100.22002410888672, TEXT, 0, 0),
(65.75, 103.4000244140625, 266.780029296875, 159.59010314941406, TEXT, 1, 0),
(48.5, 86.123456, 438.292048492, 100.92920404974, TEXT, 0, 0)]
(x0, y0, x1, y1, "块中的行", block_type, block_no)
我的主要目标是:
搜索 PDF 中的文本并突出显示它 必须搜索的文本可以在页面中出现 n 次。使用tp.search(text,hit_max=1)
它可以限制出现的最大次数,但它不会解决问题,因为它会选择文本的第一次出现,但对我来说可能是第二次或第三次出现很重要。
我的想法是:
getTextBlocks 如上所述提取文本,使用此信息特别是 block_no,我想page.searchFor
为该特定块执行功能。从逻辑上讲它应该是可能的,但实际上我需要关于如何做到这一点的帮助。
我将不胜感激任何有关实现主要目标的意见。
谢谢
作为前言,让我说您的问题将使我的存储库的问题页面受益。
Page.searchFor()
搜索页面上的任意数字文本项。限制是点击次数,您必须在调用中指定该限制。但是您可以在此处使用任何数字(例如 100)。此方法不提取文本,忽略字符大小写,还支持非水平文本或跨多行文本。其输出可直接用于创建文本标记注释等。
您当然可以通过使用 的变体来自由提取文本Page.getText(option)
,然后运用您的技巧在输出中找到您想要的内容。option
可以是“text”、“words”、“blocks”、“dict”、“rawdict”、“html”、“xhtml”或“xml”。每种输出显然都有其优缺点。许多变体都带有文本位置信息或字体信息,包括文本颜色等。但正如所说:如何定位内容取决于您。让我再次建议我们在 Github 存储库问题页面上继续这个对话,在那里我可以更好地指向其他资源。或者随时使用我的私人电子邮件。
如果您的问题是 (1) 定位文本出现,然后 (2) 将每个出现链接到文本块编号,那么只需列出块矩形并检查每个出现是否包含在块矩形中:
for j, rect in enumerate(page.searchFor(text,...)):
for i, bbox in enumerate(block_rectangles):
if rect in bbox:
print("occurrence %i is contained in block %i" % (j, i))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句