pdf文件转图片的两种方法

本文详细介绍了如何使用PyMuPDF库和pdfplumber库将PDF文件转换为图片,包括安装、接口演示和实例操作,帮助读者理解两种工具在处理PDF转图片任务上的不同方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要记录几种pdf文件转为图片的几种方法,方便日后使用。

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()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值