python解析PDF文件

1、當(dāng)時(shí)用的python3.7在 pdfminer3k 與 pdfplumber 兩個(gè)庫(kù)之間存在沖突歼冰,安裝pdfplumber時(shí)會(huì)將pdfminer3k覆蓋掉嘴办,安裝的時(shí)候要先安裝pdfplumber再安裝pdfminer3k檩淋。
2、阿里云RPA只支持python3.5模闲,后來我的環(huán)境就改成了3.5
3、首先創(chuàng)建 python3.5 的 virtualenv
4崭捍、cmd中進(jìn)入創(chuàng)建的 env 中安裝pdfplumber命令:

pip install pdfplumber  -i https://pypi.doubanio.com/simple/

此時(shí)會(huì)按照相關(guān)的第三方庫(kù):
chardet, pycryptodome, unicodecsv, sortedcontainers, pdfminer.six, six, pillow, wand, pdfplumber
本版分別為:
chardet-3.0.4 pdfminer.six-20200104 pdfplumber-0.5.19 pillow-7.1.1 pycryptodome-3.9.7 six-1.14.0 sortedcontainers-2.1.0 unicodecsv-0.14.1 wand-0.5.9

5尸折、在運(yùn)行下方代碼時(shí)會(huì)報(bào)錯(cuò):

import pdfplumber

pdf = pdfplumber.open(path)
p0 = pdf.pages[0]
im = p0.to_image()
1.png

6、打開下方網(wǎng)站

http://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows
2.png

這個(gè)網(wǎng)站有ImageMagick的安裝方法

7殷蛇、打開下方網(wǎng)站下載ImageMagick-7.0.10-7-Q16-x64-dll.exe

