Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PDF文件中查找文本位置_Python_String_Pdf_Text - Fatal编程技术网

Python 在PDF文件中查找文本位置

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"

我有一个PDF文件,我试图在PDF中找到一个特定的文本,并使用Python突出显示它。 我发现,当我们在文件中给出想要的高亮显示位置的坐标时,它可以

我正试图找到一个工具,它可以给我一个给定文本在PDF中的位置。

可以通过坐标找到文本。您可以将其与PyPDF2突出显示方法结合使用,以完成所描述的内容或者您也可以。

以下是使用PyMuPDF查找文本和突出显示的示例代码:

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}')