目錄
#一、PyMuPDF簡介
1.介紹
二. 功能
三、安裝
四、使用方法
1. 導入庫,查看版本
2. 開啟文件
3. Document的方法與屬性
4. 获取元数据
5. 获取目标大纲
6. 页面(Page)
7. PDF操作
首頁 後端開發 Python教學 Python 處理 PDF:PyMuPDF 的安裝與使用!

Python 處理 PDF:PyMuPDF 的安裝與使用!

Apr 14, 2023 pm 05:46 PM
python pdf pymupdf

Python 處理 PDF:PyMuPDF 的安裝與使用!

大家好,我是Python人工智慧技術

#一、PyMuPDF簡介

1.介紹

在介紹PyMuPDF之前,先來了解MuPDF,從命名形式中就可以看出,PyMuPDF是MuPDF的Python介面形式。

MuPDF

MuPDF 是一個輕量級的 PDF、XPS和電子書檢視器。 MuPDF 由軟體庫、命令列工具和各種平台的檢視器組成。

MuPDF 中的渲染器專為高品質抗鋸齒圖形量身定制。它以精確到像素的幾分之一內的度量和間距呈現文本,以在螢幕上再現列印頁面的外觀時獲得最高保真度。

這個觀察器很小,速度很快,但是很完整。它支援多種文件格式,如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2。您可以使用行動檢視器對PDF文件進行註解和填寫表單(這個功能很快也將應用於桌面檢視器)。

命令列工具可讓您註解、編輯文檔,並將文檔轉換為其他格式,如HTML、SVG、PDF和CBZ。您也可以使用Javascript編寫腳本來操作文件。

PyMuPDF

PyMuPDF(目前版本1.18.17)是支援MuPDF(目前版本1.18.*)的Python綁定。

使用PyMuPDF,你可以存取副檔名為「.pdf」、「.xps」、「.oxps」、「.cbz」、「.fb2」或「.epub」。此外,大約10種流行的圖像格式也可以像文件一樣處理:“.png”,“.jpg”,“.bmp”,“.tiff”等。

二. 功能

對於所有支援的文件類型可以:

  • #解密檔案
  • 存取元資訊、連結與書籤
  • 以柵格格式(PNG和其他格式)或向量格式SVG呈現頁面
  • 搜尋文字
  • 擷取文字和圖像
  • 轉換為其他格式:PDF, (X)HTML, XML, JSON, text
  • 對於PDF文檔,存在大量的附加功能:它們可以創建、合併或拆分。頁面可以透過多種方式插入、刪除、重新排列或修改(包括註解和表單欄位)。
  • 可以提取或插入圖像和字體
  • 完全支援嵌入式檔案
  • pdf檔案可以重新格式化,以支援雙面列印,色調分離,應用標誌或浮水印
  • 完全支援密碼保護:解密、加密、加密方法選擇、權限等級和使用者/所有者密碼設定
  • #支援圖像、文字和繪圖的PDF 可選內容概念
  • 可以存取和修改低階PDF 結構
  • 命令列模組"python -m fitz…"具有以下功能的多功能實用程式
  • 加密/解密/最佳化
  • 建立子文件
  • 文件連線
  • 圖片/字型擷取
  • #完全支援嵌入式檔案
  • 儲存版面的文字擷取(所有文件)

新:佈局儲存文字擷取!

#腳本fitzcliy .py透過子命令「gettext」提供不同格式的文字擷取。特別有趣的當然是佈局保存,它生成的文字盡可能接近原始物理佈局,周圍有圖像的區域,或在表格和多列文字中複製文字。

三、安裝

PyMuPDF可以從原始碼安裝,也可以從wheels安裝。

對於Windows, Linux和Mac OSX平台,在PyPI的下載部分有wheels。這包括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 install PyMuPDF

導入庫:

import fitz
登入後複製

關於命名fitz的說明

這個庫的標準Python導入語句是import fitz。這是有歷史原因的:

MuPDF的原始渲染庫被稱為Libart。

