PYTHON PyMuPDF库常见方法及使用

常见方法介绍

创建或打开PDF文件:fitz.open()

fitz.open(self, filename=None, stream=None, *, filetype=None, rect=None, width=0, height=0, fontsize=11)

若为默认参数,则创建一个新的PDF文档
filename (str,pathlib):打开已有的PDF文件,输入为文件的路径。
stream (bytes,bytearray,BytesIO):从内存中打开PDF,若不是PDF,则需 在filename或filetype中指明其类型。
filetype (str):指明文件类型,如"pdf"或".pdf"。
rect (rect_like):指定页面大小。
返回值:文档对象

文档插入空页面:Document.new_page()

Document.new_page(pno=-1, width=595, height=842)

pno (int):插入页面在int后,范围[-1, doc.page_count + 1)。
返回值:页面对象。

文件保存:Document.save()

Document.save(outfile, garbage=0, clean=False, deflate=False, deflate_images=False, deflate_fonts=False, incremental=False, ascii=False, expand=0, linear=False, pretty=False, no_new_id=False, encryption=PDF_ENCRYPT_NONE, permissions=-1, owner_pw=None, user_pw=None)

若文件同名,则覆盖该文件
outfile (str,Path,fp):要保存的文件路径
返回值:None。

插入文本/文本框:page.insert_text()/page.insert_textbox()

page.insert_text(point, text, fontsize=11, fontname='helv', fontfile=None, idx=0, color=None, fill=None, render_mode=0, border_width=1, encoding=TEXT_ENCODING_LATIN, rotate=0, morph=None, stroke_opacity=1, fill_opacity=1, overlay=True, oc=0)

page.insert_textbox(rect, buffer, fontsize=11, fontname='helv', fontfile=None, idx=0, color=None, fill=None, render_mode=0, border_width=1, encoding=TEXT_ENCODING_LATIN, expandtabs=8, align=TEXT_ALIGN_LEFT, charwidths=None, rotate=0, morph=None, stroke_opacity=1, fill_opacity=1, oc=0, overlay=True

point (point_like):以像素为单位的文本第一个字符的左下位置。
text (str/sequence):要插入的文本/文本序列。
lineheight (float):行高,若不为None。实际行高为fontsize * lineheight。
stroke_opacity (float):描边透明度。
fill_opacity (float):填充透明度。
rotate (int):旋转角度,接受值为90的倍数。
返回值:(int)插入的行数。

rect (rect_like):框大小。
buffer (str/sequence):要插入的文本。
返回值:(float) 若大于等于0,代表成功执行,返回的值为剩余线性空间像素。若为负值,则说明文本框大小不足。

插入图片page.insert_image()

page.insert_image(rect, filename=None, pixmap=None, stream=None, mask=None, rotate=0, alpha=-1, oc=0, xref=0, keep_proportion=True, overlay=True)

rect (rect_like): 放置位置。
filename (str):文件名。
stream (bytes,bytearray,io.BytesIO):内存中的图片。
返回值(int)嵌入图像的xref,再次插入时传入此参数可以提高速度。

创建像素图page.get_pixmap()

get_pixmap(*, matrix=fitz.Identity, dpi=None, colorspace=fitz.csRGB, clip=None, alpha=False, annots=True)

matrix(matrix_like):用于旋转、剪切、缩放和移动的矩阵。
dpi (int):期望分辨率,调整此参数将会忽略matrix。
clip (irect_like):提取的区域。

提取页面信息page.get_text()

page.get_text(opt, *, clip=None, flags=None, textpage=None, sort=False)

opt (str):所请求格式的字符串。可选参数有:“text”,“blocks”,“words”,“html”,“dict” 等。
Flags (int):标志位,如何处理关于空白和连字符的文本。
返回值 str/list/dict

常见场景使用

pdf页面保存为图片

import fitz
#pdf转图片函数
#pdf_path为文件路径,img_path为要保存的路径,n为要提取的页码数。
def pdfconvertpicture(pdf_path,img_path,n):
    #使用fitz.open()创建文档对象
    with fitz.open(pdf_path) as pdf:
        cout = 0
        for pg in range(0, pdf.page_count):
            page = pdf[pg]
            #设置缩放和旋转系数,zoom_x, zoom_y取相同值,表示等比例缩放
            #mat = fitz.Matrix(2, 2)
            #pm = page.get_pixmap(matrix=mat, alpha=False)
            #个人感觉dpi的效果更清晰一点。
            pm = page.get_pixmap(matrix=mat,dpi=500,alpha=False)
            page_num = pg + 1  # 页码从1开始
            pm.save(f'{img_path}/{page_num}.png')  # 第1张图片名:1.png,以此类推
            cout = cout + 1
            if cout == n:
                break

pdf文件内图片提取

import fitz
#pdf转图片函数
#pdf_path为文件路径,img_path为要保存的路径,n为要提取的页码数。
def pdfgetimg(pdf_path,img_path,n):
    #使用fitz.open()创建文档对象
    with fitz.open(pdf_path) as pdf:
        cout = 0
        for pg in range(0, pdf.page_count):
            page = pdf[pg]
            #blocks会中有个返回值会说明为文本还是图像。
            blocks = page.get_text("blocks")
            for block in blocks:
            	bbox=[block[0],block[1],block[2],block[3]]
            	#block[4]为文本内容,block[6] 1为图像,2为文本
            	if block[6]==1:
            		img = page.get_pixmap(clip=bbox, alpha=False, dpi=500)
            page_num = pg + 1  # 页码从1开始
            img .save(f'{img_path}/{page_num}_{bbox}.png')  # 第1张图片名:1.png,以此类推。
            cout = cout + 1
            if cout == n:
                break
    

更多教程请参照官方参考文档:https://pymupdf.readthedocs.io/en/latest/classes.html

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值