一.将扫描版PDF转为可复制文字版PDF

1.利用百度api将扫描版的pdf转为文字版的pdf

申请网址:百度智能云控制台-管理中心

点击后创建文字识别应用,在应用列表中可见调用api时的APP_ID、API_KEY、SECRET_KEY

2.依次安装以下python模块

pip3 install PyPDF2
pip3 install baidu-aip
pip3 install pdfkit
pip3 install pymupdf

3.安装wkhtmltopdf 软件

下载网址:https://wkhtmltopdf.org/downloads.html

记下安装目录下 bin/wkhtmltopdf.exe位置,程序中的 path_wk 参数需要此位置

4.程序:

from PyPDF2 import PdfFileReader, PdfFileWriter
from aip import AipOcr
import pdfkit
import fitz
import ospdfpath = 'D:\pdf3'
pdfname = '水浒传.pdf'
path_wk = r'D:/Procedure/wkhtmltopdf/bin/wkhtmltopdf.exe'APP_ID = '1234567'
API_KEY = 'abcdefg'
SECRET_KEY = 'qwertyuiop'# 以下为处理程序---------------------------------------------------------------------------
pdfkit_config = pdfkit.configuration(wkhtmltopdf=path_wk)
pdfkit_options = {'encoding': 'UTF-8', }
# 将每页pdf转为png格式图片
def pdf_image():pdf = fitz.open(pdfpath+os.sep+pdfname)for pg in range(0, pdf.pageCount):# 获得每一页的对象page = pdf[pg]trans = fitz.Matrix(1.0, 1.0).preRotate(0),# 获得每一页的流对象pm = page.getPixmap(matrix=trans, alpha=False)# 保存图片pm.writePNG(image_path + os.sep + pdfname[:-4] + '_' + '{:0>3d}.png'.format(pg + 1))page_range = range(pdf.pageCount)pdf.close()return page_rangedef read_png_str(page_range):# 读取本地图片的函数def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()all_pngstr = []image_list = []for page_num in page_range:# 读取本地图片image = get_file_content(image_path + os.sep + r'{}_{}.png'.format(pdfname[:-4], '%03d' % (page_num + 1)))image_list.append(image)# 新建一个AipOcrclient = AipOcr(APP_ID, API_KEY, SECRET_KEY)options = {}options["language_type"] = "CHN_ENG"options["detect_direction"] = "false"options["detect_language"] = "false"options["probability"] = "false"for image in image_list:# 文字识别,得到一个字典pngjson = client.basicGeneral(image, options)pngstr = ''for x in pngjson['words_result']:pngstr = pngstr + x['words'] + '</br>'print('正在调用百度接口:第{}个,共{}个'.format(len(all_pngstr), len(image_list)))all_pngstr.append(pngstr)return all_pngstrdef str2pdf(page_range, all_pngstr):# 字符串写入PDFfor page_num in page_range:print('正在将字符串写入PDF:第{}个,共{}个'.format((page_num + 1), len(page_range)))pdfkit.from_string((all_pngstr[page_num]), disperse_pdfpath + os.sep + '%s.pdf' % (str(page_num + 1)),configuration=pdfkit_config, options=pdfkit_options)def pdf_merge(page_range):# 合并单页PDFpdf_output = PdfFileWriter()for page_num in page_range:print('正在合并单页:第{}个,共{}个'.format((page_num + 1), len(page_range)))pdf_input = PdfFileReader(open(disperse_pdfpath + os.sep + '%s.pdf' % (str(page_num + 1)), 'rb'))page = pdf_input.getPage(0)pdf_output.addPage(page)newPdfPath = pdfpath+os.sep + 'new_{}'.format(pdfname)pdf_output.write(open(newPdfPath, 'wb'))return newPdfPathimage_path = pdfpath + os.sep + "image"
if not os.path.exists(image_path):os.mkdir(image_path)disperse_pdfpath = pdfpath + os.sep + "pdf"
if not os.path.exists(disperse_pdfpath):os.mkdir(disperse_pdfpath)range_count = pdf_image()
all_th = read_png_str(range_count)
str2pdf(range_count, all_th)
pdf_merge(range_count)

二.将扫描版PDF转为可复制文字版Word文档

1.在安装了上节所需的环境的基础下,安装python-docx python模块

pip3 install python-docx

2.程序:

