PyMuPDF 1.24.4 中文文档(二)(2)

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
运维安全中心(堡垒机),免费版 6个月
简介: PyMuPDF 1.24.4 中文文档(二)

PyMuPDF 1.24.4 中文文档(二)(1)https://developer.aliyun.com/article/1559642


PyQt4, PyQt5, PySide

请参阅Pillow 文档的第 3.16 节:

from PIL import Image, ImageQt
# set the mode depending on alpha
mode = "RGBA" if pix.alpha else "RGB"
img = Image.frombytes(mode, [pix.width, pix.height], pix.samples)
qtimg = ImageQt.ImageQt(img) 

同样,你也可以不使用 Pillow。Qt 的QImage幸运地支持本地 Python 指针,因此以下是创建 Qt 图像的推荐方式:

from PyQt5.QtGui import QImage
# set the correct QImage format depending on alpha
fmt = QImage.Format_RGBA8888 if pix.alpha else QImage.Format_RGB888
qtimg = QImage(pix.samples_ptr, pix.width, pix.height, fmt) 

提取文本和图像

我们还可以以多种不同形式和详细级别提取一页中的所有文本、图像和其他信息:

text = page.get_text(opt) 

使用以下字符串之一作为opt以获取不同的格式[2]

  • “text”: (默认)带有换行符的纯文本。无格式,无文本位置详细信息,无图像。
  • “blocks”: 生成文本块(=段落)列表。
  • “words”: 生成一个单词列表(不包含空格的字符串)。
  • “html”: 创建包含任何图像的完整视觉页面版本。这可以在您的互联网浏览器中显示。
  • “dict” / “json”: 与 HTML 相同的信息级别,但作为 Python 字典或相应的 JSON 字符串提供。详细了解其结构,请参阅TextPage.extractDICT()
  • “rawdict” / “rawjson”:是 “dict” / “json” 的超集。它还提供了像 XML 一样的字符详细信息。有关其结构的详细信息,请参阅 TextPage.extractRAWDICT()
  • “xhtml”:文本信息级别与 TEXT 版本相同,但包括图像。也可以被互联网浏览器显示。
  • “xml”:不包含图像,但包含每个单个文本字符的完整位置和字体信息。使用 XML 模块进行解释。

为了让你了解这些替代方案的输出,我们进行了文本示例提取。请参阅附录 2:嵌入文件的考虑事项。

搜索文本

你可以准确地找出某个文本字符串在页面上的位置:

areas = page.search_for("mupdf") 

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

请还参阅章节 共同工作:DisplayList 和 TextPage,以及演示程序 demo.pydemo-lowlevel.py。除其他外,它们还包含了有关如何使用 TextPage、Device 和 DisplayList 类进行更直接控制的详细信息,例如在性能考虑建议时。

故事:从 HTML 源生成 PDF

Story 类是 PyMuPDF 版本 1.21.0 的新功能。它代表了对 MuPDF “story” 接口的支持。

以下是书籍 “MuPDF 探索” 中罗宾·沃茨(Robin Watts)的引言,来自 Artifex


故事为与文档编写器(…)等设备一起使用的样式内容提供了一种轻松布局的方式。故事的概念源自桌面出版,而桌面出版则(…)是从报纸那里得到的。如果你考虑一个传统的报纸版面布局,它将由各种新闻文章(故事)组成,这些文章将布局到多列中,可能跨越多页。

因此,MuPDF 使用故事来表示带有样式信息的文本流。故事的使用者可以提供一系列矩形,其中故事将被布局,然后定位的文本可以绘制到输出设备上。这使得文本本身(故事)的概念与应流入文本的区域(布局)相分离。


注意

故事与互联网浏览器有些类似:它忠实地解析和渲染 HTML 超文本,还包括可选样式表(CSS)。但它的 输出是 PDF —— 而不是网页。

创建 Story 时,会考虑来自最多三个不同信息源的输入。所有这些项目都是可选的。

  1. HTML 源代码,可以是 Python 字符串,也可以是由脚本使用 Xml 的方法创建的。
  2. CSS(层叠样式表)源代码,作为 Python 字符串提供。CSS 可用于提供样式信息(文本字体大小、颜色等),就像为网页发生的那样。显然,这个字符串也可以从文件中读取。
  3. 当 DOM 引用图像或使用文本字体(除标准的 PDF Base 14 Fonts,CJK 字体和生成到 PyMuPDF 二进制中的 NOTO 字体之外),必须使用 Archive。

