赞
踩
针对python 3.10
利用fitz库读取文件:
import fitz
file = 'test.pdf'
doc = fitz.open(file)
获得doc的对象数:
lenXREF = doc.xref_length()
遍历每一个对象,并打印:
for i in range(1, nums):
# 定义对象字符串
text = doc.xref_object(i);
print(i, text)
import fitz import time import re import os #1.使用正则表达式查找PDF中的图片 def pdfTOpic(path,pic_path):#path:pdf的路径,pic_path:图片保存的路径 t0 = time.perf_counter() #python 3.8已经不支持time.clock了 #使用正则表达式来查找图片 checkXO = r"/Type(?= */XObject)" checkIM = r"/Subtype(?= */Image)" #打开pdf doc = fitz.open(path) #图片计数 imgCount = 0 lenXREF = doc.xref_length() #打印pdf的信息 print("文件名:{},页数:{},对象:{}".format(path,len(doc),lenXREF-1)) #遍历每一个对象 for i in range(1,lenXREF): #定义对象字符串 text = doc.xref_object(i) isXObject = re.search(checkXO,text) #使用正则表达式查看是否是图片 isImage = re.search(checkIM,text) #如果不是对象也不是图片,则continue if not isXObject or not isImage: continue imgCount+=1 #根据索引生成图像 pix = fitz.Pixmap(doc,i) #根据pdf的路径生成图片的名称 new_name = path.replace('\\','_')+"_img{}.png".format(imgCount) new_name = new_name.replace(':','') #如果pix.n<5,可以直接存为png if pix.n<5: pix.writePNG(os.path.join(pic_path,new_name)) #否则先转换CMYK else: pix0 = fitz.Pixmap(fitz.csRGB,pix) pix0.writePNG(os.path.join(pic_path,new_name)) pix0 = None #释放资源 pix = None t1 = time.perf_counter() print("运行时间:{}s".format(t1-t0)) print("提取了{}张图片".format(imgCount)) if __name__ == '__main__': #pdf路径 path = r'E:\PythonExperiment\Numerial.pdf' #创建保存图片的文件夹 pic_path = r'E:\PythonExperiment\extractPictrue' if os.path.exists(pic_path): print("文件夹已存在,请重新创建文件夹!") raise SystemExit else: os.mkdir(pic_path) m=pdfTOpic(path,pic_path)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。