from docx import Document
from aip import AipOcr
import pdfkit
import fitz
import ospdfpath = 'D:\pdf'
pdfname = '水浒传.pdf'
path_wk = r'D:/Procedure/wkhtmltopdf/bin/wkhtmltopdf.exe'APP_ID = '123456789'
API_KEY = 'abcdefg'
SECRET_KEY = 'qwertyuiop'# ---------------------------------------------------------------------------
pdfkit_config = pdfkit.configuration(wkhtmltopdf=path_wk)
pdfkit_options = {'encoding': 'UTF-8', }# 将每页pdf转为png格式图片
def pdf_image():pdf = fitz.open(pdfpath + os.sep + pdfname)for pg in range(0, pdf.pageCount):# 获得每一页的对象page = pdf[pg]trans = fitz.Matrix(1.0, 1.0).preRotate(0)# 获得每一页的流对象pm = page.getPixmap(matrix=trans, alpha=False)# 保存图片pm.writePNG(image_path + os.sep + pdfname[:-4] + '_' + '{:0>3d}.png'.format(pg + 1))page_range = range(pdf.pageCount)pdf.close()return page_range# 将图片中的文字转换为字符串
def read_png_str(page_range):# 读取本地图片的函数def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()allPngStr = []image_list = []for page_num in page_range:# 读取本地图片image = get_file_content(image_path + os.sep + r'{}_{}.png'.format(pdfname[:-4], '%03d' % (page_num + 1)))print(image)image_list.append(image)# 新建一个AipOcrclient = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 可选参数options = {}options["language_type"] = "CHN_ENG"options["detect_direction"] = "false"options["detect_language"] = "false"options["probability"] = "false"for image in image_list:# 通用文字识别,得到的是一个dictpngjson = client.basicGeneral(image, options)pngstr = ''for x in pngjson['words_result']:pngstr = pngstr + x['words'] + '\n'print('正在调用百度接口:第{}个,共{}个'.format(len(allPngStr), len(image_list)))allPngStr.append(pngstr)return allPngStrdef str2word(allPngStr):document = Document()for i in allPngStr:document.add_paragraph(i, style='ListBullet')document.save(pdfpath + os.sep + pdfname[:-4] + '.docx')print('处理完成')image_path = pdfpath + os.sep + "image"
if not os.path.exists(image_path):os.mkdir(image_path)range_count = pdf_image()
allPngStr = read_png_str(range_count)
str2word(allPngStr)

三.将PDF中的文字转为word文档

1.安装如下两个python模块

pip3 install pdfminer3kpip3 install python-docx

2.程序:

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
from docx import Document
import warnings
import osfilePath = 'D:/pdf/水浒传.pdf'file_name = os.open(filePath, os.O_RDWR)
document = Document()
warnings.filterwarnings("ignore")
def pdf2word():fn = open(file_name, 'rb')parser = PDFParser(fn)doc = PDFDocument()parser.set_document(doc)doc.set_parser(parser)resource = PDFResourceManager()laparams = LAParams()device = PDFPageAggregator(resource, laparams=laparams)interpreter = PDFPageInterpreter(resource, device)for i in doc.get_pages():interpreter.process_page(i)layout = device.get_result()for out in layout:if hasattr(out, "get_text"):content = out.get_text().replace(u'\xa0', u' ')document.add_paragraph(content, style='ListBullet')document.save(filePath[:-4] + '.docx')print('处理完成')if __name__ == '__main__':pdf2word()

参考博客:练习:将图片版PDF(不可复制)通过OCR转换为可编辑的PDF_dianepure的博客-CSDN博客

