API#

PyMuPDF4LLM API#

The PyMuPDF4LLM API

property version#

打印库的版本。

to_markdown(doc: pymupdf.Document | str, *, pages: list | range | None = None, hdr_info: Any = None, write_images: bool = False, embed_images: bool = False, dpi: int = 150, image_path='', image_format='png', image_size_limit=0.05, force_text=True, margins=(0, 50, 0, 50), page_chunks: bool = False, page_width: float = 612, page_height: float = None, table_strategy='lines_strict', graphics_limit: int = None, ignore_code: bool = False, extract_words: bool = False, show_progress: bool = True) str | list[dict]#

读取文件的页面,并以 Markdown 格式输出其文本。此过程的具体行为可以通过多个参数进行调整。请注意,支持从 |Markdown| 文本构建页面块

参数:
  • doc (Document,str) – 需要处理的文件,可指定为文件路径字符串,或 PyMuPDF Document (通过 pymupdf.open 创建) 。若要使用 pathlib.Path 规范、Python 文件对象、内存中的文档等,必须 使用 PyMuPDF Document。

  • pages (list) – 可选参数,指定要输出的页面 (注意:使用 0-based 页码) 。如果省略,则处理所有页面。

  • hdr_info – 可选参数。如果要提供自定义的标题检测逻辑,可以使用此参数。它可以是一个可调用对象,或者是一个包含 get_header_id 方法的对象。该方法必须接受一个文本片段 (即 extractDICT() 返回的 span 字典) ,以及一个关键字参数 "page" (其值为所属的 Page 对象) 。它应返回一个字符串 "" 或 1 到 6 个 "#" 号后跟一个空格。如果省略,将对整个文档进行扫描,以找到最常见的字体大小,并基于此推导标题级别。若要完全禁用此行为,可指定 hdr_info=lambda s, page=None: ""hdr_info=False

  • write_images (bool) – 当遇到图片或矢量图形时,将从相应页面区域创建图片,并存储在指定的文件夹中。同时,Markdown 中会生成指向这些图片的引用。此选项会导致该区域的文本不被包含在文本输出中 (但会出现在图片中) 。因此,如果文档中包含整页图片上的文本,请确保此参数设为 False

  • embed_images (bool) – 类似于 write_images,但图片会被嵌入到 Markdown 文本中,以 base64 编码字符串的形式存储。如果使用该选项,则会忽略 write_imagesimage_path。此选项可能会显著增加 Markdown 文本的大小。

  • image_size_limit (float) – 该值必须为小于 1 的正数。当 width / page.rect.width <= image_size_limitheight / page.rect.height <= image_size_limit 时,图片将被忽略。例如,默认值 0.05 表示图片的宽度和高度必须大于页面宽度和高度的 5%,才能被考虑纳入。

  • dpi (int) – 指定图片的分辨率 (DPI) 。仅当 write_images=True 时有效。默认值为 150。

  • image_path (str) – 指定存储图片的文件夹。仅当 write_images=True 时有效。默认值为脚本目录的路径。

  • image_format (str) – 指定图片的格式 (扩展名) 。默认值为 "png" (便携式网络图形格式) 。常见的替代格式包括 "jpg" 。所有可能的值详见 支持的文件类型

  • force_text (bool) – 生成文本输出,即使文本与图片/图形重叠。这些文本会在相应图片之后出现。如果 write_images=True,此参数可以设为 False 以避免重复输出图片上的文本。

  • margins (float,list) –

    以浮点数或浮点数序列指定页面边距。只有位于边距内的对象才会被输出。

    • margin=f 等价于 (f, f, f, f),表示 (left, top, right, bottom)

    • (top, bottom) 等价于 (0, top, 0, bottom)

    • 若要读取整个页面,请使用 margins=0

  • page_chunks (bool) –

    若设为 True,则输出将是 Document.page_count 个字典的列表 (每页一个字典) 。每个字典的结构如下:

    • ”metadata” - 一个字典,包含文档的元数据 Document.metadata,并附加额外键 “file_path” (文件路径) 、”page_count” (文档页数) 和 “page_number” (基于 1 的页码) 。

    • ”toc_items” - 该页面的目录项列表。每个项的格式为 [lvl, title, pagenumber],其中 lvl 表示层级,title 为标题字符串,pagenumber 为基于 1 的页码。

    • ”tables” - 该页面的表格列表。每个项是一个字典,包含键 "bbox" (表格在页面上的位置,格式为 pymupdf.Rect 元组) 、"row_count" (行数) 和 "col_count" (列数) 。

    • ”images” - 该页面的图片列表,与 Page.get_image_info() 方法返回值相同。

    • ”graphics” - 该页面的矢量图形矩形列表,包含由 Page.cluster_drawings() 方法返回的矢量图形边界框。

    • ”text” - 以 Markdown 格式存储的页面内容。

    • ”words” - 若 extract_words=True,则包含 page.get_text("words") 方法返回的单词列表。格式为 (x0, y0, x1, y1, "wordstring", bno, lno, wno),其顺序与 Markdown 文本中的顺序一致,并且支持多栏文本和表格文本的正确顺序。

  • page_width (float) – 指定页面宽度。对于 PDF、XPS 等固定页面宽度的文档,此参数会被忽略。对于 可重排 文档 (如电子书、办公文档或纯文本文件) ,默认假设其宽度为信纸宽度 (612) ,高度为“无限大”,即整个文档被视为一页。

  • page_height (float) – 指定页面高度。仅当 page_width 适用时才相关。默认值 None 表示文档被视为单页,其宽度为 page_width,此时不会有 Markdown 页面分隔符 (除最后一页外) ,并且返回的 page_chunks 仅包含一个页面。

  • table_strategy (str) – 表格检测策略。默认值 "lines_strict" (忽略背景色) 。某些情况下,其他策略可能更有效,例如 "lines" (使用所有矢量图形对象进行检测) 。

  • graphics_limit (int) – 限制处理矢量图形元素的数量。某些科学文档或使用图形命令模拟文本的页面可能包含成千上万个矢量对象。矢量图形主要用于表格检测,分析此类页面可能导致运行时间过长。可通过 graphics_limit=5000 或更小的值排除问题页面。被忽略的页面将在输出文本中显示一条消息。

  • ignore_code (bool) – 若设为 True,则等宽字体文本不会被特殊处理,不会生成代码块。当 extract_words=True 时,该值默认为 True

  • extract_words (bool) – 若设为 True,则 page_chunks=True,并为每个页面字典添加 "words" 键,其值为 Page.get_text("words") 返回的单词列表。

  • show_progress (bool) –

    若设为 True (默认) ,则在转换为 Markdown 期间显示进度条,例如:

    处理 input.pdf… [==================== ] (148/291)