[https://imagemagick.org/script/download.php#windows](https://imagemagick.org/script/download.php#windows)
3.png

8实夹、from pdfminer.pdfinterp import process_pdf 時(shí)會(huì)報(bào)錯(cuò)

pdfminer3k  與 pdfplumber 兩個(gè)庫(kù)之間存在沖突
先安裝pdfplumber  (切記安裝順序)
from pdfminer.pdfinterp import  process_pdf 時(shí)會(huì)報(bào)錯(cuò)
這時(shí)候再安裝pdfminer3k就不會(huì)報(bào)錯(cuò)了
pip install pdfminer3k  -i https://pypi.doubanio.com/simple/

會(huì)報(bào)錯(cuò)

from .pdftypes import PDFObjectNotFound
ImportError: cannot import name 'PDFObjectNotFound'

轉(zhuǎn)來轉(zhuǎn)去最后發(fā)現(xiàn)對(duì)于只有表格和文字的pdf 用 pdfminer3k 再配合 tabula 去讀取表格

import tabula

df_list = tabula.read_pdf(self.pdf_path, encoding='UTF-8', pages=new_all_pages,multiple_tables = True, lattice=True)

上面這個(gè)完了還有個(gè)坑

Tabula是專門用來提取PDF表格數(shù)據(jù)的,同時(shí)支持PDF導(dǎo)出為CSV粒梦、Excel格式亮航。
官網(wǎng): [http://tabula.technology/](http://tabula.technology/)
Github: [https://github.com/chezou/tabula-py](https://github.com/chezou/tabula-py)
首先安裝tabula-py: `pip install tabula-py`   (重點(diǎn)在這里)
tabula-py依賴庫(kù)包括java、pandas匀们、numpy缴淋,所以需保證運(yùn)行環(huán)境中安裝了這些庫(kù)。
安裝java的鏈接可參考:[http://www.reibang.com/p/a66e393e1b27](http://www.reibang.com/p/a66e393e1b27)

java 安裝包
鏈接:https://pan.baidu.com/s/1TZ32uR1pN3zz1HWRqdX_qA
提取碼:8onf

代碼如下:

import tabula

df = tabula.read_pdf("D:/test.pdf", encoding='gbk', pages='all')
print(df)
for indexs in df.index:
    # 遍歷打印企業(yè)名稱
    print(df.loc[indexs].values[1].strip())

又遇到一個(gè)大坑
https://github.com/euske/pdfminer/tree/2103e5875ef04cfaf424b25d2fd0dc9535a90714/pdfminer/cmap
再來總結(jié)一下pdfminer遇到的坑
1昼蛀、應(yīng)該安裝pdfminer3k
2宴猾、缺少字符編碼(UniGB-UCS2-H、Adobe-GB1)

從下方網(wǎng)址中下載  pdfminer包
下載好后將UniGB-UCS2-H.pickle.gz叼旋、to-unicode-Adobe-GB1.pickle.gz不要解壓直接放在 Py35Env\Lib\site-packages\pdfminer\cmap文件夾下
https://github.com/euske/pdfminer/tree/2103e5875ef04cfaf424b25d2fd0dc9535a90714

可以參考https://www.cnblogs.com/wzjbg/p/7644127.html
7.png

8.png

9.png

字符編碼的問題解決后又會(huì)拋出下方紅色字


10.png

解決辦法


11.png

好了基本大功告成
下方附一段代碼
from io import StringIO
from io import open
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, process_pdf

pdf_path = 'D:\RPA_ProjectFile\Cody\Pdffile\20200420154222.pdf'

def read_pdf(pdf):
    # resource manager
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    laparams = LAParams()
    # device
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)
    process_pdf(rsrcmgr, device, pdf)
    device.close()
    content = retstr.getvalue()
    retstr.close()
    lines = str(content).split("\n")
    return lines


with open(pdf_path, "rb") as pdf:
    PQ = read_pdf(pdf)
    for div in range(len(PQ)):
        temp = PQ[div].strip()
        print(temp)

在使用 tabula 提取pdf文件中的表格時(shí) 提示當(dāng)前環(huán)境缺少CID-keyed font AdobeKaitiStd-Regular字體和CID-keyed font STSong-Light字體仇哆,pdfbox使用使用LiberationSans字體進(jìn)行替換。


1.png
Got stderr:  org.apache.pdfbox.pdmodel.font.PDCIDFontType0 <init>
警告: Using fallback MT-Extra for CID-keyed font STSong-Light

這兩個(gè)字體可以用AdobeKaitiStd-Regular.otf和SimSun.ttf兩個(gè)字體文件夫植。
找字體文件可以在自己的電腦上找讹剔,可以在這個(gè)C:\Windows\Fonts找到,或者用everything工具查找详民,沒有的話可以在網(wǎng)上找
有些字體實(shí)在找不到延欠,也可以修改pdfbox的源碼,修改字體的替換規(guī)則沈跨,
替換的規(guī)則在org.apache.pdfbox.pdmodel.font.FontMapperImpl可以查看到

參考兩個(gè)網(wǎng)站
https://blog.csdn.net/qq_28822933/article/details/83239950
https://blog.csdn.net/qq_36956002/article/details/105094651

字體目錄 【控制面板\外觀和個(gè)性化\字體】


3.png

另外還有一種解析PDF文件的方法就是將pdf轉(zhuǎn)成html文件
https://github.com/coolwanglu/pdf2htmlEX
在cmd中以命令的方式直接將pdf轉(zhuǎn)成html由捎,然后再去html文件中解析數(shù)據(jù),熟悉爬蟲頁(yè)面解析的可以嘗試一下所見即所得也挺簡(jiǎn)單的饿凛。

使用pdfminer狞玛、tabula第三方庫(kù)文本和表格都能提取出來软驰,接下來要解決的問題是在這些雜亂無章的數(shù)據(jù)中正確的提取出自己想要數(shù)據(jù),首先分析pdf頁(yè)面的規(guī)律找到自己想要的數(shù)據(jù)在哪里心肪,往往是文本要和表格對(duì)應(yīng)起來pdfminer用來提取文本內(nèi)容锭亏,tabula來提取表格,再根據(jù)規(guī)律將文本和表格對(duì)應(yīng)起來硬鞍,我這邊有一份 收貨單慧瘤、送貨單、訂貨單的pdf文件解析代碼固该,大家可以根據(jù)我的代碼來分析我的思路锅减!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者蹬音。
  • 序言:七十年代末上煤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子著淆,更是在濱河造成了極大的恐慌劫狠,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件永部,死亡現(xiàn)場(chǎng)離奇詭異独泞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)苔埋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門懦砂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人组橄,你說我怎么就攤上這事荞膘。” “怎么了玉工?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵羽资,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我遵班,道長(zhǎng)屠升,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任狭郑,我火速辦了婚禮腹暖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翰萨。我一直安慰自己脏答,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著以蕴,像睡著了一般糙麦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丛肮,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音魄缚,去河邊找鬼宝与。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冶匹,可吹牛的內(nèi)容都是我干的习劫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼嚼隘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诽里!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起飞蛹,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤谤狡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后卧檐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墓懂,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年霉囚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捕仔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盈罐,死狀恐怖榜跌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盅粪,我是刑警寧澤钓葫,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站湾揽,受9級(jí)特大地震影響瓤逼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜库物,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一霸旗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戚揭,春花似錦诱告、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锄禽。三九已至,卻和暖如春靴姿,著一層夾襖步出監(jiān)牢的瞬間沃但,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工佛吓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宵晚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓维雇,卻偏偏與公主長(zhǎng)得像淤刃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吱型,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一逸贾、概念 參考網(wǎng)頁(yè)字體Serif和Sans-serif的區(qū)別及瀏覽器字體的設(shè)置CSS Font知識(shí)整理總結(jié) 1.F...
    合肥黑閱讀 6,276評(píng)論 0 12
  • 一、openmeeting簡(jiǎn)介 OpenMeetings是Apache的一個(gè)項(xiàng)目津滞,是一個(gè)多語言可定制的視頻會(huì)議和協(xié)...
    Linux丶晨星閱讀 7,296評(píng)論 5 2
  • ①唐唐獨(dú)自坐在客廳的沙發(fā)上据沈,眼睛有一搭沒一搭地看著電視機(jī)哟沫,余光瞥見老梁從房間里出來,手里提著兩個(gè)袋子锌介,這是他留在這...
    撐篙人JZ閱讀 350評(píng)論 0 6
  • Retrofit2.0+Rxjava初探 1.WebService 2.初始化配置 3.結(jié)合Rxjava
    Ugly_K閱讀 155評(píng)論 0 0
  • 身在異鄉(xiāng)孔祸,在一個(gè)離家千里之外的異鄉(xiāng)城市隆敢,在這個(gè)舉目無親的城市,一人帶兩娃上學(xué)崔慧,上班拂蝎,陪讀,做家務(wù)惶室,這是怎樣的生活體...
    邱Q糖閱讀 897評(píng)論 1 5