Python 在PDF文件中查找文本位置
我有一个PDF文件,我试图在PDF中找到一个特定的文本,并使用Python突出显示它。 我发现,当我们在文件中给出想要的高亮显示位置的坐标时,它可以 我正试图找到一个工具,它可以给我一个给定文本在PDF中的位置。可以通过坐标找到文本。您可以将其与PyPDF2突出显示方法结合使用,以完成所描述的内容或者您也可以。 以下是使用PyMuPDF查找文本和突出显示的示例代码:Python 在PDF文件中查找文本位置,python,string,pdf,text,Python,String,Pdf,Text,我有一个PDF文件,我试图在PDF中找到一个特定的文本,并使用Python突出显示它。 我发现,当我们在文件中给出想要的高亮显示位置的坐标时,它可以 我正试图找到一个工具,它可以给我一个给定文本在PDF中的位置。可以通过坐标找到文本。您可以将其与PyPDF2突出显示方法结合使用,以完成所描述的内容或者您也可以。 以下是使用PyMuPDF查找文本和突出显示的示例代码: import fitz ### READ IN PDF doc = fitz.open("input.pdf"
import fitz
### READ IN PDF
doc = fitz.open("input.pdf")
for page in doc:
### SEARCH
text = "Sample text"
text_instances = page.searchFor(text)
### HIGHLIGHT
for inst in text_instances:
highlight = page.addHighlightAnnot(inst)
highlight.update()
### OUTPUT
doc.save("output.pdf", garbage=4, deflate=True, clean=True)
如果您在Windows上使用AcrobatPro(不是reader),则可以使用Python或VBA尝试旧的组件对象模型
您是否尝试过搜索能够解析PDF文件的Python库?希望这会有所帮助:目前还没有找到此功能(希望通过命令行进行搜索)…在windows上,我无法安装fitz。@keramat 32/64位版本存在问题。您需要安装PyMuPDF的较低版本。pip install PyMuPDF==1.16.7运行正常,但默认版本和最新版本没有运行。请查看此处了解更多信息;谢谢这个@cilantro Ditrek,你能告诉我是否有办法在文本周围画一个红线框,而不仅仅是highlighting@SMP看看这个答案:这里还有更多信息:上面的代码需要一些帮助。在
highlight=…
之后添加highlight.update()
,如果pdf文档有多个页面,则将####SEARCH
和###highlight
部分打包到文档中的页面:
循环中,并摆脱页面=doc[0]/code>。
import win32com, winerror, os
from win32com.client.dynamic import ERRORS_BAD_CONTEXT
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
win32com.client.gencache.EnsureModule('{E64169B3-3592-47d2-816E-602C5C13F328}', 0, 1, 1)
avDoc = win32com.client.DispatchEx('AcroExch.AVDoc')
avDoc.Open(src, src)
avDoc.BringToFront()
pdDoc = avDoc.GetPDDoc()
jsoObject = pdDoc.GetJSObject()
for pageNo in range(1):
pdfPage = pdDoc.AcquirePage(pageNo)
pageHL = win32com.client.DispatchEx('AcroExch.HiliteList')
_ = pageHL.Add(0, 9000)
pageSel = pdfPage.CreatePageHilite(pageHL)
pdfText = ""
for wordNo in range(pageSel.GetNumText()):
word = pageSel.GetText(wordNo)
pdfText += word
if keyword in pdfText:
wordToHl = win32com.client.DispatchEx('AcroExch.HiliteList')
wordToHl.Add(wordNo, 1)
wordHl = pdfPage.CreateWordHilite(wordToHl)
rect = wordHl.GetBoundingRect()
annot = jsoObject.AddAnnot()
props = annot.GetProps()
props.Type = "Square"
props.Page = pageNo
props.Hidden = False
props.Lock = True
props.Name = word
props.NoView = False
props.Opacity = 0.3
props.ReadOnly = True
props.Style = "S"
props.ToggleNoView = False
props.PopupOpen = False
popupRect = [rect.Left - 5, rect.Top + 5, rect.Left + 40, rect.Top - 20]
props.Rect = popupRect
props.PopupRect = popupRect
props.StrokeColor = jsoObject.Color.Red
props.FillColor = jsoObject.Color.Yellow
annot.SetProps(props)
print(f'Found {keyword}')