API 允许完全从头创建 DOM,包括所需的样式信息。它还可用于修改或扩展提供的 HTML:文本可以删除或替换,或者其样式可以更改。例如从数据库提取的文本也可以添加并填充类似模板的 HTML 文档。

并不需要提供语法完整的 HTML 文档:像Hello这样的片段完全被接受,并且许多/大多数语法错误会自动更正。

HTML 完成后,可以用来创建 PDF 文档。这通过新的 DocumentWriter 类完成。程序员调用其方法创建一个新的空白页,并将矩形传递给 Story 来填充它们。

故事将返回完成代码,指示是否有更多内容等待编写。内容的哪部分会落入哪个矩形或哪一页,由故事自动确定 - 除了提供矩形外,不能受其他影响。

请参阅 Stories recipes,了解许多典型用例。

PDF 维护

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

但是,您可以将任何文档(包括图像)转换为 PDF,然后对转换结果应用所有 PyMuPDF 功能。在这里了解更多信息Document.convert_to_pdf(),同时查看演示脚本pdf-converter.py,该脚本可以将任何支持的文档转换为 PDF。

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

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

以下描述了如何操作 PDF 文档的方式。这个描述并不完整:更多内容可以在接下来的章节中找到。

修改,创建,重新排列和删除页面

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

Document.delete_page()Document.delete_pages() 删除页面。

Document.copy_page(), Document.fullcopy_page()Document.move_page() 将页面复制或移动到同一文档中的其他位置。

Document.select() 缩小 PDF 文件到选定页面。参数是一个包含你想要保留的页面编号的序列 [3]。这些整数必须在 0 <= i < page_count 范围内。执行时,不在此列表中的所有页面将被删除。剩余页面将按照你指定的顺序和次数出现。

因此,您可以轻松创建新的 PDF 文件,带有

  • 第一或最后 10 页,
  • 只有奇数或只有偶数页(用于双面打印),
  • 包含或不包含给定文本的页面,
  • 反转页面顺序,…

… 你能想到的任何内容。

保存的新文档将包含仍然有效的链接,注释和书签(即指向选定页面或某些外部资源)。

Document.insert_page()Document.new_page() 插入新页面。

页面本身还可以通过一系列方法进行修改(例如页面旋转,注释和链接维护,文本和图像插入)。

合并和拆分 PDF 文档

方法 Document.insert_pdf() 在不同的 PDF 文档之间复制页面。这里是一个简单的连接器示例(doc1doc2 是打开的 PDF):

# append complete doc2 to the end of doc1
doc1.insert_pdf(doc2) 

这里是一个拆分 doc1 的代码片段。它创建了一个包含其第一页和最后 10 页的新文档:

doc2 = pymupdf.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") 

更多内容请参阅 Document 章节。还可以查看 PDFjoiner.py

嵌入数据

PDF 可以像 ZIP 存档一样用作任意数据(可执行文件,其他 PDF 文件,文本或二进制文件等)的容器。

PyMuPDF 通过 Document 的*embfile_*方法和属性完全支持此功能。有关详细信息,请阅读附录 3,查阅关于处理嵌入文件的 Wiki 页面(github.com/pymupdf/PyMuPDF/wiki/Dealing-with-Embedded-Files),或查看示例脚本embedded-copy.pyembedded-export.pyembedded-import.pyembedded-list.py

保存

如上所述,Document.save()将始终保存文档的当前状态。

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

Document.save()选项对应于 MuPDF 命令行实用程序mutool clean的选项,请参阅以下表格。

保存选项 mutool 效果
garbage=1 g 垃圾收集未使用的对象。
garbage=2 gg 除了 1 之外,还要紧凑xref表。
garbage=3 ggg 除了 2 之外,还要合并重复的对象。
garbage=4 gggg 除了 3 之外,还要合并重复的流内容。
clean=True cs 清理和消毒内容流。
deflate=True z 压缩未压缩的流。
deflate_images=True i 压缩图像流。
deflate_fonts=True f 压缩字体文件流。
ascii=True a 将二进制数据转换为 ASCII 格式。
linear=True l 创建线性化版本。
expand=True d 解压所有流。

注意

要了解诸如对象、流、xref之类的术语,请参阅 Glossary 章节。

例如,mutool clean -ggggz file.pdf 可以获得出色的压缩结果。它对应于 doc.save(filename, garbage=4, deflate=True)

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

有几种操作 PDF 的方式来操作所谓的页面树(描述所有页面的结构):

Document.delete_page()Document.delete_pages() 删除页面。

