python提取扫描版pdf中的文字,python输出pdf文档

转载: zxdst chenx6542@foxmail.com 缩写:一半为花间酒) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )

在公众号内转载时请联系公众号:早起Python

在本例中可以学到的知识点:

使用pdf播放器从pdf中提取文本和表格

使用fitz从PDF中提取图像

以前详细说明了批量PDF文件的处理。 这包括合并、拆分、水印和加密。 处理批量PDF文件

文章中详细分析了各行的原理。 这里介绍的是面向PDF的模块很多,有些模块功能不完整,代码也不像OFFICE三点式操作那样简洁

今天学习的PDF图像的提取也是如此。 因此,多以理解为主,不需要完全掌握代码表示,只要能使用就可以了

今天说明的练习数据是年度报告,里面有很多文字、表格和照片

一.模块安装

需要安装两个模块。 第一个是pdf播放器

在Windows上调用命令行:

pip install pdfplumber

第二个是fitz,这是pymupdf的模块

在Windows上调用命令行:

pip install pymupdf

二. PDF文字提取

代码思想:

在PDFplumber中打开pdf文件

获取指定的页面或遍历每页

使用. extract_text )方法提取当前页面的文本

尝试使用上述代码提取示例数据第12页中的字符。

导入pdf播放器

file _ path=r ‘ c :\xxxx\practice.pdf ‘

withpdfplumber.openfile_path ) as pdf:

page=pdf.pages[11]

printpage.extract_text ) )

可以导入python-docx并使用Wordfile.add_paragraph )将提取的内容写入word文件

三. PDF表格提取

提取单个表的代码与使用. extract_table )提取单页字符的代码非常类似

请注意. extract_table )缺省情况下会读取指定页面上的第一个表。 如果当前页需要读取多个表,请直接使用. extract_tables ) )

例如,示例文件的第13页包含两个表。 分别使用. extract_table 和. extract_tables )观察输出情况

导入pdf播放器

file _ path=r ‘ c :\xxxx\practice.pdf ‘

withpdfplumber.openfile_path ) as pdf:

page=pdf.pages[12]

printpage.extract_table ) )

是嵌套列表,熟悉此格式的人将理解,可以使用pandas或遍历嵌套列表并使用openpyxl sheet.append list )写入Excel文件

导入pdf播放器

file _ path=r ‘ c :\xxxx\practice.pdf ‘

withpdfplumber.openfile_path ) as pdf:

page=pdf.pages[12]

printpage.extract_tables )

. extract_tables )提取当前页面中的所有表将生成三阶段嵌套列表,第一阶段列表表示每个表

四. PDF图像提取

关于图像提取,目前没有能够100%提取的模块。 这里只介绍基于fitz模块的代码,基本的想法是正则的,寻找图像并输出

import fitz

导入re

import os

file _ path=r ‘ c :\XXX\practice.pdf ‘

dir_path=r’C:\xxx’ #用于存储图像的文件夹

efpdf2picpath,pic_path ) :

checkXO=r’/Type ?=*/XObject ‘

checkIM=r’/Subtype?=*/Image ‘

pdf=fitz.openpath )

lenXREF=pdf._getXrefLength

imgcount=0

forIinrange1,lenXREF ) :

text=pdf._getxrefstringI ) )

isxobject=re.searchcheckxo,text ) ) ) ) ) ) ) ) ) )。

isimage=re.searchcheckim,text ) ) ) ) ) ) ) ) ) )。

ifnotisxobjectornotisimage :

continue

imgcount =1

pix=fitz.pixmappdf,I ) )。

new_name=f’img_{imgcount}.png ‘

if pix.n 5:

pix.writepngOS.path.join ) pic_path,new_name ) )

else:

pix0=fitz.pixmapfitz.csRGB,pix ) )。

pix0.writepngOS.path.join ) pic_path,new_name ) )

pix0=None

pix=None

pdf2picfile_path,dir_path ) )。

图像提取成功,但PDF中的图像还不止这些。 欢迎感兴趣的读者交流

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注