在Artifex軟體取得MuPDF專案後,開發的重點轉移到編寫一種新的現代圖形圖書館稱為「Fitz」。 Fitz最初是作為一個研發項目,以取代老化的Ghostscript圖形庫,但卻成為了MuPDF的渲染引擎(引用自維基百科)。

四、使用方法

1. 導入庫,查看版本

import fitz
print(fitz.__doc__)
PyMuPDF 1.18.16: Python bindings for the MuPDF 1.18.0 library.
Version date: 2021-08-05 00:00:01.
Built for Python 3.8 on linux (64-bit).
登入後複製

2. 開啟文件

doc = fitz.open(filename)
登入後複製

這將建立Document物件doc。檔案名稱必須是已經存在的檔案的python字串。

也可以從記憶體資料開啟文檔,或建立新的空PDF。您也可以將文件用作上下文管理器。

3. Document的方法與屬性

##描述#頁數(int)#元資料( dict)#取得目錄( list)#讀取頁面

方法/屬性

#Document.page_count

#Document.metadata

#Document.get_toc()

#Document.load_page()

#######

示例:

>>> doc.count_page
1
>>> doc.metadata
{'format': 'PDF 1.7',
'title': '',
'author': '',
'subject': '',
'keywords': '',
'creator': '',
'producer': '福昕阅读器PDF打印机 版本 10.0.130.3456',
'creationDate': "D:20210810173328+08'00'",
'modDate': "D:20210810173328+08'00'",
'trapped': '',
'encryption': None}
登入後複製

4. 获取元数据

PyMuPDF完全支持标准元数据。Document.metadata是一个具有以下键的Python字典。

它适用于所有文档类型,但并非所有条目都始终包含数据。元数据字段为字符串,如果未另行指示,则为无。还要注意的是,并非所有数据都始终包含有意义的数据——即使它们不是一个都没有。另外,搜索公众号Java架构师技术后台回复“面试题”,获取一份惊喜礼包。

#標題建立日期建立日期#創建者建立應用程式主題

Key

Value

producer

producer (producing software)

format

format: ‘PDF-1.4’, ‘EPUB’, etc.

encryption

encryption method used if any

author

author

modDate

date of last modification

keywords

keywords

標題

標題

#########主題#############

5. 获取目标大纲

toc = doc.get_toc()
登入後複製

6. 页面(Page)

页面处理是MuPDF功能的核心。

  • 您可以将页面呈现为光栅或矢量(SVG)图像,可以选择缩放、旋转、移动或剪切页面。
  • 您可以提取多种格式的页面文本和图像,并搜索文本字符串。
  • 对于PDF文档,可以使用更多的方法向页面添加文本或图像。

首先,必须创建一个页面Page。这是Document的一种方法:

page = doc.load_page(pno) # loads page number 'pno' of the document (0-based)
page = doc[pno] # the short form
登入後複製

这里可以使用任何整数-inf

更高级的方法是将文档用作页面的迭代器:

for page in doc:
 # do something with 'page'
# ... or read backwards
for page in reversed(doc):
 # do something with 'page'
# ... or even use 'slicing'
for page in doc.pages(start, stop, step):
 # do something with 'page'
登入後複製
  • 接下来,主要介绍Page的常用操作!

a. 检查页面的链接、批注或表单字段

使用某些查看器软件显示文档时,链接显示为==“热点区域”==。如果您在光标显示手形符号时单击,您通常会被带到该热点区域中编码的标记。以下是如何获取所有链接:

# get all links on a page
links = page.get_links()
登入後複製

links是一个Python字典列表。

还可以作为迭代器使用:

for link in page.links():
 # do something with 'link'
登入後複製

如果处理PDF文档页面,还可能存在注释(Annot)或表单字段(Widget),每个字段都有自己的迭代器:

for annot in page.annots():
 # do something with 'annot'
for field in page.widgets():
 # do something with 'field'
登入後複製

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)
登入後複製