Document.copy_page()Document.fullcopy_page()Document.move_page() 可以复制或移动页面到同一文档内的其他位置。

Document.select() 缩小 PDF 至所选页面。参数是要保留的页面编号的序列 [3]。这些整数必须在 0 <= i < page_count 范围内。执行时,所有在此列表中缺失的页面将被删除。剩余的页面将按照您指定的顺序出现,次数可能是多次。

因此,您可以轻松地创建新的 PDF 文件。

  • 第一或最后 10 页,
  • 仅奇数页或仅偶数页(用于双面打印),
  • 包含或不包含给定文本的页面。
  • 反转页面顺序,…

… 无论您能想到什么。

已保存的新文档将包含仍然有效的链接、注释和书签(例如,指向选定页面或某些外部资源)。

Document.insert_page()Document.new_page() 插入新页面。

页面本身还可以通过一系列方法进行修改(例如页面旋转、注释和链接维护、文本和图像插入)。

合并和拆分 PDF 文档

方法 Document.insert_pdf() 可在不同的 PDF 文档之间复制页面。这里是一个简单的 合并器 示例(doc1doc2 是已打开的 PDF):

# append complete doc2 to the end of doc1
doc1.insert_pdf(doc2) 

这里是一个将 doc1 拆分 的片段。它创建了一个新文档,包含其前 10 页和最后 10 页:

doc2 = pymupdf.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") 

更多信息请参阅 Document 章节。还请查看 PDFjoiner.py

嵌入数据

PDF 可用作任意数据(可执行文件、其他 PDF、文本或二进制文件等)的容器,类似于 ZIP 存档。

PyMuPDF 通过 Document 的 embfile_* 方法和属性完全支持此功能。有关详细信息,请参阅附录 3,查阅处理嵌入文件的 Wiki,或查看示例脚本 embedded-copy.pyembedded-export.pyembedded-import.pyembedded-list.py

保存

如上所述,Document.save() 将始终以当前状态保存文档。

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

Document.save() 选项对应于 MuPDF 命令行实用程序mutool clean的选项,请参阅以下表格。

Save Option mutool Effect
garbage=1 g 垃圾收集未使用的对象
garbage=2 gg 除了 1 之外,紧缩 xref
garbage=3 ggg 除了 2 之外,合并重复的对象
garbage=4 gggg 除了 3 之外,合并重复的流内容
clean=True cs 清理并清除内容流
deflate=True z 压缩未压缩的流
deflate_images=True i 压缩图像流
deflate_fonts=True f 压缩字体文件流
ascii=True a 将二进制数据转换为 ASCII 格式
linear=True l 创建线性化版本
expand=True d 解压所有流

要了解诸如 object, stream, xref 等术语的解释,请参阅 Glossary 章节。

例如,mutool clean -ggggz file.pdf 可以获得优秀的压缩结果。它对应于 doc.save(filename, garbage=4, deflate=True)

结束

在程序继续运行时,通常希望“关闭”文档以释放对底层文件的控制。

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

进一步阅读

还要查看 PyMuPDF 的Wiki页面。特别是侧边栏下标题为**“Recipes”**的页面,涵盖了 15 个主题的“How-To”风格文章。

本文档还包含一个 FAQ。此章节与前述的食谱有密切联系,并将随着时间的推移扩展更多内容。


脚注

对这个页面有任何反馈吗?


本软件按原样提供,没有任何明示或暗示的保证。此软件根据许可协议分发,并且未经授权的情况下不得复制、修改或分发。有关更多信息,请参阅artifex.com,或联系位于美国加利福尼亚州旧金山 94129 号 Mesa Street 39 号 108A 套房的 Artifex Software Inc。

本文档覆盖了所有版本直至 1.24.4。


PyMuPDF,LLM 和 RAG

原文:pymupdf.readthedocs.io/en/latest/rag.html

将 PyMuPDF 集成到您的大语言模型(LLM)框架和整体 RAG(检索增强生成)解决方案中,提供了交付文档数据的最快和最可靠的方法。

有几个众所周知的 LLM 解决方案具有它们自己的界面与 PyMuPDF 集成 - 这是一个快速增长的领域,如果您发现更多,请告诉我们!

如果您需要导出为 Markdown 或从文件获取 LlamaIndex 文档:

与 LangChain 集成

使用专用的加载器,可以简单地与 LangChain 直接集成,如下所示:

from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("example.pdf")
data = loader.load() 

详细信息请参阅使用 PyMuPDF 的 LangChain

与 LlamaIndex 集成

使用专用的PyMuPDFReader从 LlamaIndex 🦙管理文档加载。

from llama_index.readers.file import PyMuPDFReader
loader = PyMuPDFReader()
documents = loader.load(file_path="example.pdf") 

更多信息,请参阅从头开始构建 RAG

为分块准备数据

将数据进行分块(或分割)对于赋予 LLM 数据上下文至关重要,而现在 PyMuPDF 支持 Markdown 输出,这意味着支持Level 3 chunking

输出为 Markdown

为了以 Markdown 格式导出文档,您将需要一个单独的助手。pymupdf4llm包是 PyMuPDF 函数的高级封装,对于每个页面,输出所有文档页面上的标准文本和表格文本的集成 Markdown 格式字符串:

# convert the document to markdown
import pymupdf4llm
md_text = pymupdf4llm.to_markdown("input.pdf")
# Write the text to some file in UTF8-encoding
import pathlib
pathlib.Path("output.md").write_bytes(md_text.encode()) 

欲了解更多信息,请参阅:pymupdf4llm 文档

如何使用 Markdown 输出

一旦您的数据以 Markdown 格式准备好,您就可以将其分块/分割并提供给您的 LLM,例如,如果这是 LangChain,则执行以下操作:

import pymupdf4llm
from langchain.text_splitter import MarkdownTextSplitter
# Get the MD text
md_text = pymupdf4llm.to_markdown("input.pdf")  # get markdown for all pages
splitter = MarkdownTextSplitter(chunk_size=40, chunk_overlap=0)
splitter.create_documents([md_text]) 

欲了解更多,请参阅5 个级别的文本拆分

相关博客

要了解更多关于 PyMuPDF、LLM 和 RAG 的信息,请查看我们的博客以获取实施和教程。

提取文本的方法

创建一个聊天机器人来讨论您的文档

对本页面有任何反馈意见吗?


本软件按原样提供,不附任何明示或暗示的保证。本软件根据许可分发,除非根据该许可的条款得到明确授权,否则不得复制、修改或分发。请参考artifex.com的许可信息或联系美国加利福尼亚州旧金山市 Mesa 街 39 号 108A 套房的 Artifex Software Inc.获取更多信息。

本文档涵盖了所有版本,直至 1.24.4。


与 LangChain 集成

通过使用专用加载器,直接与 LangChain 集成非常简单,如下所示:

from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("example.pdf")
data = loader.load() 

查看LangChain 使用 PyMuPDF获取详细信息。

与 LlamaIndex 集成

使用 LlamaIndex 🦙 的专用PyMuPDFReader来管理你的文档加载。

from llama_index.readers.file import PyMuPDFReader
loader = PyMuPDFReader()
documents = loader.load(file_path="example.pdf") 

查看从头开始构建 RAG获取更多信息。

为分块准备数据

对数据进行分块(或分割)是为你的 LLM 数据提供上下文的关键,而现在 PyMuPDF 支持 Markdown 输出意味着支持第 3 级分块

以 Markdown 输出

为了以 Markdown 格式导出你的文档,你需要一个单独的辅助工具。包PyMuPDF4LLM是 PyMuPDF 功能的高级封装,它为每一页输出整合的 Markdown 格式字符串,包括所有文档页面上的标准文本和表格文本:

# convert the document to markdown
import pymupdf4llm
md_text = pymupdf4llm.to_markdown("input.pdf")
# Write the text to some file in UTF8-encoding
import pathlib
pathlib.Path("output.md").write_bytes(md_text.encode()) 

如需进一步信息,请参阅:pymupdf4llm 文档

如何使用 Markdown 输出

一旦你的数据以 Markdown 格式准备好,你就可以对其进行分块/分割并供给你的 LLM,例如,如果使用 LangChain,则执行以下操作:

import pymupdf4llm
from langchain.text_splitter import MarkdownTextSplitter
# Get the MD text
md_text = pymupdf4llm.to_markdown("input.pdf")  # get markdown for all pages
splitter = MarkdownTextSplitter(chunk_size=40, chunk_overlap=0)
splitter.create_documents([md_text]) 

查看更多请参阅文本分割的 5 个级别

以 Markdown 输出

为了以 Markdown 格式导出你的文档,你需要一个单独的辅助工具。包PyMuPDF4LLM是 PyMuPDF 功能的高级封装,它为每一页输出整合的 Markdown 格式字符串,包括所有文档页面上的标准文本和表格文本:

# convert the document to markdown
import pymupdf4llm
md_text = pymupdf4llm.to_markdown("input.pdf")
# Write the text to some file in UTF8-encoding
import pathlib
pathlib.Path("output.md").write_bytes(md_text.encode()) 

如需进一步信息,请参阅:pymupdf4llm 文档

如何使用 Markdown 输出

一旦你的数据以 Markdown 格式准备好,你就可以对其进行分块/分割并供给你的 LLM,例如,如果使用 LangChain,则执行以下操作:

import pymupdf4llm
from langchain.text_splitter import MarkdownTextSplitter
# Get the MD text
md_text = pymupdf4llm.to_markdown("input.pdf")  # get markdown for all pages
splitter = MarkdownTextSplitter(chunk_size=40, chunk_overlap=0)
splitter.create_documents([md_text]) 

查看更多请参见文本分割的 5 个层次

相关博客

要了解更多关于 PyMuPDF、LLM 和 RAG 的信息,请查看我们的博客以获取实施和教程。

提取文本的方法

创建一个聊天机器人来讨论您的文档

您对本页面有任何反馈吗?


此软件按原样提供,不提供任何明示或暗示的担保。此软件在许可下分发,除非明确授权,否则不得复制、修改或分发。请参阅许可信息,详见artifex.com,或联系美国加利福尼亚州旧金山 Mesa 街 39 号 108A 套房的 Artifex Software Inc.获取更多信息。

本文档涵盖了所有版本,直至 1.24.4。


提取文本的方法

创建一个聊天机器人来讨论您的文档

您对本页面有任何反馈吗?


此软件按原样提供,不提供任何明示或暗示的担保。此软件在许可下分发,除非明确授权,否则不得复制、修改或分发。请参阅许可信息,详见artifex.com,或联系美国加利福尼亚州旧金山 Mesa 街 39 号 108A 套房的 Artifex Software Inc.获取更多信息。

本文档涵盖了所有版本,直至 1.24.4。


资源

原文:pymupdf.readthedocs.io/en/latest/resources.html

了解PyMuPDF 实用工具

GitHub 仓库PyMuPDF-Utilities包含了各种示例、演示和用例。


需要将PDF转换为DOCX吗?

我们推荐使用pdf2docx库,它使用PyMuPDF和python-docx库提供简单的PDF到DOCX文档转换功能。

对本页面有任何反馈吗?


本软件按原样提供,不附带任何明示或暗示的保证。本软件按许可分发,未经许可不得复制、修改或分发。请参阅artifex.com上的许可信息或联系美国加利福尼亚州旧金山 Mesa 街 39 号 108A 套房的 Artifex Software Inc.获取更多信息。

此文档覆盖了所有版本,直至 1.24.4。


了解PyMuPDF 实用工具

GitHub 仓库PyMuPDF-Utilities包含了各种示例、演示和用例。


需要将PDF转换为DOCX吗?

我们推荐使用pdf2docx库,它使用PyMuPDF和python-docx库提供简单的PDF到DOCX文档转换功能。

对本页面有任何反馈吗?


本软件按原样提供,不附带任何明示或暗示的保证。本软件按许可分发,未经许可不得复制、修改或分发。请参阅artifex.com上的许可信息或联系美国加利福尼亚州旧金山 Mesa 街 39 号 108A 套房的 Artifex Software Inc.获取更多信息。

此文档覆盖了所有版本,直至 1.24.4。


如何指南

打开文件

原文:pymupdf.readthedocs.io/en/latest/how-to-open-a-file.html

支持的文件类型

PyMuPDF 可以打开不仅仅是 PDF 文件。

支持以下文件类型:

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

如何打开一个文件

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

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

以错误的文件扩展名打开

如果您有一个文件扩展名与其类型不符的文档,您仍然可以正确地打开它。

假设*“some.file”*实际上是XPS文件。可以这样打开它:

doc = pymupdf.open("some.file", filetype="xps") 

注意

PyMuPDF 本身不会尝试从文件内容确定文件类型。您负责以某种方式提供文件类型信息 - 要么隐式地通过文件扩展名,要么显式地像filetype参数所示。有像filetype这样的纯 Python 包可以帮助您执行此操作。还请查阅文档章节以获取完整的描述。

如果 PyMuPDF 遇到具有未知/丢失扩展名的文件,则会尝试将其作为 PDF 打开。因此,在这些情况下,无需额外的预防措施。同样,对于内存文档,您只需指定doc=pymupdf.open(stream=mem_area)以将其作为 PDF 文档打开。

