加入收藏 | 设为首页 | 会员中心 | 我要投稿 许昌站长网 (https://www.0374zz.cn/)- 专属主机、负载均衡、智能边缘云、云防火墙、数据加密!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

怎样用python实现将pdf转为word?一文教你四种办法

发布时间:2022-03-09 13:41:49 所属栏目:语言 来源:未知
导读:这篇文章主要分享的是用python将pdf转为word文档的内容,下文提供了多种实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,感兴趣的朋友就继续往下看吧。 下面这个是最推荐的方法 ,简单高效 ,只要是标准PDF文档,里面的图片和表格都可以保留格式 # pip
    这篇文章主要分享的是用python将pdf转为word文档的内容,下文提供了多种实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,感兴趣的朋友就继续往下看吧。
 
    下面这个是最推荐的方法 ,简单高效 ,只要是标准PDF文档,里面的图片和表格都可以保留格式
 
 
# pip install pdf2docx #安装依赖库
from pdf2docx import Converter
 
pdf_file = r'C:UsersAdministratorDesktop新建文件夹mednine.pdf'
docx_file = r'C:UsersAdministratorDesktopPython教程2.docx'
 
# convert pdf to docx
cv = 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, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
import sys
import string
from docx import Document
 
 
def 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 text
 
 
def 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 pdfplumber
import pandas as pd
import time
from time import  ctime
import psutil as ps
#import threading
import gc
pdf = 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 camelot
import 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新建文件夹02'+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

(编辑:许昌站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读