,,Python利用PyMuPDF实现PDF文件处理

,,Python利用PyMuPDF实现PDF文件处理

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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • php读取pdf数据,php pdf读取
  • php读取pdf数据,php pdf读取,PHP中使用mpdf 导出PDF文件的实现方法
  • kotlon协程,深入理解kotlin协程pdf,一文彻底搞懂Kotlin中的协程
  • 深入解析C#(第4版),深入解析css pdf,深入解析contentWindow, contentDocument
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf,Java 反射机制原理与用法详解
  • ,,Java使用iTextPDF生成PDF文件的实现方法
  • 漫画算法小灰的算法之旅pdf,漫画算法2-小灰的算法进阶
  • devops和自动化运维实践 PDF,devops思想在运维方面的具体实践
  • pdf如何去除水印,pdf去水印的三种方法
  • 把a4的内容打印成a3小册子,a4的pdf文档如何打印成a3
  • nlp自然语言处理入门pdf,精通python自然语言处理 pdf
  • 容器docker基本操作,每天5分钟玩转docker容器技术 pdf
  • sklearn中文手册pdf下载,sklearn库模块及函数
  • ros机器人教程,ros机器人编程原理与应用下载 pdf 纽曼
  • 留言与评论(共有 条评论)
       
    验证码: