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()
6、打開下方網(wǎng)站
http://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows
這個(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)
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
字符編碼的問題解決后又會(huì)拋出下方紅色字
解決辦法
好了基本大功告成
下方附一段代碼
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)行替換。
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è)性化\字體】
另外還有一種解析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ù)我的代碼來分析我的思路锅减!