"""pdfminer_demo.py
注意: 1. python 3.x需要安裝的是pdfminer3k而不是pdfminer(後者僅支援python 2.x),不過在匯入的時候的語句都是`import pdfminer`
參考: 1. python 3.6 中使用pdfminer解析pdf檔案 - 大泡泡的專欄 - csdn部落格
"""from pdfminer.pdfinterp import pdfresourcemanager, pdfpageinterpreter
from pdfminer.pdfinterp import pdftextextractionnotallowed
from pdfminer.layout import lttextboxhorizontal, laparams
from pdfminer.pdfparser import pdfparser, pdfdocument
from pdfminer.converter import pdfpageaggregator
deffrom_pdf_to_txt
(read_file, write_file, page_start=
0, page_end=0)
:"""
:param read_file: str. 注意字尾名是".pdf"
:param write_file: str. 注意字尾名填".txt"
:param page_start: int
:param page_end: int
:return:
"""# 以二進位制讀模式開啟
origin_pdf_file =
open
(read_file,
'rb'
)# 用檔案物件來建立乙個pdf文件分析器
parser = pdfparser(origin_pdf_file)
# 建立乙個pdf文件
doc = pdfdocument(
)# 連線分析器與文件物件,這個語句比較有意思,相互set對方進去
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始化密碼.如果pdf沒有密碼,就傳入乙個空引數
doc.initialize(
)# 檢測文件是否提供txt轉換,不提供就忽略
ifnot doc.is_extractable:
# 如果pdf不支援提取,則直接報錯
raise pdftextextractionnotallowed
else
:# 建立pdf資源管理器 來管理共享資源
srcmgr = pdfresourcemanager(
)# 建立乙個pdf裝置物件
device = pdfpageaggregator(srcmgr, laparams=laparams())
# 建立乙個pdf直譯器物件
interpreter = pdfpageinterpreter(srcmgr, device)
# 迴圈遍歷列表,每次處理乙個page的內容
pages =
list
(doc.get_pages())
if page_end ==0:
page_end =
len(pages)
for i in
range
(page_start, page_end)
: interpreter.process_page(pages[i]
)# 接受該頁面的ltpage物件
layout = device.get_result(
)# 這裡返回的是乙個ltpage物件,裡面存放著這個page解析出的各種物件
# 一般包括lttextbox,ltfigure,ltimage,lttextboxhorizontal等等
# 想要獲取文字就取它的text屬性,即x.get_text()
# 獲取text屬性
for x in layout:
ifisinstance
(x, lttextboxhorizontal)
:with
open
(write_file,
'a', encoding=
'utf-8'
)as f:
results = x.get_text(
) f.write(results +
'\n'
)# 最後關閉原始pdf檔案
origin_pdf_file.close(
)def
test()
: from_pdf_to_txt(
'../data/sample.pdf'
,'../output/output.txt',0
,1)if __name__ ==
'__main__'
: test(
)
用Margin還是用Padding
用margin還是用padding 何時應當使用margin 需要在border外側新增空白時。空白處不需要背景 色 時。上下相連的兩個盒子之間的空白,需要相互抵消時。如15px 20px的margin,將得到20px的空白。何時應當時用padding 需要在border內測新增空白時。空白處需要背...
用Margin還是用Padding
用margin還是用padding這個問題是每個學習css高階時的必經之路。css邊距屬性定義元素周圍的空間。通過使用單獨的屬性,可以對上 右 下 左的外邊距進行設定。也可以使用簡寫的外邊距屬性同時改變所有的外邊距。w3school 邊界 margin 元素周圍生成額外的空白區。空白區 通常是指其他...
用yaml寫用例
第一步 安裝yaml,在執行裡輸入 pip install pyyaml 檢驗是否安裝成功,在pycharm裡輸入 import yaml 第二步 建立乙個file,字尾寫yaml或yml 在yml檔案裡寫入單個使用者名稱和密碼 開啟yml檔案並以字典的形式列印出來 執行結果 在yml檔案裡寫入多個...