简介

对pdf文件的常见操作需求包括读取pdf中的文字图表,新建或截取pdf,pdf与其他格式的转换等。通过代码可更灵活的实现各种功能需求。在众多可处理pdf的包中选择PyMuPDF进行介绍。PyMuPDF是MuPDF的python接口,可处理 的文件格式后缀包括 pdf,xps,oxps,cbz,fb2, epub。另外也可处理10余种常见图片格式,包括:png,jpg,bmp,tiff等。

具体功能

  • 搜索文本
  • 提取文本和图片
  • 转换格式为 html,xml,json,txt
  • 结合Tesseract使用,可对图片进行OCR 文本提取
  • 可作为图片转换器,将读入的文件转换为PNG,PNM,PAM或 Photoshop文件,同时也可以与PIL/Pillow结合使用进行图片操作
  • 对于pdf文件,可进行文件和页面的创建,合并和拆分。同时页面可进行插入,删除,替换或重新排列等操作
  • 可将pdf重新格式化,以使其能够双面打印,色调分离,添加logo或水印等
  • 支持加密,解密,权限设置等密码保护措施

安装

pip install pymupdf 或 PyMuPDF
由于历史原因,导入PyMuPDF 包的语句为:
import fitz

常用操作

以下以 1.18.17 版本为例介绍。

  1. 读取pdf文件

    可直接打开支持的文件类型,输入文件名即可。也可以打开已经由其他工具读取的文件流。打开后,可对其中的页面进行操作。

doc = fitz.open(filename)
# 先从zip压缩文件读取,再使用fitz打开
doc = fitz.open(stream=zfile.read(pdf), filetype="pdf")
# 获取pdf中页面
first_page = doc.load_page(0)
# 或直接遍历
for page in doc:# do something
  1. 提取pdf中全部文本或搜索文本

    遍历所有页面,获取文本。搜索文本只能在单个页面上进行,可通过遍历获取全部结果。

texts = ""
with fitz.open(path) as doc:for page in doc:# 提取文字texts += page.getText() # 现更改为 page.get_text()# 在当前页面上搜索指定内容rect = page.search_for("keyward")
# 或直接在doc水平,加载指定页面进行搜索doc.search_page_for(page_num,"keyward")
  1. 图片操作
  • 读取各种格式的图片

    可读取普通格式,二进制文件流或base64格式的图片。

if type == "byte":img = fitz.open(stream=f, filetype=filetype)
elif type == "base64":img = fitz.open(stream=io.BytesIO(base64.b64decode(f)), filetype=filetype)
else:img = fitz.open(f)
  • 提取页面中的图片

    首先需要获取xref (cross-reference number)。xref是交叉引用编号,这是pdf中对象的整数唯一标识。每个pdf都存在一个交叉引用表(物理上可能有几个单独的部分组成)。它存储每个对象的相对位置,以便快速查找。其中item 0是保留项,不会以任何方式使用。 许多PyMuPDF类有一个xref属性(非PDF为0),可以获得pdf中对象的总数 :Document.xref_length() - 1 。有两种方式获取xref,得到xref后又有两种方式提取图片,如下:

#获取单个页面上图片的xref
Page.get_images()
# 得到pdf的xref数目后全部遍历,找到需要的图片对应的xref
doc.extract_image(xref)
# 2种方式提取图片
pix = fitz.Pixmap(doc, xref)
img = doc.extract_image(xref)

其中Page.get_images()的返回内容为包含多个信息的list,内容为(xref, smask, width, height, bpc, colorspace, alt.colorspace, name, filter, referencer)。

  • 页面转换为图片
pix = page.get_pixmap() # render page to an image
pix.save("page-%i.png" % page.number) # 保存图片
  • 增加图片分辨率
zoom_x = 2 # 放大2倍
zoom_y = 2
rotate = int(0)
mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
pix = page.getPixmap(matrix=mat, alpha=False)
  1. 截取pdf中部分页面生成新的pdf
pdfDoc = fitz.open(pdf_path)
pageNum = pdfDoc.pageCount
pdfDoc.select([i for i in range(pageNum -5, pageNum )]) # 选择最后5页进行保存
pdfDoc.save(new_pdf_path, garbage=3)  # 保存为新的pdf
pdfDoc.close()
  1. 合并多个图片创建为新的pdf文件
doc = fitz.open()
for i, f in enumerate(images):img = fitz.open(f)rect = img[0].rect  # pic dimensionpdfbytes = img.convert_to_pdf()  # 图片转换为pdf字节img.close()  # no longer neededimgPDF = fitz.open("pdf", pdfbytes)  # open stream as PDFpage = doc.new_page(width=rect.width,  height=rect.height)  # pic dimensionpage.show_pdf_page(rect, imgPDF, 0)  # 将图片转换后的pdf对象填充到页面
doc.save(outfile)

