程式碼示例:
#!/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)
程式碼示例:
#!/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)