python 提取pdf文本,python pdf修改
虽然你可能需要从一个或多个PDF文件中提取图片,在线网站上实现可能会导致图片泄露,手动操作比较麻烦,但在Python中其实很容易做到。
今天我想和系统分享几个提取PDF图片的Python方法。其实没有完美的方法,任何一种方法的提取效率都不是100%,可以考虑各种方法来补充。主要包括两种提取图像的方法:基于规则搜索的fitz库和pdf2image库。
基于fitz库和常规搜索
Fitz是pymupdf的子模块,您必须首先从命令行安装pymupdf。
pip安装pymupdf
但是,请注意,您将使用import fitz导入模块进行导入。
在下面的代码中,为了使用fitz库提取图像,您必须使图像元素正常匹配,将模板元素转换为像素,然后将其作为图像写入。
导入fitz
进口re
导入操作系统
file _ path=r c:\ XXX \ XXX . pdf # pdf文件路径
Dir_path=rC:\xxx #用于存储图像的文件夹
defPDF2image1(path,pic_path):
checkIM=r /子类型?=*/Image(
pdf=fitz.open(路径)
lenXREF=pdf。_getXrefLength(
计数=1
forIinrange(1,lenXREF):
text=pdf。_getxrefstring(I))
isimage=re.search(checkim,text)))))))))))))).
如果不是图像:
继续
pix=fitz.pixmap(pdf,I)).
new_name=fimg_{count}。巴布亚新几内亚
pix . write png(OS . path . join)pic _ path,new_name))
计数=1
pix=无
PDF2image1(文件路径,目录路径))))))))))))).
执行样本文件提取的结果如下:
你可以看到,一些小色块也被提取为图像。你如何过滤它们?
有一个简单的方法,按大小过滤。Pixel在fitz库中有一个重要的方法。Pix.size反映像素的数量。简单色素块的这个值很低,设置一个阈值就可以过滤掉。以阈值10000为例进行筛选:
导入fitz
进口re
导入操作系统
file _ path=r c:\ XXX \ XXX . pdf # pdf文件路径
Dir_path=rC:\xxx #用于存储图像的文件夹
defPDF2image1(path,pic_path):
checkIM=r /子类型?=*/Image(
pdf=fitz.open(路径)
lenXREF=pdf。_getXrefLength(
计数=1
forIinrange(1,lenXREF):
text=pdf。_getxrefstring(I))
isimage=re.search(checkim,text)))))))))))))).
如果不是图像:
继续
pix=fitz.pixmap(pdf,I)).
如果pix.size 10000: #这里加个地方判断一个周期
如果continue #不匹配阈值,请跳下来。
new_name=fimg_{count}。巴布亚新几内亚
pix . write png(OS . path . join)pic _ path,new_name))
计数=1
pix=无
PDF2image1(文件路径,目录路径))))))))))))).
你会发现所有的图像都被正常提取了!
基于pdf 2图像库的两种方法
你可以从这个库的名字看出它的用处。官方文件是https://www.cn python.com/pypi/pdf 2图像。
虽然可以在pip install pdf2image中轻松安装,但实际上poppler是一个可以正常工作的转换器,所以需要额外的安装和配置。Windows用户必须安装poppler for Windows和poppler for Mac才能将jqdty/folder添加到PATH Mac用户。
具体功能代码在官方文档中也有详细描述:
所以,我们分别试试这两种方法。
来自pdf 2 imageimportconvert _ from _ path,convert_from_bytes
导入模板
来自pdf 2 image . exceptionsimportpdfinfonotinstallederror、PDFPageCountError、PDFSyntaxError
导入操作系统
file _ path=r c:\ XXX \ XXX . pdf # pdf文件路径
Dir_path=rC:\xxx #用于存储图像的文件夹
efPDF2image2(文件路径,目录路径) :
images=convert _ from _ path(文件路径,dpi=200).
对于图像中的图像:
ifnotOS.path.exists(dir_path):
OS.makedirs(目录路径)).
image . save(file _ pathf \ img _ { images . index)image)}。png , PNG ))
PDF2image2(文件路径,目录路径))))))))))))).
图像提取成功。尝试第二种方法:
来自pdf 2 image import convert _ from _ path,convert_from_bytes
导入模板
来自pdf 2 image . exceptionsimportpdfinfonotinstallederror、PDFPageCountError、PDFSyntaxError
导入操作系统
file _ path=r c:\ XXX \ XXX . pdf # pdf文件路径
Dir_path=rC:\xxx #用于存储图像的文件夹
efPDF2image3(文件路径,目录路径) :
images=convert _ from _ bytes(open(file _ path, rb )。阅读) )
对于图像中的图像:
ifnotOS.path.exists(dir_path):
OS.makedirs(目录路径)).
image . save(file _ pathf \ img _ { images . index)image)}。png , PNG ))
PDF2image3(文件路径,目录路径))))))))))))).
结果和之前一样,PDF中的所有图片都会被提取出来!
我想补充一下。核心方法covert _ from _ bytes包含很多参数,可以自己修改。几个通用参数总结如下。
参数
意义
pdf _路径
PDF路径
(灰)点/英寸(扫描仪的清晰度参数)
画质(针对学术杂志常见的300dpi)))))))))))))。
输出_文件夹
将生成的图像写入文件夹,而不是直接写入内存。
首页
开始转换页面
最后一页
您想转换到哪一页?
滤波多音
图像格式。可以指定为png,默认值为ppm。
线程计数
可以参与转换的线程数
userpw
PDF密码
输出文件
导出文件名
波普勒_路径
指定portlet的安装路径。如果您首先配置它,则不需要指定它。
有趣的是,可以启动多个线程的thread_count参数可以大大提高转换速度,尤其是在PDF页面较多的情况下。有兴趣的读者可以试试。
以上是python的三种方法从pdf中提取图片的细节。有关python从pdf中提取图像的信息,请参考免费Resources.com的其他相关文章。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。