Похоже, что это не текстовый PDF.
Вы должны использовать OCR, такой как pytesseract, для преобразования его в текстовый 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_)