pdf有两类,一类是别人用word转pdf,你想转过来那种,带有光标那种,计算机能轻松识别,转换相对简单很多。第二类,即图片类pdf,也就是平常工作中看到的各种扫描件,它的识别相对要复杂一些,但又常常是最主要的。近期突发奇想想坚持试写一个,期间遇到许多问题 ,但好在看了许多人的一些经验总结,最后一个个问题都突破了。然后我自己还遇到一些网上找不到答案,自己琢磨解决的。所以想稍微写点东西,希望对其他朋友有所帮助。

必备工具

1、Python      建议安装3.7或以上版本(我自己安装的是3.8版本,pycharm和anaconda3)

2、tesseract-ocr      下载地址: https://github.com/UB-Mannheim/tesseract/wiki 使用最新版本即可

(如果你还想详细了解tesseract-ocr,可以登录 Python OCR工具pytesseract详解 - 墨天轮 学习)

需要用到的库主要有:

pip install pillow

pip install opencv-python

pip install fitz

pip install PyMuPDF

pip install pytesseract

大致思路

其实本质是识别jpg或者png格式的图片,至于pdf,则只是加多了一步,即把pdf文件解开为一张张jpg或者png格式,利用for循环就能实现。用os弄出要转的图片的路径,赋值给img_path_guodu,然后接下来就可以通过下面的代码实现

text = pytesseract.image_to_string(Image.open(img_path_guodu), lang='chi_sim+eng')
doc = docx.Document()          # 创建一个新的word文档
doc.add_paragraph(text)     # 往文档里添加识别出来的文字
doc.add_page_break()        # 添加分页符,等于在word里按多了一次Ctrl+Enter

# 下面两行设置了文档字体全篇为宋体,缺一行不可
doc.styles['Normal'].font.name = u'宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

doc.save(os.getcwd() + '\\' + file_name + ".docx")  # 保存文档

常见问题

一、运行后提示No module named ‘frontend‘

控制台出现下面提示:

报错有两种可能:

1、你没装PyMuPDF。解决方法:

pip install PyMuPDF

2、安装装了,但版本不对,最好装下面这个:

pip install PyMuPDF==1.19.0

你如果装的是pip install PyMuPDF==1.16.14 ,系统会提示:ERROR: pdf2docx 0.5.3 has requirement PyMuPDF>=1.19.0, but you'll have pymupdf 1.16.14 which is incompatible.

翻译:要安装更高版本的PyMuPDF才能对应pdf2docx 0.5.3。

所以我还是觉得最好直接安装pip install PyMuPDF==1.19.0

二、出现下面提示:

pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it’s not in your path

如下图:

解决方法:复制上面图片中选中的那个地址,去那个地址下,打开pytesseract.py文件,按照下面图这样修改:

# tesseract_cmd = 'tesseract'

tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

三、提示AttributeError: 'NoneType' object has no attribute '__array_interface__',起初我以为是安装Tesseract时没有勾选下载可供识别的语言,所以我就重新安装并且全部勾选了,但还是不行。错误提示如下图:

这里有先说说实现文字识别有两种写法,一种依赖于opencv的写法,一种不依赖opencv:
依赖opencv的如下:
img = cv.imread(img_path)
print(img)
text = pytesseract.image_to_string(Image.fromarray(img), lang='chi_sim+eng')    # lang='chi_sim+eng'是识别简体中文和英文;'chi_tra'则表示繁体中文
不依赖opencv写法如下:
text=pytesseract.image_to_string(Image.open(img_path), lang='chi_sim+eng')  # 这里用到的参数只有路径。

问题所在:

问题出在img = cv.imread(img_path),其中的路径不可以带有中文。

我一开始发现前面的引入模块的代码

这里,import cv2 as cv 一行呈灰色,我试着执行以下操作:

但还是无法使用依赖opencv的写法去实现文字识别。

我试着重新pip install opencv-python安装模块,也是不行。

最后我发现,问题就出在img = cv.imread(img_path)这里读取的路径、包括文件名只能带有英文数字及一些特定字符,不能带有中文、日文等字符,带有中文就没法使用cv方法,当你print(img)时,控制台也会显示None,说明此时读不出img。一旦把文件夹及需要识别的文件的文件名,全部改为英文字母时,就可以运行程序。

解决方法:

如果出现上面的错误,则可以选择用不依赖opencv的方法,便不再出现报错问题

四、文件抽出来时,放大参数设置得太大。PDF抽出图片后,在识别时,无法识别图片前面那几行字,还有最后一行或几行也没法识别,并且容易出现错误识别。

问题就出在:

PDF文件解压成一张张jpg格式后,通常文件因为太大而无法完整识别全部内容,易出现部分遗漏或错漏,这里我之前有认识误区,我以为图片越大越容易识别,其实不是的,2800像素*2800像素,就是比较好的了,超过10000像素的反而识别得很混乱。
解决方法:需要先将文件压到合适大小,把短边改为2800像素,长边根据短边做出相应等比例缩放。如此则即可以识别,同时又不至于文件太大。

认真读下面几段代码,就能理解等比例缩放图片大小的实现方式了,下面的方式,不需要用到opencv模块。cv、cv2模块,因为不能读取带有中文路径的文件,所以最好避开opencv模块,不然太局限了。

img_path = 'C:/Users/sun2020/Desktop/tpdf_docx/test266.png'
picture=Image.open(img_path)
heng,shu=picture.size
print(heng,shu)

picture = picture.resize((2800,int(2800*shu/heng)),Image.ANTIALIAS)   #改变尺寸,保持图片高品质
heng1,shu1=picture.size
print(heng1,shu1)