总结

PyMuPDF中有一些最常用的类,也是pdf各种核心操作的对象,其属性值可提供各种信息,上述各种操作需求也是基于对象方法的使用,仅仅是一些常见需求。更多功能操作或需求,以及全部类更详细的属性方法可参考官方文档。常用的有以下几种:

  1. Document
    打开一个文件即实例化了一个Document,可通过读取文件或内存获得。部分方法如下:

  2. Page
    document中的每个页面是Page类。

  3. Pixmap
    Pixmap是MuPDF渲染能力的核心对象,表示平面像素集。PyMuPDF中有多种方法创建 pixmap,比如 从页面或pdf中图片直接创建,主要用来进行与图片相关的各种操作,比如图片格式转换,缩放,裁剪等。

python处理pdf文件相关推荐

  1. Python绘制PDF文件~超简单的小程序

    Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...

  2. gnuradio上怎么使用python文件_使用Python从PDF文件中提取数据

    前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...

  3. pdf exe如何提取pdf文件_python应用:如何用python提取pdf文件中的文字

    从pdf中提取文字,相信很多人都干过这事,怎么在python中实现呢,今天带大家看看. 第一步导入库 import PyPDF2 第二步导入pdf文件 pdf_file =open('dataset/ ...

  4. python数据生成pdf,Python生成pdf文件的方法

    摘要:这篇Python开发技术栏目下的"Python生成pdf文件的方法",介绍的技术点是"python生成pdf文件.python生成pdf.生成pdf文件.Pytho ...

  5. 使用Python从PDF文件中提取数据

    前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...

  6. Python:PDF文件转图像

    Python:PDF文件转图像 什么是PyMuPDF? Python环境下想要将PDF文件转图像,可以使用PyMuPDF库. PyMuPDF是MuPDF的Python绑定-"轻量级PDF和X ...

  7. 利用Python提取PDF文件中的文本信息

    如何利用Python提取PDF文件中的文本信息 日常工作中我们经常会用到pdf格式的文件,大多数情况下是浏览或者编辑pdf信息,但有时候需要提取pdf中的文本,如果是单个文件的话还可以通过复制粘贴来直 ...

  8. 如何用python修改pdf内容_如何利用python将pdf文件转化为txt文件?

    https://www.wukong.com/answer/6579491774144708872/?iid=15906422033&app=news_article&share_an ...

  9. 使用Python读取pdf文件

    学习python,不用再为pdf无法转换而烦恼~~~ 下面我们介绍python读取pdf文件(主要是针对文字部分) 1.打开环境 2.安装pdfminer3k包 可以使用jupyter noteboo ...

  10. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

最新文章

  1. Rocksdb 的 rate_limiter实现 -- compaction限速
  2. texmaker不能点击跳转到行
  3. 删除Linux的依赖库并进入救援模式恢复
  4. jQuery 效果函数(三)
  5. 开源IT从业者最受欢迎5大技能
  6. JUST技术:提升基于GPS轨迹的路网推测精确度
  7. linux监控nginx占用,使用zabbix 2.4 监控nginx
  8. 2021年上半年移动广告流量观察白皮书
  9. moodle架构分析---表现层的设计(一)
  10. 计算机密码突然不正确,win10开机密码明明正确,win10密码突然不对了
  11. 分享:Tuts4you社区,脱壳教程全集.1.5G
  12. 5G承载网,从入门到……放弃?
  13. 创新思维与方法期末考试答案
  14. ruoyi数据权限设置
  15. STC89C52控制74HC595,74HC138双色16x16点阵屏循环显示汉字
  16. python余弦相似度_推荐系统01--余弦相似度
  17. 考研计算机专业课考研大纲,计算机专业课考研大纲
  18. 图像所征服你的七种武器
  19. 关于若依框架页面跳转但内容不变的问题
  20. K8s in Action 阅读笔记——【9】Deployments: updating applications declaratively

热门文章

  1. QII中的几个Warning的解决方法
  2. 首攻RSA,天空卫士“秀肌肉”怎么样了?
  3. 将正方形矩阵顺时针转动90度(Java)
  4. Scala Cookbook读书笔记 Chapter 3.Control Structures 第一部分
  5. synopsys license工具_Cadence or Synopsys?数字芯片实现工具大比拼!
  6. maya2018怎样导入图片
  7. 贪婪洞窟2一直显示连接服务器失败,贪婪洞窟2登录失败怎么办 登陆失败解决方法介绍...
  8. 如何用计算机制作动态图,怎样用电脑轻松制作GIF动图图片
  9. python实现括号匹配算法_Python实现括号匹配方法详解
  10. 从零开始的LC刷题(74): Reverse Vowels of a String