对opt使用以下字符串之一以获取不同的格式:

  • "text":(默认)带换行符的纯文本。无格式、无文字位置详细信息、无图像
  • "blocks":生成文本块(段落)的列表
  • "words":生成单词列表(不包含空格的字符串)
  • "html":创建页面的完整视觉版本,包括任何图像。这可以通过internet浏览器显示
  • "dict"/"json":与HTML相同的信息级别,但作为Python字典或resp.JSON字符串。
  • "rawdict"/"rawjson":"dict"/"json"的超级集合。它还提供诸如XML之类的字符详细信息。
  • "xhtml":文本信息级别与文本版本相同,但包含图像。
  • "xml":不包含图像,但包含每个文本字符的完整位置和字体信息。使用XML模块进行解释。

e. 搜索文本

您可以找到某个文本字符串在页面上的确切位置:

areas = page.search_for("mupdf")
登入後複製

这将提供一个矩形列表,每个矩形都包含一个字符串“mupdf”(不区分大小写)。您可以使用此信息来突出显示这些区域(仅限PDF)或创建文档的交叉引用。

7. PDF操作

PDF是唯一可以使用PyMuPDF修改的文档类型。其他文件类型是只读的。

但是,您可以将任何文档(包括图像)转换为PDF,然后将所有PyMuPDF功能应用于转换结果,Document.convert_to_pdf()。

Document.save()始终将PDF以其当前(可能已修改)状态存储在磁盘上。

通常,您可以选择是保存到新文件,还是仅将修改附加到现有文件(“增量保存”),这通常要快得多。

下面介绍如何操作PDF文档。

a. 修改、创建、重新排列和删除页面

有几种方法可以操作所谓页面树(描述所有页面的结构):

  • PDF:Document.delete_page()和Document.delete_pages()删除页面
  • Document.copy_page()、Document.fullcopy_page()和Document.move_page()将页面复制或移动到同一文档中的其他位置。
  • Document.select()将PDF压缩到选定页面,参数是要保留的页码序列。这些整数都必须在0<=i
  • 因此,您可以轻松地使用创建新的PDF:
  • 第一页或最后10页
  • 仅奇数页或偶数页(用于双面打印)
  • 包含或不包含给定文本的页
  • 颠倒页面顺序
  • 保存的新文档将包含仍然有效的链接、注释和书签(i.a.w.指向所选页面或某些外部资源)。
  • Document.insert_page()和Document.new_page()插入新页面。
  • 此外,页面本身可以通过一系列方法进行修改(例如页面旋转、注释和链接维护、文本和图像插入)。

b. 连接和拆分PDF文档

方法Document.insert_pdf()在不同的pdf文档之间复制页面。下面是一个简单的joiner示例(doc1和doc2在PDF中打开):

# append complete doc2 to the end of doc1
doc1.insert_pdf(doc2)
登入後複製

下面是一个拆分doc1的片段。它将创建第一页和最后10页的新文档:

doc2 = fitz.open() # new empty PDF
doc2.insert_pdf(doc1, to_page = 9) # first 10 pages
doc2.insert_pdf(doc1, from_page = len(doc1) - 10) # last 10 pages
doc2.save("first-and-last-10.pdf")
登入後複製

c. 保存

Document.save()将始终以当前状态保存文档。

您可以通过指定选项incremental=True将更改写回原始PDF。这个过程(通常)非常快,因为更改会附加到原始文件,而不会完全重写它。

d. 关闭

在程序继续运行时,通常需要“关闭”文档以将底层文件的控制权交给操作系统。

这可以通过Document.close()方法实现。除了关闭基础文件外,还将释放与文档关联的缓冲区。

以上是Python 處理 PDF:PyMuPDF 的安裝與使用!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

vs code 可以在 Windows 8 中運行嗎 vs code 可以在 Windows 8 中運行嗎 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

visual studio code 可以用於 python 嗎 visual studio code 可以用於 python 嗎 Apr 15, 2025 pm 08:18 PM

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles