詳解用Python把PDF轉為Word方法總結
先講一下為啥要寫這個文章,網上其實很多這種PDF轉化的代碼和軟件。我一直想用Python做,但是網上搜到的代碼很多都不能用,很多是2.7版本的代碼,再就是PDF需要用到的庫在導入的時候,很多的報錯,解決起來特別費勁,而且自從2021年初以來,似乎網上很少有關PDF轉化的代碼出現了。我在研究了很多代碼和pdfminer的用法后,總結了幾個方法,目前這幾種方法可以解決大多數格式的轉化,后面我也專門放了提取PDF表格的代碼,文末有高效的免費在線工具推薦。
下面這個是我最最推薦的方法 ,簡單高效 ,只要是標準PDF文檔,里面的圖片和表格都可以保留格式
# pip install pdf2docx #安裝依賴庫from pdf2docx import Converterpdf_file = r’C:UsersAdministratorDesktop新建文件夾mednine.pdf’docx_file = r’C:UsersAdministratorDesktopPython教程02.docx’# convert pdf to docxcv = Converter(pdf_file)cv.convert(docx_file, start=0, end=None)cv.close()下面是另外三種常用方法
1 把標準格式的PDF轉為Word,測試環境Python3.6.5和3.6.6(注意PDF內容僅僅是文字為主的里面沒有圖片圖表的適用,不適合掃描版PDF,因為那只能用圖片識別的方式進行)
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreterfrom pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsfrom pdfminer.pdfpage import PDFPagefrom io import StringIOimport sysimport stringfrom docx import Documentdef convert_pdf_2_text(path): rsrcmgr = PDFResourceManager() retstr = StringIO()device = TextConverter(rsrcmgr, retstr, codec=’utf-8’, laparams=LAParams()) interpreter = PDFPageInterpreter(rsrcmgr, device)with open(path, ’rb’) as fp:for page in PDFPage.get_pages(fp, set()): interpreter.process_page(page) #print(retstr.getvalue()) text = retstr.getvalue() device.close() retstr.close() return textdef pdf2txt(): text=convert_pdf_2_text(path) with open(’real.txt’,’a’,encoding=’utf-8’) as f:for line in text.split(’n’): f.write(line+’n’)def remove_control_characters(content): mpa = dict.fromkeys(range(32)) return content.translate(mpa) def save_text_to_word(content, file_path): doc = Document() for line in content.split(’’):print(line) paragraph = doc.add_paragraph()paragraph.add_run(remove_control_characters(line)) doc.save(file_path)if __name__ == ’__main__’: path = r’C:UsersmaynDesktop程序臨時培訓教材.pdf’ # 你自己的pdf文件路徑及文件名 不適合掃描版 只適合標準PDF文件 text = convert_pdf_2_text(path) save_text_to_word(text, ’output.doc’) #PDF轉為word方法 #pdf2txt() #PDF轉為txt方法
2專門提取PDF里面的表格,使用pdfplumber適合標準格式的PDF
import pdfplumberimport pandas as pdimport timefrom time import ctimeimport psutil as ps #import threadingimport gcpdf = pdfplumber.open(r'C:UsersAdministratorDesktop新建文件夾mednine.pdf')N=len(pdf.pages)print(’總共有’,N,’頁’)def pdf2exl(i): # 讀取了第i頁,第i頁是有表格的, print(’********************************************************************************************************************************************************’) print(’正在輸出第’,str(i+1),’頁表格’) print(’********************************************************************************************************************************************************’) p0 = pdf.pages[i] try:table = p0.extract_table()print(table) df = pd.DataFrame(table[1:], columns=table[0]) #print(df)df.to_excel(r'C:UsersAdministratorDesktop新建文件夾Model'+str(i+1)+'.xlsx') #df.info(memory_usage=’deep’) except Exception as e:print(’第’+str(i+1)+’頁無表格,或者檢查是否存在表格’) pass #print(’目前內存占用率是百分之’,str(ps.virtual_memory().percent),’ 第’,str(i+1),’頁輸出完畢’) print(’**********************************************************************************************************************************************************’) print(’nnn’) time.sleep(5)def dojob1(): #此函數 直接循環提取PDF里面各個頁面的表格 print(’*********************’) for i in range(0,N):pdf2exl(i)
3也可以提取PDF里面的表格,使用camelot(camelot的安裝可能需要點耐心,反正用的人不多)
import camelotimport wand# 從PDF文件中提取表格def output(i): #print(tables) #for i in range(5): tables = camelot.read_pdf(r’C:UsersAdministratorDesktop新建文件夾mednine.pdf’, pages=str(i), flavor=’stream’) print(tables[i]) # 表格數據 print(tables[i].data)tables[i].to_csv(r’C:UsersAdministratorDesktop新建文件夾002’+str(i)+r’.csv’)def plotpdf():# 這個是畫pdf 結構的函數 現在不能用 不要打開#print(tables[0]) tables = camelot.read_pdf(r’C:UsersmaynDesktopvcode工作區11路基.pdf’, pages=’200’, flavor=’stream’) camelot.plot(tables[0], kind=’text’) print(tables[0]) plt.show() # 繪制PDF文檔的坐標,定位表格所在的位置 #plt = camelot.plot(tables[0],kind=’text’) #plt.show() #table_df = tables[0].df#plotpdf() #i=3#output(i)for i in range(0,2): try: output(i) except Exception as e:print(’第’+str(i)+’頁沒找到表格啊啊啊’)pass continue
以下是pdfplumber測試效果
源文件如下
提取結果
最后補充2個免費轉換的網站感覺還比較好用,關鍵是免費
http://pdfdo.com/pdf-to-word.aspx
http://app.xunjiepdf.com/pdf2word/
到此這篇關于詳解用Python把PDF轉為Word方法總結的文章就介紹到這了,更多相關Python把PDF轉為Word內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章:
1. css代碼優化的12個技巧2. .NET SkiaSharp 生成二維碼驗證碼及指定區域截取方法實現3. ASP中if語句、select 、while循環的使用方法4. ASP中實現字符部位類似.NET里String對象的PadLeft和PadRight函數5. jsp網頁實現貪吃蛇小游戲6. ASP 信息提示函數并作返回或者轉向7. django創建css文件夾的具體方法8. 存儲于xml中需要的HTML轉義代碼9. MyBatis JdbcType 與Oracle、MySql數據類型對應關系說明10. CentOS郵件服務器搭建系列—— POP / IMAP 服務器的構建( Dovecot )
