当前位置:   article > 正文

PYTHON PyMuPDF库常见方法及使用

pymupdf

常见方法介绍

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

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

若为默认参数,则创建一个新的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)
  • 1

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)
  • 1

若文件同名,则覆盖该文件
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
  • 1
  • 2
  • 3

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)
  • 1

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)
  • 1

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

提取页面信息page.get_text()

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/500658
推荐阅读
相关标签
  

闽ICP备14008679号