Python PyMuPDF searchFor方法不起作用

时间:2018-12-21 09:18:47

标签: python string pdf search text

我正在使用python中的PyMuPDF库在PDF文档中搜索特定文本,然后突出显示它。

pdf_document = fitz.open(pdf_path) for i in range(len(page_num)):
page=pdf_document[page_num[i]]
for item in search_terms: search_instances = page.searchFor(item) for inst in search_instances: page.addHighlightAnnot(inst)

PDF文档图像如下: enter image description here

我可以突出显示PDF文档中除搜索词“毛利”以外的所有术语。 searchFor()返回一个空列表,而不是坐标。这与质量差的PDF有什么关系吗?如果是的话,它也不适用于其他搜索字词。它适用于“营业额”和“销售成本”等字词

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

似乎是非文本PDF。

您必须使用像pytesseract这样的OCR将其转换为文本pdf,然后使用fitz对其进行突出显示。

类似的东西应该起作用:

from pdf2image import convert_from_path, convert_from_bytes 
from fpdf import FPDF

pytesseract.pytesseract.tesseract_cmd = /pathto/Tesseract-OCR/tesseract.exe'

def string_stream(s, separators="\n"):
    start = 0
    for end in range(len(s)):
        if s[end] in separators:
            yield s[start:end]
            start = end + 1
    if start < end:
        yield s[start:end+1]


def multipage_simple(whole_text):
    pdf = FPDF(format='letter') #pdf format
    pdf.add_page() #create new page
    pdf.set_font("Arial", size=12) # font and textsize
    cnt = 1
    stream = string_stream(normalize(whole_text))
    for s in stream:
        pdf.cell(200, 10, txt=s, ln=cnt, align="L")
        cnt += 1
    pdf.output("multipage_simple.pdf", "F")

def get_text_from_pdf_with_ocr(file_name_to_image_pdf):
    res = []
    seq_of_images = convert_from_path(file_name)
    for img in seq_of_images:
        text = re.sub(REMOVAL_SPECIAL_CHARACTER_PATTERN, " ", string=pytesseract.image_to_string(img))
        res += [text]
    return res

然后做:

doc = fitz.open("multipage_simple.pdf")

您可以通过执行以下操作获得全文:

text_ = get_text_from_pdf_with_ocr(pdf_id)
whole_text = reduce(lambda x, y: x + y, text_)