from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfpage import PDFPage from pdfminer.pdfpage import PDFTextExtractionNotAllowed from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.layout import LAParams from pdfminer.converter import PDFPageAggregator PDFファイルのパスを指定 pdf_file_path = "/sample.pdf" x_left_bottom_val = 390 y_left_bottom_val = 620 x_right_top_val = 520 y_right_top_val = 740 PDFファイルをバイナリ形式で開く with open(pdf_file_path, 'rb') as fp: # PDFパーサーを作成 parser = PDFParser(fp) # PDFドキュメントを作成 document = PDFDocument(parser) # パスワードが設定されていないことを確認 if not document.is_extractable: raise PDFTextExtractionNotAllowed # PDFリソースマネージャーを作成 rsrcmgr = PDFResourceManager() # ページの解析パラメータを設定 laparams = LAParams() # ページの集約器を作成 device = PDFPageAggregator(rsrcmgr, laparams=laparams) # ページの解析器を作成 interpreter = PDFPageInterpreter(rsrcmgr, device) # 全ページに対して処理を行う for page in PDFPage.create_pages(document): # ページの内容を解析 interpreter.process_page(page) # 解析結果からレイアウトを取得 layout = device.get_result() # レイアウトからテキストの座標を取得し表示 for element in layout: if hasattr(element, "get_text"): x1, y1, x2, y2 = element.bbox if x1 > x_left_bottom_val and y1 > y_left_bottom_val and x2 < x_right_top_val and y2 < y_right_top_val: print("Text: ", element.get_text()) # print("Position: ", element.bbox)