python 讀取pdf文本內容


#!/usr/bin/env python3
#-*- coding:utf-8 -*-
# pip3 install pdfminer3k
 
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBoxHorizontal
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed
from pdfminer.pdfdevice import PDFDevice

def read_pdf(pdf_name, result_name):
    # 以二進制讀模式打開
    fp = open(pdf_name, 'rb')
    # 用文件對象來創建一個pdf文檔分析器
    parser = PDFParser(fp)
    # 創建一個pdf文檔
    doc = PDFDocument()
    # 連接分析器 與文檔對象
    parser.set_document(doc)
    doc.set_parser(parser)
    # 提供初始密碼,如果沒有密碼 就創建一個空的字符串
    doc.initialize('')
    # 檢測文檔是否提供txt轉換,不提供就拋出異常
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    # 創建PDf 資源管理器 來管理共享資源
    rsrcmgr = PDFResourceManager()
    # 創建一個PDF設備對象
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    # 創建一個PDF解釋器對象
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    
    with open(result_name,"w",encoding="u8") as fd_out:
        # 循環遍歷列表,每次處理一個page的內容
        for i,page in enumerate(doc.get_pages(),1):
            index = "===========《第{}頁》===========".format(i)
            print(index)
            fd_out.write(index + "\n")
            interpreter.process_page(page)
            # 接受該頁面的LTPage對象
            layout = device.get_result()
            for x in layout:
                # 這里layout是一個LTPage對象 里面存放着 這個page解析出的各種對象 一般包括LTTextBox, 
                # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對象的text屬性
                if not isinstance(x, LTTextBoxHorizontal):
                    continue
                results = x.get_text()
                print(results)
                fd_out.write(results)    

                        

if __name__ == '__main__':
    pdf_name = 'test.pdf'
    result = 'test.txt'
    read_pdf(pdf_name, result)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM