PyPDF是MuPDF的Python绑定——“轻量级PDF和XPS Viewer”。本文将使用PyMuPDF来实现PDF的一些基本操作。文中的样例代码会有详细的讲解,有兴趣的可以看看。
:
目录
1.PyMuPDF简介。介绍功能2。安装关于命名菲茨的说明。3.使用方法导入库,检查版本,打开文档的方法和属性,获取元数据,获得目标轮廓页面(页面)PDF操作
1、PyMuPDF简介
介绍
在介绍PyMuPDF之前,我们先了解一下MuPDF。从命名形式可以看出,PyMuPDF是MuPDF的Python接口形式。
MuPDF
MU是用于MuPDF、XPS和电子书的轻量级查看器。MuPDF由软件库、命令行工具和各种平台的查看器组成。
MU中的渲染器是专门为高质量抗锯齿图形定制的。当在屏幕上再现打印页面的外观时,它以精确到几分之一像素的度量和间距呈现文本,以获得最高的保真度。
这个查看器很小很快,但是很完整。它支持多种文档格式,如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2。您可以使用移动查看器来注释PDF文档和填写表单(该功能也将很快应用到桌面查看器)。
命令行工具允许您注释、编辑文档,并将文档转换为其他格式,如HTML、SVG、PDF和CBZ。您还可以使用Javascript编写脚本来操作文档。
PyMuPDFPyMuPDF(当前版本1.18.17)是一个支持MuPDF(当前版本1.18)的Python绑定。*).
使用PyMuPDF,您可以访问。pdf,xps,oxps,cbz,fb2或者。epub。此外,大约10种流行的图像格式也可以像文档一样处理。png“,”。jpg“,”。bmp“,”。tiff”等等。
功能
对于所有支持的文档类型,您可以:
1.解密文件
2.访问元信息、链接和书签
3.以光栅格式(PNG和其他格式)或矢量格式SVG呈现页面
4.搜索文本
5.提取文本和图像
6.转换为其他格式:PDF,(X)HTML,XML,JSON,文本
对于PDF文档,有大量的附加功能:它们可以是创建、合并或拆分。页面可以是插入、删除、重新排列或修改多种方式(包括注释和表单域)。
7.您可以提取或插入图像和字体
8.完全支持嵌入文件。
9.pdf可以重新格式化,以支持双面打印,色调分离,标志或水印应用。
10.完全支持密码保护:解密、加密、加密方法选择、权限级别和用户/所有者密码设置。
1.支持图像、文本和图形的PDF可选内容概念
12.您可以访问和修改低级PDF结构
13.命令行模块‘python-m fitz…’是一个多功能实用程序,具有以下特性
新:布局保存文本提取!脚本fitzcli.py通过子命令“gettext”提供不同格式的文本提取。当然,有趣的是布局保存,它生成尽可能接近原始物理布局的文本,即周围有图像的区域,或者复制表格中的文本和多列文本。
加密/解密/优化以创建子文档。文档连接图像/字体提取完全支持嵌入式文件保存布局的文本提取(所有文档)
2、安装
PyMuPDF可以从源安装,也可以从wheels安装。
对于Windows、Linux和Mac OSX平台,在PyPI的下载部分有轮子。这包括Python 64位版本3.6到3.9。Windows版本也有32位版本。最近Linux ARM架构出现了一些问题。——寻找平台标签manylinux2014_aarch64。
除了标准库,它没有强制性的外部依赖。只有安装了某些包,才会有一些好的方法:
Pillow:使用Pixmap.pil_save()和Pixmap.pil_tobytes()时需要fontTools:使用Document.subset_fonts()时pymupdf-fonts是一个很好的字体选择,可以作为文本输出方式。
使用pip安装命令:
pip安装PyMuPDF
导入库:
importfitz
关于命名fitz的说明
这个库的标准Python导入语句是import fitz。这是有历史原因的:
MU原来的渲染库叫Libart。
Artifex软件赢得MuPDF项目后,开发重点转移到编写一个新的现代图形库,名为“Fitz”。Fitz最初是作为一个研发项目来替代老化的Ghostscript图形库,但它成为了MuPDF的渲染引擎(引自维基百科)。
3、使用方法
导入库,查看版本
importfitz
打印(菲茨。__doc__)
pymupdf 1 . 18 . 16:python bindingsforthemupdf 1 . 18 . 0库
版本日期:2021-08-0500:00:01。
builtforpython 3.8 online UX(64位)。
打开文档
doc=fitz.open(文件名)
这将创建文档对象doc。文件名必须是现有文件的python字符串。
您也可以从内存数据打开文档,或创建一个新的空PDF。您还可以将文档用作上下文管理器。
Document的方法和属性
示例:
doc.count_page
一
文档元数据
{ '格式':' PDF1.7 ',
标题“:”,
作者“:”,
主题“:”,
关键词“:”,
创建者“:”,
生产商':'福鑫阅读器PDF打印机版本10.0.130.3456 ',
创建日期':' D:20210810173328 08'00 ',
修改日期:20210810173328 08'00 ',
被困“:”,
'加密':无}
获取元数据
PyMuPDF完全支持标准元数据。Document.metadata是一个Python字典,带有以下键。
它适用于所有文档类型,但并非所有条目都包含数据。元数据字段是一个字符串,或者没有,除非另有说明。还要注意,不是所有的数据总是包含有意义的数据3354,即使它们没有任何有意义的数据。
获取目标大纲
toc=doc.get_toc()
页面(Page)
页面处理是MuPDF功能的核心。
您可以将页面呈现为光栅或矢量(SVG)图像,并且可以选择缩放、旋转、移动或剪切页面。
您可以提取多种格式的页面文本和图像,并搜索文本字符串。
对于PDF文档,有更多的方法将文本或图像添加到页面。
首先,您必须创建一个页面。这是一种记录方法:
page=doc . load _ page(pno)# loadspagenumber ' pno ' of document(从0开始)
page=doc[pno]#简称
这里可以使用任何integer -infpnopage_count。从负数开始倒数,所以doc[-1]是最后一页,就像Python序列一样。
更高级的方法是使用文档作为页面的迭代器:
对于pageindoc:
#用“页面”做一些事情
#.或向后阅读
forpageinreversed(doc):
#用“页面”做一些事情
#.甚至使用“切片”
forpageindoc.pages(开始、停止、步进):
#用“页面”做一些事情
接下来主要介绍一下Page的常用操作!
a.检查页面的链接、批注或表单字段
使用某些查看器软件显示文档时,链接显示为==“热点”==如果在光标显示手形符号时点击,通常会被带到这个热点区域的编码标记处。以下是获取所有链接的方法:
#getalllinksonapage
links=page.get_links()
链接是一个Python字典列表。
它也可以用作迭代器:
forlinkinpage.links():
#用“链接”做某事
如果您使用PDF文档页面,可能没有注释或表单域(小部件),每个都有自己的迭代器:
forannotinpage.annots():
#用“不能”做某事
forfieldinpage.widgets():
#用“字段”做某事
b. 呈现页面
本示例创建页面内容的光栅图像:
pix=page.get_pixmap()
Pix是一个Pixmap对象,它(在本例中)包含页面的RGB图像,可用于多种用途。
Page.get_pixmap()方法提供了许多控制图像的变体:分辨率、色彩空间(例如,生成灰度图像或具有色彩缩减方案的图像)、透明度、旋转、镜像、移动、裁剪等。
例如,创建一个RGBA图像(即包含alpha通道)并指定pix=page.get_pixmap(alpha=True)。
Pixmap包含下面提到的许多方法和属性。包括整数宽度、高度(每像素)和跨距(水平图像行的字节数)。该示例表示代表图像数据的矩形字节区域(Python字节对象)。
还可以使用page.get_svg_image()创建页面的矢量图像。
c. 将页面图像保存到文件中
我们可以简单地将图像存储在PNG文件中:
pix . save(' page-% I . png ' % page . number)
d. 提取文本和图像
我们还可以以多种不同的形式和细节层次提取页面的所有文本、图像和其他信息:
text=page.get_text(可选)
为opt使用以下字符串之一以获得不同的格式:
Text ':(默认)带换行符的纯文本。无格式、无文本位置细节、无图像“块”:生成文本块(段落)列表“单词”:生成单词列表(不带空格的字符串)“html”:创建页面的完整可视版本,包括任何图像。这可以通过互联网浏览器显示' dict'/'json ':与HTML相同的信息级别,但作为Python字典或resp。JSON字符串。Rawdict'/'rawjson ':一个' dict'/'json '的超级集合。它还提供了字符细节,如XML。' Xhtml ':文本信息级别与文本版本相同,但它包含图像。' Xml ':不包含图像,但包含每个文本字符的完整位置和字体信息。用XML模块来解释。
e. 搜索文本
您可以在页面上找到文本字符串的确切位置:
areas=page.search_for('mupdf ')
这将提供一个矩形列表,每个矩形包含一个字符串“mupdf”(不区分大小写)。您可以使用这些信息来突出显示这些区域(仅限PDF)或创建文档的交叉引用。
PDF操作
PDF是唯一可以使用PyMuPDF修改的文档类型。其他文件类型是只读的。
但是,您可以应用任何文档(包括图像)转换为PDF,然后将所有PyMuPDF函数应用于转换结果Document.convert_to_pdf()。
Document.save()总是将PDF以其当前(可能已修改)状态存储在磁盘上。
通常,您可以选择是保存到一个新文件,还是只是将修改附加到一个现有文件(“增量保存”),这通常要快得多。
下面是PDF文档的操作方法。
a. 修改、创建、重新排列和删除页面
有几种方法可以操作所谓的页面树(描述所有页面的结构):
1.PDF:Document.delete_page()和Document.delete_pages()删除页面
2.Document.copy_page()、Document.fullcopy_page()和Document.move_page()将复制或移动页移到同一文档的其他位置。
3.Document.select()将PDF压缩到所选页面,参数是要保留的页码顺序。所有这些整数必须在0=ipage_ count的范围内。执行时,列表中所有缺失的页面都将被删除。其余页面将按顺序出现相同的次数(!idspnonenote)。)如你所指定。
因此,您可以使用以下工具轻松创建新的PDF:
保存的新文档将包含仍然有效的链接、注释和书签(即指向所选页面或一些外部资源)。
第一页或最后10页仅为奇数页或偶数页(双面打印)。有或没有给定文本的页面颠倒页面顺序。
4.Document.insert_page()和Document.new_page()插入新页面。
此外,页面本身可以通过一系列方法进行修改(如页面旋转、注释和链接维护、文本和图像插入)。
b. 连接和拆分PDF文档
Document.insert_pdf()方法在不同的pdf文档之间复制页面。下面是一个简单的joiner示例(文档1和文档2在PDF中打开):
# appendcompletedoc 2 totheendofdoc 1
doc1.insert_pdf(doc2)
以下是拆分doc1的片段。它将创建一个包含第一页和最后10页的新文档:
doc2=fitz.open()#newemptyPDF
doc2.insert_pdf(doc1,to_page=9)#first10pages
doc2.insert_pdf(doc1,from _ page=len(doc1)-10)# last 10 pages
doc 2 . save(' first-and-last-10 . pdf ')
c. 保存
Document.save()将始终以当前状态保存文档。
您可以通过指定选项incremental=True将更改写回原始PDF。这个过程(通常)非常快,因为对原始文件的更改将是附加,而不是完全重写。
d. 关闭
当程序继续运行时,通常需要“关闭”文档,将底层文件的控制权交给操作系统。
这可以通过Document.close()方法来实现。除了关闭基本文件,与文档相关的缓冲区也将被释放。
关于Python使用PyMuPDF处理PDF文件的这篇文章到此结束。有关Python处理PDF的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。