详解用Python把PDF转为Word方法总结


Posted in Python onApril 27, 2021

先讲一下为啥要写这个文章,网上其实很多这种PDF转化的代码和软件。我一直想用Python做,但是网上搜到的代码很多都不能用,很多是2.7版本的代码,再就是PDF需要用到的库在导入的时候,很多的报错,解决起来特别费劲,而且自从2021年初以来,似乎网上很少有关PDF转化的代码出现了。我在研究了很多代码和pdfminer的用法后,总结了几个方法,目前这几种方法可以解决大多数格式的转化,后面我也专门放了提取PDF表格的代码,文末有高效的免费在线工具推荐。

下面这个是我最最推荐的方法 ,简单高效 ,只要是标准PDF文档,里面的图片和表格都可以保留格式

详解用Python把PDF转为Word方法总结

# pip install pdf2docx #安装依赖库
from pdf2docx import Converter

pdf_file = r'C:\Users\Administrator\Desktop\新建文件夹\mednine.pdf'
docx_file = r'C:\Users\Administrator\Desktop\Python教程\02.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:\Users\mayn\Desktop\程序临时\培训教材.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:\Users\Administrator\Desktop\新建文件夹\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:\Users\Administrator\Desktop\新建文件夹\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('\n\n\n') 
    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:\Users\Administrator\Desktop\新建文件夹\mednine.pdf', pages=str(i), flavor='stream')
    print(tables[i])
    
# 表格数据
    print(tables[i].data)
    
    tables[i].to_csv(r'C:\Users\Administrator\Desktop\新建文件夹\002'+str(i)+r'.csv')


def plotpdf():
        # 这个是画pdf 结构的函数 现在不能用 不要打开
    
    #print(tables[0])
    tables = camelot.read_pdf(r'C:\Users\mayn\Desktop\vcode工作区\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测试效果

源文件如下

详解用Python把PDF转为Word方法总结

提取结果

详解用Python把PDF转为Word方法总结

最后补充2个免费转换的网站感觉还比较好用,关键是免费

http://pdfdo.com/pdf-to-word.aspx

http://app.xunjiepdf.com/pdf2word/

到此这篇关于详解用Python把PDF转为Word方法总结的文章就介绍到这了,更多相关Python把PDF转为Word内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现的异步代理爬虫及代理池
Mar 17 Python
Python简单读取json文件功能示例
Nov 30 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
从0开始的Python学习016异常
Apr 08 Python
Python数据类型之Tuple元组实例详解
May 08 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
python 链接sqlserver 写接口实例
Mar 11 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
如何使用flask将模型部署为服务
May 13 Python
python实现的web监控系统
python opencv人脸识别考勤系统的完整源码
Apr 26 #Python
python实现监听键盘
Apr 26 #Python
python如何做代码性能分析
Apr 26 #Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 #Python
python如何进行基准测试
Apr 26 #Python
python实现简单的名片管理系统
You might like
php实现word转html的方法
2016/01/22 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
python统计字符的个数代码实例
2020/02/07 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
Python restful框架接口开发实现
2020/04/13 Python
struct和class的区别
2015/11/20 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
2014年店长工作总结
2014/11/17 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript