目次
1. PyMuPDF の概要
1. はじめに
2. 機能
doc = fitz.open(filename)
ログイン後にコピー
" >
doc = fitz.open(filename)
ログイン後にコピー
3. メソッドとプロパティを文書化する
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 人工知能テクノロジーです。

1. 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」を持つファイルにアクセスできます。さらに、「.png」、「.jpg」、「.bmp」、「.tiff」など、約 10 種類の一般的な画像形式もドキュメントと同様に処理できます。

2. 機能

サポートされているすべてのドキュメント タイプ:

  • ファイルの復号化
  • メタ情報、リンク、ブックマークへのアクセス
  • ラスター形式 (PNG およびその他の形式) またはベクター形式 SVG でページをレンダリングします
  • テキストを検索します
  • テキストと画像を抽出します
  • 他の形式に変換します: PDF、( X)HTML、XML、JSON、テキスト
  • PDF ドキュメントには、作成、結合、分割などの追加機能が多数あります。ページは、さまざまな方法 (コメントやフォーム フィールドを含む) で挿入、削除、再配置、または変更できます。
  • 画像とフォントは抽出または挿入可能
  • 埋め込みファイルの完全サポート
  • PDF ファイルを再フォーマットして両面印刷、トーン分離、ロゴやウォーターマークの適用をサポート
  • パスワード保護のフルサポート: 復号化、暗号化、暗号化方法の選択、権限レベルおよびユーザー/所有者のパスワード設定
  • 画像、テキスト、図面の PDF オプションコンテンツコンセプトをサポート
  • #できる低レベル PDF 構造へのアクセスと変更
  • コマンド ライン モジュール「python -m fitz...」次の機能を備えた多機能ユーティリティ
    暗号化/復号化/最適化
  • サブドキュメントの作成
  • ドキュメント接続
  • 画像/フォント抽出
  • 埋め込みファイルの完全サポート
  • 保存されたレイアウトのテキスト抽出 (すべてドキュメント)

新機能: レイアウト保存のテキスト抽出!

スクリプト fitzcliy.py は、サブコマンド「gettext」を介してさまざまな形式でのテキスト抽出を提供します。特に興味深いのは、もちろんレイアウトの保存です。これは、画像の周囲の領域や表内のテキストのコピー、および複数列のテキストを含む、元の物理レイアウトにできるだけ近いテキストを生成します。

3. インストール

PyMuPDF は、ソース コードまたはホイールからインストールできます。

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 install PyMuPDF

インポート ライブラリ:

import fitz
ログイン後にコピー

fitz の命名方法

このライブラリの標準 Python インポート ステートメントは import fitz です。これには歴史的な理由があります。

MuPDF の元のレンダリング ライブラリは Libart と呼ばれていました。

Artifex Software が MuPDF プロジェクトを買収した後、開発の焦点は「Fitz」と呼ばれる新しい最新グラフィックス ライブラリの作成に移りました。 Fitz は、老朽化し​​た Ghostscript グラフィックス ライブラリを置き換える R&D プロジェクトとして始まりましたが、MuPDF のレンダリング エンジンになりました (Wikipedia より引用)。

4. 使用方法

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)
ログイン後にコピー

これによりドキュメントが作成されますオブジェクトドキュメント。ファイル名は、すでに存在する Python 文字列である必要があります。

メモリ データからドキュメントを開いたり、新しい空の PDF を作成したりすることもできます。ドキュメントをコンテキスト マネージャーとして使用することもできます。

3. メソッドとプロパティを文書化する

ページ番号(int) 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架构师技术后台回复“面试题”,获取一份惊喜礼包。

#メソッド/プロパティ

説明

## Document.page_count

metadata( dict)

ディレクトリ (リスト) を取得します

#ページを読む

#件名#件名##

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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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はWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

ターミナルVSCODEでプログラムを実行する方法 ターミナルVSCODEでプログラムを実行する方法 Apr 15, 2025 pm 06:42 PM

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

Windows 8でコードを実行できます Windows 8でコードを実行できます Apr 15, 2025 pm 07:24 PM

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

VSCODE拡張機能は悪意がありますか? VSCODE拡張機能は悪意がありますか? Apr 15, 2025 pm 07:57 PM

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

See all articles

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

#title

title

creationDate

作成日

作成者

アプリケーションの作成