五、当我们读取的文件太大时,有时系统提示:

    raise DecompressionBombError(

PIL.Image.DecompressionBombError: Image size (217795500 pixels) exceeds limit of 178956970 pixels, could be decompression bomb DOS attack.

翻译:图像大小(217795500像素)超过178956970像素的限制

解决方法:

在你的程序刚刚开始写的位置,写入下面三行代码:

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None

以后运行便不会报错。

使用python在实现图片(包括扫描件的图片类pdf)转换成word文档过程中的常见问题相关推荐

  1. [Work Summary] Python将PDF转换成Word文档

    美图欣赏2022/08/21 在我们平时的工作和日常生活中,有时候需要将PDF文件转换成Word文件.为此,决定使用Python自己实现将PDF转换成Word文档的功能需求 编写如下程序代码(pdf2 ...

  2. 扫描PDF转换成word文档如何操作

    扫描PDF文件转换成word文档如何进行操作呢?作为一般的PDF文件介于它的文件大小都不够大,普通的转换功能都能进行操作,文件过大的话就需要用到扫描PDF转word这种操作,那么关于它的操作是怎样的呢 ...

  3. 如何将扫描件转换成word文档

    如何将扫描件转换成word文档 年关将至各种宴会聚餐接踵而至,平时大家都很忙,就借着这种机会给大家一个聚会的理由.聚餐就少不了少酌几杯或是豪饮,这个没有严格的规定,正所谓喝多忘事,我就是这种人,上周五 ...

  4. 用 Python 将微信热文转换成Word文档 | 神级操作

    不得不说微信公众号已经成为了一个开放平台,每天数以万计的微信公众号文章在这产生,我们关注一个微信公众号每天便可以看到新的文章,我们同时也不知不觉的将好的文章分享到给朋友. 那么如何保存一个好的文章呢? ...

  5. 神级操作丨用 Python 将微信热文转换成Word文档

    不得不说微信公众号已经成为了一个开放平台,每天数以万计的微信公众号文章在这产生,我们关注一个微信公众号每天便可以看到新的文章,我们同时也不知不觉的将好的文章分享到给朋友. 那么如何保存一个好的文章呢? ...

  6. 电脑扫描的文件怎么转换成word文档并修改

    我们在日常的工作和学习中会经常使用word文档,因为word文档不论在阅读,修改方面都是非常的方便,那如何将文件转换成word文档呢?接下来就和小编一起来看看电脑扫描的文件怎么转换成word文档,文件 ...

  7. 怎么把图片文字转换成word文档?这个方法了解一下

    在现代的生活中,我们经常需要将图片中的文字转换成Word文档,以方便我们编辑和处理文本.虽然在电脑上进行这项工作很容易,但是在手机上可能会有些困难.在本文中,我们将介绍一些在手机上将图片文字转换成Wo ...

  8. html怎么在图片上加文字_怎么把图片文字转换成word文档

    我们在和别人交流的时候,有时候为了方便对方查看和理解,我们会使用文字图片进行交流,这是一种非常方便交流的形式.那如果我们想要将图片里的文字转换成Word文档应该怎么操作? 如果我们想要将图片识别为Wo ...

  9. 图片文字怎么转换成Word文档?教你两招快速解决

    图片中的文字怎么把它转换成Word文档呢?大家在办公的过程中肯定有使用图片的时候,因为图片可以快速将重要的内容记录下来,至于后面的整理图片的时候,很多小伙伴就不想动了,因为需要将图片中的文字用键盘打出 ...

最新文章

  1. 阿里达摩院正式加入5G巨头仗:瞄准新基建,成立XG实验室,要与华为战一战
  2. 团队冲刺站立会议07
  3. 资源文件的读取和使用
  4. VMprotect静态跟踪 字节码反编译
  5. 枚举Enum与注解Aunotation大杂烩
  6. Android 视频播放器,在线播放
  7. 大家在寻找的高级程序员到底是什么样子的?
  8. Gradle入门:创建Web应用程序项目
  9. GP学习(七)—Accessing raster workspaces
  10. hive学习2(Navicat连接hive)
  11. 大数据的趋势走向如何
  12. 戴文的Linux内核专题:08内核配置(4)
  13. 使用Intellij Idea生成可执行文件jar,转为exe文件步骤
  14. 浅谈SpringAOP功能源码执行逻辑
  15. c语言break可以跳出for循环吗,怎么跳出for循环
  16. Linux时间同步(Fri Nov 16 12:12:13 Local time zone must be set--see zic manual page 2018)解决办法
  17. loadRunner通过谷歌浏览器代理录制脚本
  18. 升级电脑系统或者重装WIN10后,PADS软件卡死
  19. 携程面试官问我怎么划分 Java 虚拟机内存区域,相见恨晚!
  20. python接入支付宝

热门文章

  1. nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)
  2. 改:如何基于开源项目做二次开发
  3. python自动化测试工资_测试人员怎么提升工资?目前自学Python以及自动化测试,英语也在提升。...
  4. 2017年的双十一又一次刷新了记录,交易创建峰值32.5万笔/秒、支付峰值25.6万笔/秒。而这样的交易和支付等记录,都会形成实时订单Feed数据流,汇入数据运营平台的主动服务系统中去。数据运营平台的
  5. Node.js 寒假学习日志之Node.js
  6. python+opencv人脸识别-图片处理+代码
  7. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java流浪动物救助平台bgo9b
  8. 【福利】哈佛大学公开课:构建动态网站
  9. 宿舍怎么管理才高效?1个小技巧,助你轻松搞定
  10. (未时学术)谷歌学术(Google Scholar)使用方法小全书