ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PyMuPDF 功能矩阵深度解析:与 pikepdf、PyPDF2、pdfrw、pdfplumber 的全面对比

PyMuPDF 功能矩阵深度解析:与 pikepdf、PyPDF2、pdfrw、pdfplumber 的全面对比 图像处理【免费下载链接】PyMuPDFPyMuPDF is a high performance Python library for data extraction, analysis, conversion manipulation of PDF (and other) documents.项目地址https://gitcode.com/gh_mirrors/py/PyMuPDF点击查看免费下载导读本文基于 docs/about-feature-matrix.rst其完整内容被引入 docs/about.rst 的 Features Comparison 章节展开系统梳理 PyMuPDF 在多格式支持、渲染、文本/表格/矢量提取、PDF 高级编辑、安全性与性能等维度的能力并与 pikepdf、PyPDF2、pdfrw、pdfplumber/pdfminer 等典型 Python PDF 方案逐项对比。读完本文你将获得一张可直接用于技术选型的完整功能清单了解每项能力对应的 PyMuPDF 实际 API 与底层实现依据以及如何结合 PyMuPDF Pro 与 PyMuPDF4LLM 扩展 Office 文档与 LLM/RAG 场景。一、功能矩阵的定位一次看清五大 Python PDF 方案官方文档以一张**功能矩阵Feature Matrix**作为核心载体将 PyMuPDF 与四类代表性方案放在同一张表中逐项比较对比对象定位底层引擎PyMuPDF高性能数据提取、分析、转换与操作MuPDFC 引擎pikepdf基于 QPDF 的 PDF 处理库QPDFCPyPDF2纯 Python 实现的 PDF 工具库无纯 Pythonpdfrw纯 Python 的 PDF 读写库无纯 Pythonpdfplumber / pdfminer面向 PDF 文本与表格解析pdfminer纯 Python矩阵用✔ 支持 / ✕ 不支持 / Limited 部分支持三种状态标记每一项能力并用 14 种格式图标PDF、XPS、EPUB、MOBI、FB2、CBZ、SVG、TXT、MD、Image、DOCX、XLSX、PPTX、HWPX图标源文件位于 docs/images/icons/直观展示多格式支持范围。下文按能力域逐节还原矩阵内容并结合仓库源码给出可验证的 API 依据。二、多文档格式支持PyMuPDF 的差异化优势2.1 矩阵结论PyMuPDF支持PDF、XPS、EPUB、MOBI、FB2、CBZ、SVG、TXT、MD、Image以及经 Pro 扩展的DOCX、XLSX、PPTX、HWPXpikepdf / PyPDF2 / pdfrw / pdfplumber均仅支持 PDF。完整的输入/输出格式清单见 docs/supported-files-table.rst输入支持 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。README 中也确认了同样的输入矩阵PDF 及衍生格式PDF、XPS、EPUB、CBZ、MOBI、FB2、SVG、TXT、MD、图像PNG、JPEG、BMP、TIFF、GIF 等、OfficeProDOC、DOCX、XLS、XLSX、PPT、PPTX、韩文办公ProHWP、HWPX。2.2 关于 Office 文档的重要说明官方 note文档在矩阵下方专门附了一条注意说明强调 Office 文档DOCX、XLSX、PPTX与韩文 HWPX 文档的加载行为这些文档可以被加载进 PyMuPDF并返回一个标准的Document对象但底层实现是将输入转换为 HTML 来做内容排版layout因此原始的页面分页信息会丢失保存输出时不能期望忠实还原原始版面这类输入文件主要适合文本提取用途如果需要忠实的版面还原官方建议使用 PyMuPDF Pro见 docs/pymupdf-pro/index.rst。这段说明的工程含义是当评估能否用 PyMuPDF 直接处理 Word/Excel/PPT时要区分纯文本/内容提取可以与版面级还原需 Pro 或其它方案两种诉求。三、渲染能力唯一覆盖所有文档类型的方案矩阵中 Render Document Pages 一行结论明确PyMuPDF所有文档类型均可渲染✔ All document typespikepdf / PyPDF2 / pdfrw / pdfplumber均无渲染能力✕ No rendering。渲染是把页面变成位图如 PNG的过程也是 GUI 显示文档的基础。PyMuPDF 通过Page.get_pixmap()实现例如import pymupdf doc pymupdf.open(document.pdf) page doc[0] pixmap page.get_pixmap(dpi150) # 以 150 DPI 栅格化页面 pixmap.save(page_0.png)从源码看get_pixmap在 src/pymupdf.py 中支持matrix、dpi、colorspace、clip、alpha、annots等参数对应get_page_pixmap辅助函数并能输出 PNG/JPEG 等多种格式Pixmap.save/Pixmap.tobytes。渲染结果的进一步处理还包括Pixmap.warp、Pixmap.tint_with、Pixmap.gamma_with等图像操作可支撑缩略图、水印、色彩校正等下游需求。四、文本写入、提取与 CJK/Markdown 支持4.1 向 PDF 页面写入文本Write Text to PDF Page矩阵中只有PyMuPDF支持向 PDF 页面写入文本其余四家均不支持。文档原样给出了三个官方推荐入口Page.insert_htmlbox—— 用 HTML/CSS 排版文本块Page.insert_textbox—— 在指定矩形内排版文本返回未排下的剩余行高TextWriter—— 面向文本的精确定位写入器逐字/逐行控制。典型用法对应 src/pymupdf.py 中Page.insert_textbox的实现支持align、fontsize、fontname、color、lineheight等参数import pymupdf doc pymupdf.open() page doc.new_page() rect pymupdf.Rect(72, 72, 400, 200) page.insert_textbox(rect, Hello PyMuPDF, fontsize12, align1) doc.save(text.pdf)4.2 文本提取Extract TextPyMuPDF支持所有文档类型的文本提取PyPDF2 / pdfplumber仅限 PDFpikepdf / pdfrw不支持。PyMuPDF 的文本提取通过Page.get_text()完成支持text、dict、rawdict、json、html、xml、xhtml等多种输出格式底层由TextPage提供extractText、extractWORDS、extractBLOCKS等接口见 src/utils.py 的get_text及 TextPage 类。还可以通过clip矩形只提取页面局部区域import pymupdf doc pymupdf.open(input.pdf) page doc[0] text page.get_text(text, clippymupdf.Rect(50, 100, 400, 300))4.3 提取为 MarkdownExtract Text as Markdown矩阵中 Extract Text as Markdown (.md) 一行仅 PyMuPDF 全家桶支持所有文档类型其余四家均不支持。核心入口是 PyMuPDF4LLM见 docs/pymupdf4llm/index.rstimport pymupdf4llm md pymupdf4llm.to_markdown(input.pdf)PyMuPDF4LLM 将文本与表格统一输出为 GitHub 兼容的 Markdown并支持多栏页面、页眉/页脚剔除headerFalse, footerFalse、分块输出page chunking等针对 LLM/RAG 场景的增强。4.4 CJK 字符支持Supports CJK characters矩阵结论PyMuPDF ✔、PyPDF2 ✔、pdfplumber/pdfminer ✔pikepdf ✕、pdfrw ✕。PyMuPDF 内置对中文、日文、韩文等 CJK 字符集的支持README 亦确认 PyMuPDF has solid CJK support可直接用于东亚语种 PDF 的文本提取与写入。五、表格与矢量图形5.1 表格提取Extract TablesPyMuPDF所有文档类型pdfplumber/pdfminer仅 PDF其余不支持。PyMuPDF 的表格能力由Page.find_tables()提供实现在 src/table.py 与 src/fitz_table.py检测结果可导出为 Markdown、HTML 或 Pandas DataFrameimport pymupdf doc pymupdf.open(spreadsheet.pdf) page doc[0] tables page.find_tables() for table in tables: print(table.to_markdown()) df table.to_pandas()从源码看表格检测同时考虑了线条策略vertical_strategy/horizontal_strategy、文字策略、网格吸附snap tolerance与版面布局find_tables还提供union与refine两个增强选项use_layout门控基于版面框的表格识别。仓库中 tests/test_tables.py 覆盖了表格提取的回归测试。5.2 矢量图形提取与绘制Extract Vector Graphics提取矢量图形PyMuPDF 支持所有文档类型pdfplumber/pdfminer 仅Limited其余不支持。PyMuPDF 通过Page.get_drawings()返回页面的矢量绘图指令路径、曲线、填充等Page.cluster_drawings()可对矢量元素聚类这些是图片区域分析与版面还原的基础。Draw Vector Graphics (PDF)绘制矢量图形仅 PyMuPDF 支持。Page提供了draw_line、draw_rect、draw_circle、draw_bezier、draw_curve、draw_sector、draw_polyline等一整套绘图 API源码见 src/pymupdf.py支持描边色、填充色、透明度、虚线、旋转与 morph 变换。import pymupdf doc pymupdf.open() page doc.new_page() shape page.new_shape() shape.draw_line((72, 72), (200, 72)) shape.draw_circle((300, 200), 40, fill(0.9, 0.2, 0.2)) shape.commit() doc.save(vector.pdf)六、底层引擎与文件健壮性6.1 基于成熟引擎Based on Existing, Mature LibraryPyMuPDF基于MuPDFC 引擎实现为 Python Cpikepdf基于QPDFCPyPDF2 / pdfrw / pdfplumber无底层引擎纯 Python 实现。6.2 自动修复损坏 PDFAutomatic Repair of Damaged PDFs矩阵结论PyMuPDF ✔、pikepdf ✔其余不支持。PyMuPDF 在打开损坏 PDF 时会尝试自动修复Document.is_repaired可查询文档是否经过修复并支持Document.repair()手动触发。6.3 加密 PDFEncrypted PDFs矩阵结论PyMuPDF ✔、pikepdf ✔PyPDF2 Limited、pdfplumber Limitedpdfrw 不支持。PyMuPDF 通过Document.authenticate(password)解密保存时支持 RC4/AES 加密save的encryption、owner_pw、user_pw、permissions参数见 src/pymupdf.py 中Document.save/ez_save/write签名。对应测试见 tests/test_crypting.py。6.4 线性化 PDFLinearized PDFsPyMuPDF ✔、pikepdf ✔其余不支持。线性化Linearization又称 Fast Web View使 PDF 适合流式下载与快速打开PyMuPDF 在save/ez_save中通过linearTrue开启并可用Document.is_fast_webaccess验证结果。6.5 增量更新Incremental Updates仅 PyMuPDF 支持。增量保存只把改动追加到文件尾部无需重写整个文档对大型文件尤其有价值doc pymupdf.open(big.pdf) page doc[0] page.insert_text((72, 72), append-only change) if doc.can_save_incrementally(): doc.saveIncr() # 或 doc.save(big.pdf, incrementalTrue)Document.can_save_incrementally()用于检查当前文档是否允许增量保存源码中另有save_snapshot可配合增量操作。七、PDF 高级特性唯一全绿的一行以下特性矩阵中仅 PyMuPDF 全部支持是与其他方案拉开差距最明显的区域特性PyMuPDFpikepdfPyPDF2pdfrwpdfplumber集成 Checkpoint/RestartPDF✔✕✕✕✕PDF Optional Content可选内容/图层✔✕✕✕✕PDF Embedded Files嵌入文件✔✔Limited✕LimitedPDF Redactions红action/密文遮蔽✔✕✕✕✕PDF Annotations注释Full✕Limited✕✕PDF Form Fields表单字段创建/读取/更新✕Limited不可创建✕✕PDF Page Labels页面标签✔Read-only✕✕✕字体子集化Font Sub-Setting✔✕✕✕✕7.1 Checkpoint / Restart日志式撤销重做Document.journal_enable()开启日志模式后可通过journal_start_op/journal_stop_op记录操作并用journal_undo/journal_redo回退或重放journal_save/journal_load可持久化操作日志。这对需要可恢复的长流程批处理非常实用也是矩阵中唯一一家提供该能力的库。7.2 可选内容Optional Content / OCG 图层PyMuPDF 提供Document.add_layer、Document.add_ocg、Document.get_layers、Document.set_layer、Document.switch_layer等完整 API对应测试见 tests/test_optional_content.pytest_oc1、test_oc2等用例覆盖了图层创建与状态切换。7.3 嵌入文件Document.embfile_add/embfile_get/embfile_info/embfile_names/embfile_del/embfile_upd构成完整的嵌入式附件读写接口Page.add_file_annot则可以把文件作为附件型注释挂到页面指定位置。7.4 红actionRedactionsRedaction 是两步式的安全删除流程import pymupdf doc pymupdf.open(contract.pdf) page doc[0] rect page.search_for(confidential)[0] page.add_redact_annot(rect, fill(1, 1, 1)) # 第一步标记 page.apply_redactions() # 第二步永久删除底层内容 doc.save(redacted.pdf)apply_redactions默认处理图像与图形images2, graphics1对应源码位于 src/pymupdf.py 的Page.apply_redactionsREADME 明确强调应用后原内容不可恢复。7.5 注释AnnotationsPyMuPDF 支持完整的注释体系高亮、下划线、删除线、波浪线text marker便签、自由文本、墨迹、图章、线条/箭头、多边形、圆形/矩形、文件附件、插入符等。示例page.add_highlight_annot(rect) page.add_freetext_annot(rect, note, fontsize11) page.add_ink_annot([points]) # 手写墨迹对应源码见 src/pymupdf.py 的Page.add_*_annot系列方法与Annot类测试覆盖见 tests/test_annots.py。7.6 表单字段Form Fields / Widgets矩阵标记为Create, read, update创建、读取、更新而 PyPDF2 仅为部分支持且不能创建doc pymupdf.open(form.pdf) page doc[0] for field in page.widgets(): print(field.field_name, field.field_value) if field.field_name First Name: field.field_value Ada field.update() doc.save(filled_form.pdf)Widget类在 src/pymupdf.py 中定义支持文本、复选、单选、列表、下拉、按钮等字段类型测试见 tests/test_widgets.py。7.7 页面标签Page LabelsDocument.get_page_labels()/set_page_labels可读写 PDF 的页码标签如 i, ii, iii、1-1, 1-2 等pikepdf 仅能只读读取。7.8 字体子集化Font Sub-SettingDocument.subset_fonts(verboseFalse, fallbackFalse)将嵌入字体裁剪为文档实际用到的字形显著减小文件体积是压缩 PDF 的关键手段之一。八、Jupyter 集成与文档合并8.1 Jupyter / IPython Notebooks 集成矩阵结论PyMuPDF ✔、pikepdf ✔、pdfplumber ✔PyPDF2、pdfrw 不支持。PyMuPDF 的Pixmap可直接在 Notebook 中内联展示page.get_pixmap()配合 IPython 图像显示。8.2 文档合并 / 拼接Joining / MergingPyMuPDF可合并所有文档类型不限于 PDF其余四家仅能合并 PDF。PyMuPDF 的核心 API 是Document.insert_pdf()import pymupdf merger pymupdf.open() for path in [part1.pdf, part2.pdf, part3.pdf]: merger.insert_pdf(pymupdf.open(path)) merger.save(merged.pdf)insert_pdf支持from_page/to_page范围选择、rotate旋转、links/annots/widgets是否随页携带以及show_progress进度回调源码见 src/pymupdf.py 中Document.insert_pdf与底层JM_merge_range。README 还给出了按页拆分 PDF 的反向用法insert_pdf(doc, from_pagei, to_pagei)。九、OCR与 Tesseract 的无缝集成矩阵中 OCR API for Seamless Integration with Tesseract 一行仅 PyMuPDF 支持所有文档类型。核心 API 为Page.get_textpage_ocr()实现在 src/utils.py内部区分full_ocr与partial_ocr两条路径import pymupdf doc pymupdf.open(scanned.pdf) page doc[0] tp page.get_textpage_ocr(languageeng) # 需要本机安装 Tesseract 语言包 text page.get_text(textpagetp)PyMuPDF 直接调用 MuPDF 内建的 Tesseract 集成Python 层无需pytesseract依赖但需要可用的tessdata语言数据可通过tessdata参数或TESSDATA_PREFIX环境变量指定。Pixmap.pdfocr_save/pdfocr_tobytes还支持直接输出带 OCR 文本层的 PDF。语言包安装指南见 docs/ocr/tesseract-language-packs.rst。在 PyMuPDF4LLM 场景docs/pymupdf4llm/index.rst中OCR 默认按需自动触发页面无可选文本纯扫描图或文本乱码时才局部 OCR可用force_ocrTrue强制、use_ocrFalse关闭、ocr_languageengdeu指定多语言。十、性能基准官方 7,031 页测试集结果性能数据来自 docs/about-performance.rst由 docs/about.rst 的 Performance 章节引入。测试集为固定 8 份 PDF、共 7,031 页含文本与图像按任务分组计时10.1 Copying打开并另存为即复制该测试衡量读取 PDF 并重新写为新 PDF 的速度该过程也是多文档合并/拼接的核心因此数值同样适用于 PDF 合并场景。库耗时秒PyMuPDF3.05PDFrw10.54PikePDF33.57PyPDF2494.0410.2 文本提取Text Extraction从每个页面提取纯文本并存入文本文件。库耗时秒PyMuPDF8.01XPDF27.42PyPDF2101.64PDFMiner227.2710.3 渲染Rendering按给定 DPI 把每页渲染为图像如 PNG是 GUI 显示文档的基础。库耗时秒PyMuPDF367.04XPDF646PDF2JPG851.52需要说明的是这些数字是文档发布时的特定测试集与特定机器上的官方记录仅用于横向展示量级差异实际表现取决于文档内容、硬件与版本。README 亦从架构层面解释了差距来源——PyMuPDF 基于 C 引擎 MuPDF而纯 Python 库逐对象解析 PDF 结构天然存在数量级差距。十一、产品家族PyMuPDF / PyMuPDF Pro / PyMuPDF4LLM矩阵之外官方还给出了产品家族对比见 docs/about.rst三款产品共享同一核心所有附加产品都依赖同一个核心产品 PyMuPDF因而拥有其全部功能可视为对核心库的可选增强。维度PyMuPDFPyMuPDF ProPyMuPDF4LLM输入文档PDF、XPS、EPUB、CBZ、MOBI、FB2、SVG、TXT、MD、Images同 PyMuPDF另加 DOC/DOCX、XLS/XLSX、PPT/PPTX、HWP/HWPX同 PyMuPDF输出文档任意输入可转 PDF、SVG 或图像同 PyMuPDF同 PyMuPDF另加 Markdown、JSON、TXT页面分析基础页面分析返回文档结构同 PyMuPDF基于训练数据的高级页面分析数据提取基础提取含结构化布局信息与边界框数据同 PyMuPDF高级提取含语义理解的布局分析与增强边界框数据表格提取文本提取中的基础表格提取同 PyMuPDF高级表格提取支持合并单元格与复杂布局图像提取基础图像提取同 PyMuPDF高级检测与渲染可保存到磁盘或嵌入 Markdown矢量提取矢量提取与聚类同 PyMuPDF更优的图片区域检测主流 RAG 集成LangChain、LlamaIndex同 PyMuPDF同 PyMuPDF另附 RAG 辅助方法OCR按需调用内建 Tesseract同 PyMuPDF基于页面内容分析的自动 OCR支持多种 OCR 引擎适配器用法示例PyMuPDF4LLM Pro 解锁 Office 文档import pymupdf4llm import pymupdf.pro pymupdf.pro.unlock(YOUR-LICENSE-KEY) md pymupdf4llm.to_markdown(document.docx)安装方式pip install pymupdf可选pip install pymupdf4llm与pip install pymupdfpro更多细节见 README.md。十二、许可证与版权PyMuPDF 与 MuPDF 采用开源 AGPL 与商业授权双轨完整 AGPL 文本见仓库根目录 COPYING。如果无法满足 AGPL 条款可联系 Artifex 获取商业许可Artifex 是 MuPDF 的独家商业授权代理。选型时务必根据项目是否为开源项目、是否涉及对外提供服务等场景评估许可合规性。总结从功能矩阵可以清晰看到 PyMuPDF 的能力版图多格式输入输出、全类型渲染、跨格式文本/表格/矢量提取、面向 PDF 的深度编辑注释、表单、红action、图层、嵌入文件、字体子集化、增量更新、日志式撤销以及内建 OCR 集成——这 26 项能力中绝大多数在矩阵里是全绿或唯一支持。若你的场景以 PDF 为中心且需要读写一体与高性能PyMuPDF 是覆盖面最完整的选项若只需轻量 PDF 合并或简单文本提取可结合本矩阵按需选择更轻的方案。后续深入阅读可参考docs/about.rst、docs/about-performance.rst、docs/supported-files-table.rst、docs/pymupdf4llm/index.rst以及源码入口 src/pymupdf.py。赞分享图像处理【免费下载链接】PyMuPDFPyMuPDF is a high performance Python library for data extraction, analysis, conversion manipulation of PDF (and other) documents.项目地址https://gitcode.com/gh_mirrors/py/PyMuPDF点击查看免费下载相关推荐LinkSwift九大网盘直链解析与直链下载完整手册LinkSwift九大网盘直链解析与直链下载完整手册 打开百度网盘文件列表一个 2 GB 的视频显示 14 KB/s进度条爬了四十分钟还不到 2%。Lin前端PyMuPDF 全景解析功能矩阵、产品套件与性能基准PyMuPDF 全景解析功能矩阵、产品套件与性能基准 本篇技术指南围绕 PyMuPDF 官方文档的 About 章节 docs/about.rst http图像处理Apache Superset竞品分析功能对比矩阵Apache Superset竞品分析功能对比矩阵 引言数据可视化平台的选型困境 你是否正面临BI工具选型难题团队需要平衡易用性与功能性IT部门关注部署数据可视化数据分析后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表