介绍基于pdf2image库的两种方法
在python中提取pdf图片的方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
基于菲茨库和正则搜索
菲茨是pymupdf的子模块,需要先用命令行安装pymupdf:
pip install pymupdf
但注意导入时使用<代码> 代码>进口菲茨一样导入模块!
下面的代码就利用<代码> fitz> 代码库提取图片需要通过正则匹配图片元素,将模板元素转化为像素后再以图片形式写出
import 菲茨 import 再保险 import 操作系统 时间=file_path " # 39; C: \ xxx \ xxx.pdf& # 39;, #, PDF 文件路径 时间=dir_path " # 39; C: \ xxx # 39;, #,存放图片的文件夹 def pdf2image1(路径,pic_path): checkIM 才能=,r"/亚型(?=,*/图片), 时间=pdf 才能;fitz.open(路径) 时间=lenXREF 才能;pdf._getXrefLength () count 才能=1 for 才能小姐:拷贝范围(1,lenXREF): ,,,text =, pdf._getXrefString(我) ,,,isImage =, re.search (checkIM,文本) ,,,if not isImage: ,,,,,继续 ,,,pix =, fitz.Pixmap (pdf,,我) ,,,new_name =, f" img_{数}.png" ,,,pix.writePNG (os.path.join (pic_path, new_name)) ,,,count +=1 ,,,pix =,没有 pdf2image1 (file_path, dir_path)
运行提取示例文件后结果如下:
可以看的到,有一些很小的色块也被提取成图片,那么怎么过滤掉它们呢?
有一个简单的方法是通过大小过滤,影片像素在菲茨库中存在一个重要的方法沥青。大小可以反映像素多少,简单的色素块该值较低,可以通过设置一个阈值过滤。以阈值为10000例过滤:
import 菲茨 import 再保险 import 操作系统 时间=file_path " # 39; C: \ xxx \ xxx.pdf& # 39;, #, PDF 文件路径 时间=dir_path " # 39; C: \ xxx # 39;, #,存放图片的文件夹 def pdf2image1(路径,pic_path): checkIM 才能=,r"/亚型(?=,*/图片), 时间=pdf 才能;fitz.open(路径) 时间=lenXREF 才能;pdf._getXrefLength () count 才能=1 for 才能小姐:拷贝范围(1,lenXREF): ,,,text =, pdf._getXrefString(我) ,,,isImage =, re.search (checkIM,文本) ,,,if not isImage: ,,,,,继续 ,,,pix =, fitz.Pixmap (pdf,,我) ,,,if pix.size & lt;, 10000, #,在这里添加一处判断一个循环 ,,,,,continue #,不符合阈值则跳过至下 ,,,new_name =, f" img_{数}.png" ,,,pix.writePNG (os.path.join (pic_path, new_name)) ,,,count +=1 ,,,pix =,没有 pdf2image1 (file_path, dir_path)
可以看的到,全部图片都被正常提取!
基于pdf2image库的两种方法
一看名字就知道这个库的用处了,官方文档为https://www.cnpython.com/pypi/pdf2image
可以简单通过<代码> pip安装pdf2image 代码>安装,但波普尔才是真正起做用的转换器,因此需要额外安装和配置:
- <李>
窗口用户必须安装<代码>波普尔为windows> 代码,然后将bin/文件夹添加到路径
李> <李> Mac用户必须安装<代码>波普尔对Mac 代码>
具体发挥作用的代码官方文档也给出了详细的说明:
那么我们就分别尝试这两种方法:
得到pdf2image import convert_from_path convert_from_bytes import tempfile 得到pdf2image.exceptions import  PDFInfoNotInstalledError, PDFPageCountError, PDFSyntaxError import 操作系统 时间=file_path " # 39; C: \ xxx \ xxx.pdf& # 39;, #, PDF 文件路径 时间=dir_path " # 39; C: \ xxx # 39;, #,存放图片的文件夹 def pdf2image2 (file_path, dir_path): 时间=images 才能;convert_from_path (file_path, dpi=200) for 才能;image 拷贝图片: ,,,if not os.path.exists (dir_path): ,,,,,os.makedirs (dir_path) ,,,image.save(时间+ file_path f # 39; \ img_ {images.index(图片)}. png # 39;,, & # 39; png # 39;) pdf2image2 (file_path, dir_path)在python中提取pdf图片的方法有哪些