如果尝试打开一个不支持的文件,则 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上的许可信息,或联系美国旧金山 Mesa 街 39 号 108A 套房的 Artifex Software Inc. 获取进一步信息。

此文档涵盖了所有版本直到 1.24.4。

## 支持的文件类型

PyMuPDF 可以打开除 PDF 外的其他文件。

支持以下文件类型:

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

如何打开文件

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

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

以错误的文件扩展名打开

如果您有一个文件其文件扩展名与其类型不符,您仍然可以正确打开它。

假设 “some.file” 实际上是 XPS 文件。可以像这样打开:

doc = pymupdf.open("some.file", filetype="xps") 

注意

PyMuPDF 本身不会根据文件内容尝试确定文件类型。您需要以某种方式提供文件类型信息,可以是隐式的,通过文件扩展名,或显式地如 filetype 参数所示。有像 filetype 这样的纯 Python 包可帮助您完成这一操作。同时,请参阅 Document 章节获取完整描述。

如果 PyMuPDF 遇到没有或未知扩展名的文件,将尝试以 PDF 格式打开。因此在这些情况下无需额外的预防措施。同样地,对于内存文档,您可以简单地指定 doc=pymupdf.open(stream=mem_area) 以将其作为 PDF 文档打开。

如果尝试打开一个不支持的文件,则 PyMuPDF 将抛出文件数据错误。

以错误的文件扩展名打开

如果您有一个文件其文件扩展名与其类型不符,您仍然可以正确打开它。

假设 “some.file” 实际上是 XPS 文件。可以像这样打开:

doc = pymupdf.open("some.file", filetype="xps") 

注意

PyMuPDF 本身不会根据文件内容尝试确定文件类型。您需要以某种方式提供文件类型信息,可以是隐式的,通过文件扩展名,或显式地如 filetype 参数所示。有像 filetype 这样的纯 Python 包可帮助您完成这一操作。同时,请参阅 Document 章节获取完整描述。

如果 PyMuPDF 遇到没有或未知扩展名的文件,将尝试以 PDF 格式打开。因此在这些情况下无需额外的预防措施。同样地,对于内存文档,您可以简单地指定 doc=pymupdf.open(stream=mem_area) 以将其作为 PDF 文档打开。

如果尝试打开一个不支持的文件,则 PyMuPDF 将抛出文件数据错误。

以文本形式打开文件

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

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,美国。

本文档涵盖了所有版本,直到 1.24.4。


例子

打开一个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,美国。

本文档涵盖了所有版本,直到 1.24.4。


打开一个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,美国。

本文档涵盖了所有版本,直到 1.24.4。


PyMuPDF 1.24.4 中文文档(二)(3)https://developer.aliyun.com/article/1559644

相关文章
|
5月前
|
存储 文字识别 自然语言处理
PyMuPDF 1.24.4 中文文档(五)(2)
PyMuPDF 1.24.4 中文文档(五)
119 3
|
5月前
PyMuPDF 1.24.4 中文文档(五)(1)
PyMuPDF 1.24.4 中文文档(五)
65 3
|
5月前
|
XML 存储 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(五)(4)
PyMuPDF 1.24.4 中文文档(五)
73 0
|
5月前
|
存储 XML 编解码
PyMuPDF 1.24.4 中文文档(三)(1)
PyMuPDF 1.24.4 中文文档(三)
173 0
|
5月前
|
JSON API 数据格式
PyMuPDF 1.24.4 中文文档(四)(5)
PyMuPDF 1.24.4 中文文档(四)
41 0
|
5月前
|
存储 Python
PyMuPDF 1.24.4 中文文档(四)(4)
PyMuPDF 1.24.4 中文文档(四)
53 0
|
5月前
|
XML JavaScript 前端开发
PyMuPDF 1.24.4 中文文档(十)(1)
PyMuPDF 1.24.4 中文文档(十)
52 0
|
5月前
|
安全 API 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(一)(5)
PyMuPDF 1.24.4 中文文档(一)
102 3
PyMuPDF 1.24.4 中文文档(一)(5)
|
5月前
|
XML 存储 编解码
PyMuPDF 1.24.4 中文文档(八)(5)
PyMuPDF 1.24.4 中文文档(八)
297 1
PyMuPDF 1.24.4 中文文档(八)(5)
|
5月前
|
XML 编解码 文字识别
PyMuPDF 1.24.4 中文文档(八)(4)
PyMuPDF 1.24.4 中文文档(八)
243 1