打开文件#

支持的文件类型#

PyMuPDF 除了 PDF 文件外,还可以打开其他文件类型。

支持以下文件类型

PDF XPS EPUB MOBI FB2 CBZ SVG TXT
JPG/JPEG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX/JP2, PSD
JPG/JPEG, PNG, PNM, PGM, PBM, PPM, PAM, PSD, PS

如何打开文件#

要打开一个文件,请执行以下操作

doc = pymupdf.open("a.pdf")

注意

上述代码创建了一个 Document 对象。指令 doc = pymupdf.Document("a.pdf") 的作用完全相同。因此,open 只是一个方便的别名,你可以在那一章找到其完整的 API 文档。

文件识别器:使用错误文件扩展名打开#

如果你的文档文件扩展名与其实际类型不符,请不用担心:借助集成的文件“内容识别器”,它仍然可以被正确打开。

该组件使用多种启发式方法查看文件中的实际数据,这独立于文件扩展名。对于没有扩展名的文件名,这一点当然也同样适用。

以下是关于文件内容识别器工作原理的详细信息列表

  • 从文件名打开时,如果你需要确保创建的 Document 是预期类型,请使用 filetype 参数。任何不匹配都会引发异常。

  • 文本文件是例外:它们根本不包含可识别的内部结构。在这种情况下,文件扩展名“.txt”和 filetype 参数仍然起作用,并用于创建一个“文本”文档。相应地,带有其他/没有扩展名的文本文件可以使用 filetype="txt" 成功打开。

  • 从文件名/路径打开时,使用 filetype="txt" 会将**任何**文件视为包含纯文本,即使其内容是支持的文档类型。

  • 从流打开时,对于已知的文件类型,文件内容识别器将完全忽略 filetype 参数——即使发生不匹配或指定了 filetype="txt"

    • 已知文件类型的流不能作为纯文本打开。

    • 目前,仅当未找到匹配项时,指定 filetype 参数才有效。此时使用 filetype="txt" 会将文件视为包含纯文本。


打开远程文件#

对于服务器上的远程文件(即非本地文件),你需要将文件数据以流的方式传输给 PyMuPDF。

例如,可以使用 requests 库,如下所示

import pymupdf
import requests

r = requests.get('https://mupdf.com/docs/mupdf_explored.pdf')
data = r.content
doc = pymupdf.Document(stream=data)

从云服务打开文件#

有关处理存储在典型云服务中的文件的更多示例,请参阅这些 Cloud Interactions 代码片段


打开 Django 文件#

Django 实现了一个 File Storage API 来存储文件。默认是 FileSystemStorage,但 django-storages 库提供了许多其他存储后端。

你可以打开文件,将内容移动到内存中,然后将内容作为流传递给 PyMuPDF

import pymupdf
from django.core.files.storage import default_storage

from .models import MyModel

obj = MyModel.objects.get(id=1)
with default_storage.open(obj.file.name) as f:
    data = f.read()

doc = pymupdf.Document(stream=data)

请注意,如果你打开的文件很大,可能会耗尽内存。

如果你在不同的环境中使用不同的存储后端,File Storage API 会很好用。如果你只使用 FileSystemStorage,你可以简单地使用 obj.file.name 直接用 PyMuPDF 打开文件,如前面的示例所示。


将文件作为文本打开#

PyMuPDF 能够将任何纯文本文件作为文档打开。为此,你应该为 pymupdf.open 函数提供 filetype 参数,设置为 "txt"

doc = pymupdf.open("my_program.py", filetype="txt")

通过这种方式,你可以打开各种文件类型,并执行典型的非 PDF 特有功能,例如文本搜索、文本提取和页面渲染。显然,一旦你渲染了 txt 内容,将其另存为 PDF 或与其他 PDF 文件合并就没有任何问题了。

示例#

打开 C# 文件#

doc = pymupdf.open("MyClass.cs", filetype="txt")

打开 XML 文件#

doc = pymupdf.open("my_data.xml", filetype="txt")

打开 JSON 文件#

doc = pymupdf.open("more_of_my_data.json", filetype="txt")

依此类推!

正如你所想象的,许多基于文本的文件格式可以非常简单地由 PyMuPDF 打开和解释。这使得对之前无法访问的各种文件进行数据分析和提取成为可能。


本软件按“原样”提供,不附带任何明示或暗示的担保。本软件根据许可协议分发,未经许可条款明确授权,不得复制、修改或分发。有关许可信息,请参阅 artifex.com 或联系 Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States 以获取更多信息。