打开文件#
支持的文件类型#
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 打开和解释。这使得对之前无法访问的各种文件进行数据分析和提取成为可能。