本文主要记录几种
1、借助PyMuPDF库
可以将页面呈现为光栅或矢量(SVG)图像,可以选择缩放、旋转、移动或剪切页面。
1)安装
pip install PyMuPDF
2)查看版本
import fitz
print(fitz.__doc__)

3)常用接口
-
打开
pdf文件,或者创建pdf文件doc=fitz.open(文件名)#或fitz.Document(文件名)Document的一些属性:属性 描述 Document.page_countint类型,页数Document.get_toc()list类型,内容目录Document.load_page()读取页面 -
加载页面
page = doc.load_page(pno) page = doc[pno] page = doc[-1] # 最后一页 # 也可以作为迭代器 for page in doc: .... # 从后往前读取 for page in reversed(doc): .... # 切片 for page in doc.pages(start, stop, step): .... -
呈现页面
# 函数定义 def get_pixmap( self, matrix: AnyType = None, colorspace: "Colorspace" = None, alpha: int = 0, ) -> "Pixmap": pix = page.get_pixmap()pix是一个Pixmap对象,它(在本例中)包含页面的RGB图像,可用于多种用途。方法Page.get_pixmap()提供了许多用于控制图像的变体:分辨率、颜色空间(例如,生成灰度图像或具有减色方案的图像)、透明度、旋转、镜像、移位、剪切等。
例如:创建RGBA图像(即,包含alpha通道),指定pix=page.get_pixmap(alpha=True)。
Pixmap包含以下引用的许多方法和属性。其中包括整数宽度、高度(每个像素)和跨距(一个水平图像行的字节数)。属性示例表示表示图像数据的矩形字节区域(Python字节对象)。 -
将页面图像保存到文件中
pix.save('page.png') # 将页面图像保存到文件page.png中
4)将pdf转为图片实例
def pdf2img(pdf_path, zoom_x, zoom_y, rotate_angle=0, clip_roi=None):
'''
zoom_x x方向的缩放系数
zoom_y y方向的缩放系数
rotation_angle 旋转角度
clip_roi 裁切区域坐标
'''
# open pdf file
pdf = fitz.open(pdf_path)
# logger.debug('Total: %d pages.'%pdf.pageCount)
page = pdf[0] # 处理第一页
# 设置缩放和旋转系数
trans = fitz.Matrix(zoom, zoom).preRotate(rotate_angle)
if clip_roi is not None:
rect = page.rect # 页面大小
mp = rect.tl + (rect.br - rect.tl) * 0.5 # 矩形的中心
# clip = fitz.Rect(mp, rect.br) # 想要截取的区域
clip = fitz.Rect(clip_roi[0], clip_roi[1]) # 想要截取的区域
pix = page.get_pixmap(matrix=trans, alpha=False, clip=clip) # 将页面转换为图像
else:
pix = page.get_pixmap(matrix=trans, alpha=False)
save_roi_name = pdf_path[:-4] + '_clip.png'
pix .save(save_roi_name)
pdf.close()
2、基于pdfplumber库
1)安装
pip install pdfplumber
2)常用接口
- 读取
pdf文件
这两种方法都返回# 打开pdf文件 pdfplumber.open("test.pdf") # 从内存加载 pdfplumber.load(file_like_object)pdfplumber.PDF类的实例。
若pdf带有密码,则需要传入password参数pdfplumber.open('test.pdf', password='test')` pfplumber.Page类
pdfplumber.Page类是pdfplumber整个的核心,有以下几个属性和方法:
| 属性 | 描述 |
|---|---|
.page_number | 页码顺序,从1开始 |
.width | 页面宽度 |
.height | 页面高度 |
.objects /.chars / .lines / .rects / .curves / .images / .figures | 这些属性都是列表形式 |
| 方法 | 描述 |
|---|---|
.crop(bounding_box) | 返回裁剪后的页面,bounding_box的值表示为(x0, top, x1, bottom)的四元组。 |
.extract_text(x_tolerance=0, y_tolerance=0) | 将页面中所有的字符对象提取到一个字符串中 |
.extract_words(x_tolerance=0, y_tolerance=0, horizontal_ltr=True, vertical_ttb=True) | 返回所有单词外观及其边界框的列表 |
.to_image(**conversion_kwargs) | 返回PageImage类的实例。 |
- 保存图像
im.save(path_or_object, format="PNG")
3)实例
import pdfplumber
path = './express_datas/YTO.pdf'
pdf = pdfplumber.open(path)
first_page = pdf.pages[0] # 第一页
print(first_page.page_number)
print('Page_W: ', first_page.width)
print('Page_H: ',first_page.height)
text = first_page.extract_text() # 提取页面中的文本内容
print(text)
im = first_page.to_image(resolution=96)
im.save('output.jpg')
pdf.close()
本文详细介绍了如何使用PyMuPDF库和pdfplumber库将PDF文件转换为图片,包括安装、接口演示和实例操作,帮助读者理解两种工具在处理PDF转图片任务上的不同方法。
787

被折叠的 条评论
为什么被折叠?