返回:

返回选定页面文本的合并字符串,或包含页面信息的字典列表。

LlamaMarkdownReader(*args, **kwargs)#

使用 LlamaIndex 包创建一个 pdf_markdown_reader.PDFMarkdownReader。请注意,安装 pymupdf4llm不会自动安装 此包。

有关可能的参数详情,请参考 LlamaIndex 文档 [2]

Raises:

NotImplementedError: 请安装所需的 LlamaIndex 包。

返回:

一个 pdf_markdown_reader.PDFMarkdownReader,并输出消息 “Successfully imported LlamaIndex”。请注意,此方法执行需要几秒钟。有关 Markdown 读取器的使用详情,请参见下文。

class pdf_markdown_reader.PDFMarkdownReader#
load_data(file_path: Union[Path, str], extra_info: Optional[Dict] = None, **load_kwargs: Any) List[LlamaIndexDocument]#

这是当前提取 Markdown 数据时应使用的唯一方法。请务必忽略 aload_data()lazy_load_data() 方法。其他方法(如 use_doc_meta() )可能有意义,也可能没有。有关更多信息,请参考 LlamaIndex 文档 [2]

在内部,该方法会执行 to_markdown()

返回:

一个 LlamaIndexDocument 文档列表——每个页面对应一个文档。

Footnotes


本软件按原样提供,不作任何明示或暗示担保。本软件根据许可分发,除非根据该许可条款明确授权,否则不得复制、修改或分发。请参阅 artifex.com 上的许可信息,或联系 Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States 了解更多信息。