前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 項目背景 網上PDF轉換工具眼花繚亂,選擇困難症,有些甚至還收費; 直接以其他格式打開PDF效果一般較差; 有些小可愛通過複製粘貼的方式進行操作,浪費了大量的時間。 那麼,有 ...
前言
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。
項目背景
- 網上PDF轉換工具眼花繚亂,選擇困難症,有些甚至還收費;
- 直接以其他格式打開PDF效果一般較差;
- 有些小可愛通過複製粘貼的方式進行操作,浪費了大量的時間。
那麼,有沒有什麼辦法可以秒速解決這些問題呢?沒錯,Python可以。廢話不多說,直接上實操。
項目實操
一、PDF轉Text
首先,安裝一下操作PDF的庫pdfplumber。pdfplumber 可以很好的讀取 PDF 文件內容和提取 PDF 中的表格,這個庫不屬於 Python 標準庫,需要單獨安裝。
pip3 install pdfplumber
安裝好了之後,咱導入pdfplumber。
import pdfplumber
打開PDF論文,並提取論文第2頁面內容。
with pdfplumber.open("興業B信托項目風險管理研究.pdf") as p: page = p.pages[2] textdata = page.extract_text()
列印一下textdata,提取到了第2頁的內容如下:
此時,你也許疑問了,一篇碩士論文至少也50多頁吧。沒錯,我下載的這篇論文有75頁,咱還得加個for迴圈,把所有頁面內容提取下來。
with pdfplumber.open("興業B信托項目風險管理研究.pdf") as p: for i in range(75): page = p.pages[i] textdata = page.extract_text() #print(textdata)
內容都提取出來了,接下來就是保存為text文本。"a"為指定寫入模式為追加寫入。完整代碼如下:
#PDF轉Text import pdfplumber with pdfplumber.open("興業B信托項目風險管理研究.pdf") as p: for i in range(75): page = p.pages[i] textdata = page.extract_text() #print(textdata) data = open("text.text", "a") data.write(textdata)
二、PDF轉Word
需要安裝一下操作Word的庫python-docx。
pip3 install python-docx
導入Document方法。
from docx import Document
打開PDF論文,並提取論文第2頁面內容。
with pdfplumber.open("興業B信托項目風險管理研究.pdf") as p: page = p.pages[2] textdata = page.extract_text()
新建Word文檔,並將提取的內容存儲到裡面。
document = Document() #新建一個空白的word文檔 content = document.add_paragraph(textdata) #在文檔中添加正文段落,將變數textdata導進去 document.save("word.docx") #保存文檔docx,命名為word
完整代碼如下:
#PDF轉Word1import pdfplumber from docx import Document with pdfplumber.open("興業B信托項目風險管理研究.pdf") as p: page = p.pages[2] textdata = page.extract_text() #print(textdata) document = Document() #新建一個空白的word文檔 content = document.add_paragraph(textdata) #在文檔中添加正文段落,將變數textdata導進去 document.save("word.docx") #保存文檔docx,命名為word
如果要提取全部,加迴圈。
三、PDF轉Excel
這裡所說的PDF轉Excel不是全文轉Excel,而是對論文中的部分表格進行格式轉換,方便在Excel中對數據進行篩選、計算等操作。
本案例PDF論文中第69-75頁為附錄部分,貼的是財務報表數據,截取部分內容,長這樣:
首先,安裝並導入操作Excel表格的庫openpyxl。
pip3 install openpyxlfrom openpyxl import Workbook
打開PDF論文,提取論文第69-75頁表格內容,註意這裡range左開右閉。
with pdfplumber.open("興業B信托項目風險管理研究.pdf") as p: for i in range(68,75): #遍歷69頁-75頁 page = p.pages[i] table = page.extract_table() #print(table)
新建空白的Excel文件,按行寫入從PDF提取的表格數據內容。完整代碼如下:
#PDF轉Excel import pdfplumber from openpyxl import Workbook with pdfplumber.open("興業B信托項目風險管理研究.pdf") as p: workbook = Workbook() #新建空白Excel工作簿 sheet = workbook.active #激活sheet for i in range(68,75): #遍歷69頁-75頁 page = p.pages[i] table = page.extract_table() #提取表格數據 #print(table) for row in table: #遍歷所有行 #print(row) sheet.append(row) #按行追加寫入數據 workbook.save("Excel.xlsx") #保存文件,命名為Excel i += 1 print("第%d頁PDF提取完成"%i) #提示提取進度
最終效果如下,好像還可以。
結 語
到這呢,Python對PDF論文的簡單操作就基本結束了。但還有一些值得探討的問題,比如如果有100個PDF且頁數都不一樣怎麼辦?即使全部提取下來,文件的格式問題如果優化?提取的多個Excel表格如何合併到一個sheet?首先肯定的告訴你,python都能解決,我以後也還會寫相關的Python操作。
歡迎點擊右上角關註小編,除了分享技術文章之外還有很多福利,私信學習資料可以領取包括不限於Python實戰演練、PDF電子文檔、面試集錦、學習資料等。