扫描版PDF转文字Word(python3)相关推荐

  1. 扫描版PDF文件转成word文件

    你可以使用 Adobe Acrobat Pro 或者 ABBYY FineReader 这样的软件将扫描版PDF文件转换为Word文件.也有一些在线工具可以实现PDF到Word的转换,例如 Small ...

  2. 扫描版PDF文件,如何弄成可复制的文字版?

    最后在网上下载了几个PDF文件,是扫描版的,相当于是图片,无法复制上面的文字,但是某宝找人处理了一下就可以复制了,是使用的什么软件呢?具体操作过程是怎样的呢? 其实将扫描的PDF处理成可复制的文字版, ...

  3. 怎么将扫描版pdf文件怎么转换成word文件

    由于PDF是一种复杂多样的文档格式,有的时候我们遇到的PDF文件不是纯文字源的内容的,而是一页页扫描版PDF文件,此时如何想得到文本或Word文档?如何还未找到合适的解决方法,可以使用迅捷PDF转换器 ...

  4. 扫描仪扫描文件处理-ABBYY对扫描版PDF文字加黑加粗、去除背景漂白

    1. 设置ABBYY自动歪斜矫正: 2. 设置导出PDF参数: 3. PDF文字加黑加粗.去除背景漂白步骤: 3.1 ABBYY - 打开扫描版PDF文档 3.2 ABBYY - 编辑图像 3.3 等 ...

  5. 让Kindle支持扫描版PDF重排

    使用小屏幕Kindle阅读PDF文档时,如果文档不是专门为小屏幕阅读器排版,就会经常出现显示字体太小的情况,造成阅读不便.而Kindle的屏幕刷新率又太低,页面局部放大后再移动阅读区域亦不现实.解决这 ...

  6. 扫描版pdf重排 linux,【Kindle Pdf Viewer中文安装教程】支持扫描版PDF重排及其他主流文件格式...

    上周末从战隼的微博上看到一条消息: @warfalcon:这个东西支持扫描版PDF重排和几乎所有主流文件格式 ,其中主力开发人员还有一个是中国人 安装指南:http://t.cn/zleknp3 微博 ...

  7. pdf 加深 扫描件_把扫描版pdf变得更小更清晰的技巧

    如何让扫描版pdf变得更小更清晰 1.首先用acrobat导出图片.点击菜单栏上的"另存为"->"图像"->"png"保存成pn ...

  8. c#写一个识别扫描版pdf表格的程序,并把结果excel下载下来

    需求: 识别扫描版pdf中表格数据 实现: 调用百度OCR识别pdf中表格,然后把百度OCR识别好的结果excel下载下来,①就是两个函数,一个函数就是获得调用百度OCR,获得excel结果url,② ...

  9. 扫描版PDF自动添加书签 | 电子书目录自动获取

    经常遇到扫描版PDF没有书签的情况,阅读起来很不方便,手动添加书签耗时较多. 自动获取目录,自动添加书签,完美解决.

  10. 扫描版PDF添加目录

    扫描版PDF如何添加目录- 准备工作 使用的软件:FreePic2Pdf-v11.0.3.1.exe(下载链接:百度网盘 提取码:28xb)单独一个exe的文件 PDF文件 插入目录步骤 双击打开Fr ...

最新文章

  1. windbg设断点命令详解(bp, bu, bm, ba 以及bl, bc, bd, be)
  2. 2048——Java控制台版本
  3. 短视频自研还是选择第三方?技术选型前必看的自检清单
  4. 《也要相信》——沙叶新
  5. javascript数组浅谈1
  6. P4770-[NOI2018]你的名字【SAM,线段树合并】
  7. C语言申请内存时堆栈大小限制
  8. python中int和eval的区别_python中eval与int的区别浅析
  9. 作为开发人员,这四类Code Review方法你都知道吗?
  10. react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧
  11. Flex4学习笔记(二)--语法相关
  12. 百练(十三~十六)题解
  13. Java小白进阶笔记(5)-进阶面向对象
  14. ShopXO开源电商系统源码
  15. 【基本办公软件】万彩办公大师教程丨二维条码制作工具
  16. Linux学习(4)-文件颜色,绿色,蓝色,白色,红色等代表的意义
  17. 光刻厚胶 Thick Resist(SU-8 GM10xx,SU-8 Microchem,SPR220,NR26-25000P)
  18. 判断司机是否酒后驾车
  19. 计算机表盘,深度学习表盘识别
  20. C# 淘宝商品微信返利助手开发-(八)微信号对接

热门文章

  1. PHP肥料源码_PHP农场养殖游戏巨人农场复利平台源码带抽奖
  2. 安装zsh-autosuggestions zsh-syntax-highlighting
  3. 随书光盘资源下载/提取码(二)
  4. 如何解决SQL挂起问题
  5. DXperience Winforms12.2版中文使用手册
  6. 千锋教育JavaScript视频教程笔记
  7. C++ windows网络编程系列1—各种通信模型对比
  8. 数学模型——药物中毒急救模型(基于python)
  9. Linux制作软盘镜像
  10. 哨兵1号数据、精密轨道数据、DEM数据下载