首頁>Club>
4
回覆列表
  • 1 # 使用者834195712159

    程式碼示例:

    #!/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)

  • 中秋節和大豐收的關聯?
  • 情人節送花送49朵好不好?