变更日志#

版本 1.26.0 中的变化 (2025-05-22)

  • 使用 MuPDF-1.26.1。

  • 修复的问题

    • 修复 4324: cluster_drawings() 无法聚类水平和垂直细线

    • 修复 4363: 搜索问题

    • 修复 4404: page.get_links() 中的 IndexError

    • 修复 4412: 回归?虚假错误?v1.25.4 中 insert_pdf 的问题

    • 修复 4423: 在 1.25.3 版本后遇到错误:pymupdf.mupdf.FzErrorFormat: code=7: 无法在 xref 中找到对象

    • 修复 4435: get_pixmap 方法卡在某一页

    • 修复 4439: 从数据创建新的 Xml 类不起作用 - 代码错误

    • 修复 4445: 损坏的 XREF 表修复不正确

    • 修复 4447: 无法正确设置注释的描边颜色

    • 修复 4479: set_layer_ui_config() 切换所有图层而不是只切换一个

    • 修复 4505: 向上追溯 Widget 标志值至其父结构

  • 其他

    • 部分修复 4457: 字体子集化后显示错误字符(使用原生方法)

    • 支持图像图章注释。

    • 支持页面重着色。

    • 添加了使用 Django 文件存储 API 通过 pymupdf 打开文件的示例。

    • 澄清了 FreeText 注释的颜色选项。现在如果尝试设置不支持的属性,将引发异常。

    • 修复了 Pixmap.is_unicolor() 中潜在的段错误。

    • 添加了运行时断言,确保 PyMuPDF 和 MuPDF 在构建时使用了兼容的 NDEBUG 设置(与 4390 相关)。

    • 简化了打开文档时文件名/文件类型的处理。

版本 1.25.5 中的变化 (2025-03-31)

  • 修复的问题

    • 修复 4372: 由于缺少 /Resources 对象,文本插入失败

    • 修复 4400: fill_textbox 中的无限循环

    • 修复 4403: 无法使用 get_text() - 图层/裁剪嵌套太深

    • 修复 4415: PDF 页面镜像,原点位于左下角

  • 其他

    • 使用 MuPDF-1.25.6。

    • 修复了 MuPDF 在 MacOS 上使用特定字体时出现的段错误。

    • 修复了 Annot.get_textpage()clip 参数。

    • 修复了 Python-3.14 (预发布) 构建错误。

版本 1.25.4 中的变化 (2025-03-14)

  • 使用 MuPDF-1.25.5。

  • 修复的问题

    • 修复 4079: apply_redactions() 的意外结果

    • 修复 4224: MuPDF 错误: 格式错误: 1d faxd 中的负数编码

    • 修复 4303: 替换图像后,page.get_image_info() 返回过期的缓存结果

    • 修复 4309: 删除第一页时出现 FzErrorFormat 错误

    • 修复 4336: 严重的性能回归: pix.color_count 在 1.25.3 版本中比 1.23.8 版本慢 150 倍

    • 修复 4341: 当 /Kids 是多个 /Nums 的数组时,标签检索无效

  • 其他

    • 修复了合并 PDF 时处理重复小部件名称的问题 (PR #4347)。

    • 改进了 Pyodide 构建。

    • 通过禁用 PY_LIMITED_API,避免了 Python-3.13 中与 SWIG 相关的构建错误。

版本 1.25.3 中的变化 (2025-02-06)

  • 使用 MuPDF-1.25.4。

  • 修复的问题

    • 修复 4139: 文本颜色值在 1.24.14 和 1.25.0 之间发生变化

    • 修复 4141: 某些插入方法对于没有 /Resources 对象的页面失败

    • 修复 4180: 搜索问题

    • 修复 4182: 文本坐标提取错误

    • 修复 4245: 最近版本中高亮问题失真

    • 修复 4254: add_freetext_annot 在注释框外绘制文本

  • 其他

    • 在注释中:* 添加了对子类型 FreeTextCallout 的支持。* 添加了对富文本的支持。

    • 向 insert_text*() 添加了 miter_limit 参数,以允许抑制由长斜接引起的尖角。

    • Document.insert_pdf() 添加了小部件支持。

    • 向 span 字典添加了 bibi

    • 向 char 字典添加了 synthetic

    • 修复了 Pyodide 构建。

版本 1.25.2 中的变化 (2025-01-17)

  • 修复的问题

    • 修复 4055: 对所有复选框设置“是”并非适用于所有 PDF 渲染引擎。

    • 修复 4155: samples_mv 不安全

    • 修复 4162: 尝试添加签名域时出现 AttributeError

    • 修复 4186: 图像提取中对颜色空间为 CMYK 的 JPEG 文件处理不正确

    • 修复 4195: 具有 alpha 通道且已反色的 Pixmap 未正确渲染

    • 修复 4225: 由于颜色空间定义,pixmap.pil_save() 失败

    • 修复 4232: 不正确的字体样式和大小

  • 其他

    • 使用 Python 内置的字形名称 <> Unicode 转换。

    • 提高了 pixmap 颜色反转的速度。

    • 向 span 字典添加了新的 char_flags 成员,例如允许检测不可见文本。

    • 在 TextPage 输出中检测图像遮罩。

    • 添加了 Pixmap.pil_image()

版本 1.25.1 中的变化 (2024-12-11)

  • 使用 MuPDF-1.25.2。

  • 修复的问题

    • 修复 4125: 转换 Pixmap 颜色空间时存在内存泄漏

    • 修复 4034: 保存时 PDF 清理中可能存在的回归问题。

版本 1.25.0 中的变化 (2024-12-05)

  • 使用 MuPDF-1.25.1。

  • 修复的问题

    • 修复 4026: page.get_text('blocks') 输出两段非常相似但边界框不同的文本

    • 修复 4004: 更新 PDF 表单域值时出现段错误

    • 修复 3887: 使用回退字体时字体子集化问题

    • 修复 3886: 插入 HTML 时破坏 PDF 的另一个问题

    • 修复 3751: apply_redactions 导致部分页面内容被隐藏/透明化

版本 1.24.14 中的变化 (2024-11-19)

  • 使用 MuPDF-1.24.11。

  • 修复的问题

    • 修复 3448: get_pixmap 函数移除表格,只留下内容

    • 修复 3758: 使用 add_redact_annot/apply_redactions 时出现 “malloc(): unaligned tcache chunk detected Aborted (core dumped)”

    • 修复 3813: Stories: 有嵌套无序列表时有序列表计数错误

    • 修复 3933: font.valid_codepoints() - 功能异常

    • 修复 4018: PyMuPDF 在向后迭代零页 PDF 页面时挂起

    • 修复 4043: fullcopypage 错误

    • 修复 4047: add_redact_annot 中出现段错误

    • 修复 4050: doc.embfile_info() 返回的字典内容与文档不符

  • 其他

    • 确保 Page.get_text() 返回的单词不包含 RTL/LTR 字符混合。

    • 修复了使用系统 MuPDF 进行构建的问题。

    • 添加了点和向量的点积。

版本 1.24.13 中的变化 (2024-10-29)

  • 修复的问题

    • 修复 3848: Piximap 程序崩溃

    • 修复 3950: 无法一致地从 PDF 中提取字段标签

    • 修复 3981: PyMuPDF 1.24.12 与 pyinstaller 一起使用时报错。

    • 修复 3994: pix.color_topusage 引发段错误 (核心转储)

版本 1.24.12 中的变化 (2024-10-21)

  • 修复的问题

    • 修复 3914: 能够将 MuPDF 错误打印到日志而不是 stdout

    • 修复 3916: insert_htmlbox 错误: int 过大无法转换为 float

    • 修复 3950: 无法一致地从 PDF 中提取字段标签

  • 目前支持的 Python 版本为 3.9-3.13。

版本 1.24.11 中的变化 (2024-10-03)

  • 使用 MuPDF-1.24.10。

  • 修复的问题

    • 修复 3624: PDF 文件转换为图像后出现黑色块

    • 修复 3859: doc.need_appearances() 失败,错误为“AttributeError: module ‘pymupdf.mupdf’ has no attribute ‘PDF_TRUE’ “

    • 修复 3863: apply_redactions() 未按预期工作

    • 修复 3905: 打开流时可能抛出 FzErrorFormat 错误而不是 FileDataError

  • 现在 Wheels 使用 Python Stable ABI

    • 每个平台都有一个 PyMuPDF wheel。

    • 每个 wheel 都适用于所有支持的 Python 版本。

    • 每个 wheel 都使用支持的最旧的 Python 版本(目前是 3.8)构建。

    • 没有 PyMuPDFb wheel。

  • 其他

    • 改进了 get_text_words() 的 sort=True 功能。

    • 现在测试总是获取所需 Python 包的最新版本。

    • 移除了对 setuptools 的依赖。

    • 在下面的 PyMuPDF-1.24.10 变化中添加了条目 - 修复 #3630。

版本 1.24.10 中的变化 (2024-09-02)

  • 使用 MuPDF-1.24.9。

  • 修复的问题

    • 修复 3450: get_pixmap 函数处理时间过长

    • 修复 3569: SVG 图像创建未忽略无效 OCGs

    • 修复 3603: ObjStm 压缩和 PDF 线性化不能同时工作

    • 修复 3650: 每个字母之间插入换行符

    • 修复 3661: 更新 Document 以检查 /XYZ 长度

    • 修复 3698: 文档问题 - 注释文档中存在旧代码

    • 修复 3705: Document.select() 在某些特定类型的 PDF 文件中行为异常

    • 修复 3706: 扩展 Document.__getitem__ 类型注释,以反映该方法也接受切片

    • 修复 3727: 方法 get_pixmap() 导致程序退出,没有任何异常或消息

    • 修复 3767: 使用 Tesseract-OCR 5 无法获取 Tessdata

    • 修复 3773: Link.set_border 出现 TypeError: ‘<’ 在 ‘NoneType’ 和 ‘int’ 实例之间不支持

    • 修复 3774: fitz.__version__` 不再工作

    • 修复 3789: 调用 insert_pdf 时抛出 ValueError: 值不足,无法解包(预期 3 个,得到 2 个)

    • 修复 3820: 类改进了 namedDest 处理

    • 修复 3630: page.apply_redactions 产生不想要的黑色矩形

  • 其他

    • 对象流和线性化不能同时使用;尝试这样做将引发异常。(#3603)

    • 修复了处理不存在的 /Contents 对象的问题。

版本 1.24.9 中的变化 (2024-07-24)

  • 使用 MuPDF-1.24.8。

版本 1.24.8 中的变化 (2024-07-22)

  • 修复的问题

    • 修复 3636: open 函数的 API 文档不显眼,难以找到。

    • 修复 3654: docx 解析在 1.24.7 中损坏

    • 修复 3677: 使用 PyMuPDF 新版本(1.24.6 和 1.24.7)无法提取子集字体名称。

    • 修复 3687: Page.get_text 对 epub 文件产生 AssertionError

其他

  • 修复了 codespell 发现的各种拼写错误。

  • 改进了在 Windows 上修改 MuPDF 默认配置的方式。

  • 使文本搜索支持连字。

版本 1.24.7 中的变化 (2024-06-26)

  • 修复的问题

    • 修复 3615: Document.pagemode 或 Document.pagelayout 对 epub 文件崩溃

    • 修复 3616: 未报告最新版本

版本 1.24.6 中的变化 (2024-06-25)

  • 使用 MuPDF-1.24.4

  • 修复的问题

    • 修复 3599: Story.fit_width() 有一条奇怪的线

    • 修复 3594: Amazon 可持续发展报告提取乱码

    • 修复 3591: Page.get_drawings() 中的 ‘width’ 返回宽度等于 0

    • 修复 3561: 使用 page.apply_redactions() 时出现 ZeroDivisionError: float division by zero

    • 修复 3559: 在 insert_htmlbox 中使用空的 H1 H2 H3 H4 等元素时出现 SegFault 11

    • 修复 3539: 添加虚线网格线检测到表格识别

    • 修复 3519: get_toc(simple=False) AttributeError: ‘Outline’ object has no attribute ‘rect’

    • 修复 3510: page.get_label() 在文档第一页获取错误的标签

    • 修复 3494: 1.24.2/1.24.3: 使用 subset_fonts 和 insert_pdf 时引入了虚假字符

    • 修复 3470: subset_fonts 错误退出,没有异常/警告

    • 修复 3400: 在 pymupdf 1.24.2 中,set_toc 改变了一些旋转页面的链接坐标

    • 修复 3347: 指向高度不同的页面上点的链接不正确

    • 修复 3237: Set_metadata() 不工作

    • 修复 3493: 将 PyMuPDF 与其他库隔离;与 GdkPixbuf 等其他库一起加载 PyMuPDF 时出现问题

  • 其他

    • 修复了由于使用常量临时文件名导致 PyMuPDF 并发使用的问题。

    • 在发布中添加了 musllinux x86_64 wheels。

    • 添加了更清晰的版本信息

      • pymupdf.pymupdf_version.

      • pymupdf.mupdf_version.

      • pymupdf.pymupdf_date.

版本 1.24.5 中的变化 (2024-05-30)

  • 修复的问题

    • 修复 3479: 回归: fill_textbox: IndexError: 从空列表弹出

    • 修复 3488: set_toc 方法错误

  • 其他

    • 更多修复,以便使用 MuPDF 的浮点格式化。

    • 移除/禁用了部分不必要的诊断。

    • 修复了 utils.do_links() 崩溃问题。

    • 实验性新函数 pymupdf.apply_pages()pymupdf.get_text()

    • 解决了标签样式“a”和“A”错误的标签生成问题。

版本 1.24.4 中的变化 (2024-05-16)

  • 修复 3418: 重新引入的错误,text align add_redact_annot

  • 修复 3472: insert_pdf 导致 SystemError

  • 其他

    • 修复了 sysinstall 测试在安装新版本前未能移除所有先前安装的问题。

    • 修复了 utils.do_links() 崩溃问题。

    • 更正了 TextPage 创建代码。

    • 统一了各种诊断信息。

    • 修复了 page_merge() 中的错误。

版本 1.24.3 中的变化 (2024-05-09)

  • 现在 Python 模块名为 pymupdffitz 仍然支持以保证向后兼容。

  • 使用 MuPDF-1.24.2。

  • 修复的问题

    • 修复 3357: PyMuPDF==1.24.0 在使用 page.get_text(“text”) 时会挂起

    • 修复 3376: 1.24.x 版本中的编辑结果与预期不符。

    • 修复 3379: get_text_blocks 返回值顺序与文档不符。

    • 修复 3381: Contents 流包含科学记数法的浮点数

    • 修复 3402: 无法添加包含字段间计算 JavaScript 的小部件

    • 修复 3414: 缺少属性 set_dpi()

    • 修复 3430: 在 v1.24.2 版本中,page.get_text() 导致某些 PDF 处理冻结

  • 其他

    • 新增/修改的方法

    • 修复了检查 PDF 属性时的一些问题。

    • 修复了从 sdist 构建 pip 包的问题(参见讨论 3360: Alpine linux docker 构建失败,“找不到 pymupdfb==1.24.1 的匹配发行版”)。

版本 1.24.2 中的变化 (2024-04-17)

  • 从发布中移除了过时的经典实现(以前作为模块 fitz_old 提供)。

  • 修复的问题

    • 修复 3331: Document.pages() 类型提示不正确

    • 修复 3354: PyMuPDF==1.24.1: AttributeError: ‘Document’ 对象的属性 ‘metadata’ 没有 setter

  • 其他

版本 1.24.1 中的变化 (2024-04-02)

  • 修复的问题

    • 修复 3278: apply_redactions 移动了部分未编辑的文本

    • 修复 3301: 对 LINK_URI 类型的链接分类更加宽松

    • 修复 3306: 包含大写“ET”的文本未显示为注释

  • 其他

    • 使用 MuPDF-1.24.1。

    • 支持 ObjStm 压缩。方法 Document.save()Document.ez_save()Document.write() 现在支持新参数 use_objstmcompression_effortpreserve_metadata

版本 1.24.0 中的变化 (2024-03-21)

  • 修复的问题

    • 修复 3281: 准备元数据 (pyproject.toml) 未成功运行

    • 修复 3279: PyMuPDF 不再能在 Alpine Linux 中构建

    • 修复 3257: apply_redactions() 删除注释框外的文本

    • 修复 3216: AttributeError: ‘Annot’ 对象没有属性 ‘__del__’

    • 修复 3207: get_drawings 的项中缺少 h 路径操作符的行

    • 修复 3201: 合并 PDF 时出现内存泄漏

    • 修复 3197: page.get_text() 对某些字符返回十六进制文本

    • 修复 3196: 1.23.25 版本中移除文本不起作用(与 1.20.2 对比)

    • 修复 3172: PDF 的 45 度线条在 PNG 转换中消失

    • 修复 3135: 不将警告记录到 stdout

    • 修复 3125: get_pixmap 方法卡在某一页并永远运行

    • 修复 2964: page.get_pixmap() 函数生成的图像存在问题

  • 其他

    • 使用 MuPDF-1.24.0。

    • 添加了对编辑矢量图形的支持。

    • 表格模块的多项修复

      • 添加了将表格输出为 markdown 字符串的新方法。

      • 解决了计算表头对象时的错误

        现在允许 None 作为单元格值,因为这将在需要时(例如在 pandas DataFrame 中)被解析。

        以前我们试图在所有表头单元格边界框中强制使用类似 rect 的元组,但对于所有列都为 None 的表格这会失败。此修复使这成为可能,并在相应的单元格字符串中构造一个空字符串。

        现在我们正确地将线条的起点/终点包含在聚类图形的边界框中。之前我们连接了线条的矩形 - 这没有效果,因为它总是空的。

    • 改进了打开文档失败时的异常文本。

    • 修复了使用新的 libclang 18 进行构建的问题。

版本 1.23.26 中的变化 (2024-02-29)

  • 修复的问题

    • 修复 3199: 向 setuptools 配置添加 entry_points 以提供命令行控制台脚本

    • 修复 3209: 墨迹注释中空的顶点

  • 其他

    • 改进了表格检测

      • 改进了对空表格的检查,修复了确定表头时的错误。

      • 改进了包围矢量图形矩形的计算。

      • 忽略更多无意义的“伪”表格

    • 安装运行 fitz/__main__.py 的命令行‘pymupdf’命令。

    • 在非 Windows 环境下构建时,不覆盖 MuPDF 的 config.h。

    • 修复了 Story 构造函数的 Archive 参数,使其与文档匹配 - 现在接受单个 Archive 构造函数参数。

    • sdist 中不包含 MuPDF 源代码;构建时将自动下载。

版本 1.23.25 中的变化 (2024-02-20)

  • 修复的问题

    • 修复 3182: Pixmap.invert_irect 参数类型错误

    • 修复 3186: extractText() 从 pdf 中提取损坏的文本

    • 修复 3191: .find_tables() 错误

  • 其他

    • 构建时,可以使用环境变量 PIPCL_PYTHON_CONFIG 直接指定 python-config。

版本 1.23.24 中的变化 (2024-02-19)

  • 修复的问题

    • 修复 3148: 表格提取 - 未正确处理垂直文本

    • 修复 3179: 表格检测: 矢量图形聚类分离不正确

    • 修复 3180: 无法显示可选内容组: AttributeError: module ‘fitz.mupdf’ has no attribute ‘pdf_array_push_drop’

  • 其他

    • 可以使用 sudo pip install 测试系统安装,而不是使用 venv。

版本 1.23.23 中的变化 (2024-02-18)

  • 修复的问题

    • 修复 3126: 使用 pathlib.Path 初始化 Archive 失败。

    • 修复 3131: 调用 Annot 的 next 属性时引发“No attribute .parent”警告

    • 修复 3134: 自 1.23.9 版本以来,在 Page.get_pixmap 中使用 IRect 作为 clip 参数不再工作

    • 修复 3140: PDF 文档关闭后仍在使用

    • 修复 3150: doc.select() 在此文档上挂起。

    • 修复 3163: 使用 fitz.IRect 时出现 AssertionError

    • 修复 3177: fitz.Pixmap(None, pix) 构造 Pixmap 时参数无法识别

  • 其他

    • 通过使用新的 MuPDF 函数 pdf_rearrange_pages() 改进了 Document.select()。这是一个更完整(且更快)的实现,不仅重新排列页面,还会对目录、指向已删除页面的链接以及可选内容定义中受影响的条目进行相应更改。

    • TextWriter.appendv(): 添加了 small_caps 参数。

    • 修复了 MuPDF master 中的一些 valgrind 错误。

    • 修复了使用 MuPDF master 构建时 Document.insert_image() 的问题。

版本 1.23.22 中的变化 (2024-02-12)

  • 修复的问题

    • 修复 3143: doc.get_ocgs() 和 page.get_drawings() 之间 OCG 名称解码的差异

    • 修复 3139: Pixmap 调整大小需要位置参数“clip” - 即使是 None。

  • 其他

    • 从 PyMuPDF 中移除了对 MuPDF 函数 fz_image_size() 的使用。

版本 1.23.21 中的变化 (2024-02-01)

  • 修复的问题

  • 其他

版本 1.23.20 中的变化 (2024-01-29)

  • 错误修复

    • 修复 3100: get_xml_metadata 中访问了错误的内部属性

  • 其他

版本 1.23.19 中的变化 (2024-01-25)

  • 错误修复

    • 修复 3087: 指定遮罩时 insert_image 中出现异常

    • 修复 3094: doc.delete_pages 中出现 TypeError: ‘<’ 在 ‘FzLocation’ 和 ‘int’ 实例之间不支持

  • 其他

    • 查找表格时

      • 查找表格时允许添加用户定义的“虚拟”矢量图形。

      • 确认矢量图形的包围边界框位于裁剪矩形内。

      • 避免慢速查找矩形交集。

    • 添加了 Font.bbox 属性。

版本 1.23.18 中的变化 (2024-01-23)

  • 错误修复

    • 修复 3081: doc.close() 未关闭文档

  • 其他

    • 减小了 sdist 的大小以适应 pypi.org(通过减小两个测试文件的大小)。

    • 如果没有 Desc 项,则修复 Annot.file_info()

版本 1.23.17 中的变化 (2024-01-22)

  • 错误修复

    • 修复 3062: page_rotation_reset 未将页面恢复到原始旋转角度

    • 修复 3070: update_link(): AttributeError: ‘Page’ 对象没有属性 ‘super’

  • 其他

    • 修复了 Page.links() 中的错误 (PR #3075)。

    • 修复了 Page.get_bboxlog() 与图层相关的问题。

    • 添加了对 scripts/ 和 tests/run_compound.py 中超时的支持。

版本 1.23.16 (2024-01-18) 中的变更

  • 错误修复

    • 修复 3058: 从 CMYK JPEG 创建的 Pixmap 生成 RGB 格式

  • 其他

    • 在表格检测策略 “lines_strict” 中,排除仅填充的矢量图形。

    • 修复了 sysinstall 测试失败的问题。

    • 在文档中,更新功能矩阵,添加了关于文本写入的条目。

版本 1.23.15 (2024-01-16) 中的变更

  • 错误修复

    • 修复 3050: python3.9 pix.set_pixel 在 c.append( ord(i)) 中存在问题

  • 其他

版本 1.23.14 (2024-01-15) 中的变更

  • 错误修复

    • 修复 3038: JM_pixmap_from_display_list > 断言错误:类型检查错误

    • 修复 3039: PyMuPDF 中 doc.close() 未关闭文档的问题

  • 其他

版本 1.23.13 (2024-01-15) 中的变更

  • 错误修复

    • 修复 2979: to_pandas() 中列表索引超出范围的问题

    • 修复 3001: 在一个文档上调用 find_tables() 会改变后续文档的边界框

  • 其他

    • 修复了 Rect.heightRect.width 使其永不返回负值。

    • 修复了 TextPage.extractIMGINFO() 返回的 dictkey_yres 值。

版本 1.23.12 (2024-01-12) 中的变更

    • 修复 3027: Page.get_text 抛出针对 ‘parent’ 的属性错误

版本 1.23.11 (2024-01-12) 中的变更

  • 修复了一些 Pixmap 构建错误。

  • 修复了 Pixmap.yres()

版本 1.23.10 (2024-01-12) 中的变更

  • 错误修复

    • 修复 3020: 无法调整 PixMap 大小

  • 其他

    • 修复了 Page.delete_image()

版本 1.23.9 (2024-01-11) 中的变更

  • 默认使用新的 “rebased” 实现。

  • 使用 MuPDF-1.23.9。

  • 错误修复 (仅限 rebased 实现)

    • 修复 2911: rebased 实现中 Page.derotation_matrix 返回元组而不是 Matrix

    • 修复 2919: rebased 版本:合并 PDF 时 resolve_names 中的 KeyError

    • 修复 2922: 允许插入命名目的地链接的新功能无效

    • 修复 2943: ZeroDivisionError: 使用 apply_redactions() 时浮点数除以零

    • 修复 2950: 测试期间调用 pip 存在问题

    • 修复 2954: 文本提取中的替换 Unicode 字符

    • 修复 2957: apply_redactions() 移动文本

    • 修复 2961: 传递字符串作为页码时抛出 IndexError 而非 TypeError。

    • 修复 2969: annot.next 抛出 AttributeError

    • 修复 2978: 1.23.9rc1: 模块 ‘fitz.mupdf’ 没有属性 ‘fz_copy_pixmap_rect’

    • 修复 2907: python 3.12 中对某些 PDF 调用 clean_contents 时发生段错误

    • 修复 2905: SystemError: <内置函数 TextPage_extractIMGINFO> 返回设置了异常的结果

    • 修复 2742: 将同一个源页面插入目标页面三次(而非两次)时发生段错误

  • 其他

    • 添加了设置不透明度的可选参数到 Page.insert_htmlbox()

    • 修复了在 #2934 中提及的 add_redact_annot() 中的问题。

    • 修复了 Page.rotation() 对于非 PDF 文档返回 0 而非抛出异常。

    • 修复了内部的四边形检测,使其能够处理任何 Python 序列。

    • 修复了 rebased 版本的 fitz.pymupdf_version_tuple - 之前设置为 mupdf 版本。

    • 改进了对 Linux 系统安装的支持,包括在 Github 上添加定期测试。

    • 添加了缺失的 flake8scripts/gh_release.py:test_packages

    • 使用了 MuPDF-1.23.8 中新增的公共函数。

    • 改进了 scripts/test.py,以帮助调查 MuPDF 问题。

版本 1.23.8 (2023-12-19) 中的变更

  • 错误修复 (仅限 rebased 实现)

    • 修复 2634: 对于旋转的页面,get_toc 和 set_toc 行为不一致

    • 修复 2861: PDF 合并期间 getLinkDict 中的 AttributeError

    • 修复 2871: PDF 合并期间 getLinkDict 中的 KeyError

    • 修复 2886: 命名链接目的地 Skeleton 中的错误

  • 错误修复 (rebased 和 经典 实现)

    • 修复 2885: pymupdf find tables 过慢

  • 其他

    • Rebased 实现

      • Page.insert_htmlbox(): 一个新的、功能强大得多的替代方案,替代 Page.insert_textbox()TextWriter.fill_textbox(),使用 Story

      • Story.fit*(): 用于将 Story 放入扩展矩形的新方法。

      • Story.write_with_links(): 添加了对外部链接的支持。

      • Document.language(): 修复为使用 MuPDF 新的 mupdf.fz_string_from_text_language2()

      • Document.subset_fonts() - 已修复。

      • 修复了内部的 Archive._add_treeitem() 方法。

      • 修复了 fitz_new.__doc__ 以包含 PyMuPDF 和 Python 版本信息,以及 OS 名称。

      • 移除了对 (*args, **kwargs) 的使用,现在在 API 中显式指定关键字参数。

      • 支持使用了新的 MuPDF Python 异常类。

    • 修复了 button_states() 在 /AP 指向间接对象时返回 None 的错误。

    • 修复了 pillow 测试,使其不再忽略所有错误,并在测试时安装 pillow。

    • 添加了 fitz.css_for_pymupdf_font() 的测试 (使用包 pymupdf-fonts)。

    • 简化了 Github Actions 测试规范。

    • 更新了 tests/README.md

版本 1.23.7 (2023-11-30) 中的变更

  • rebased 实现中的错误修复 (经典实现未修复的)

    • 已修复 2232: Geometry 辅助类应支持关键字参数

    • 已修复 2788: pymupdf 1.23.6 中 get_toc 的问题

    • 已修复 2791: save() 中出现少量内存泄漏

  • 错误修复 (rebased 和 经典 实现)

    • 已修复 2736: 使用负值 mediabox 设置 cropbox 时失败

    • 已修复 2749: RuntimeError: structure tree 中存在循环

    • 已修复 2753: Story.write_with_links 将忽略 HTML 中第一个“page break”之后的所有内容。

    • 已修复 2812: 在横向页面上 find_tables 生成颠倒的文本

    • 已修复 2829: 尽管 #2345 已关闭,但仍打印 [cannot create /Annot for kind]。

    • 已修复 2841: 使用 fitz_new scrub 时出现意外的 KeyError

  • 使用 MuPDF-1.23.7。

  • 其他

    • Rebased 实现

      • 已在测试套件中添加 flake8 代码检查,并进行了各种修复。

      • 在 Document 构造函数期间禁用诊断以匹配经典实现。

    • 2553 的额外修复: 版本 >= 1.22 中存在无效字符

    • 已修复 MuPDF Bug 707324: Story: HTML 表格行背景色重复不正确

    • 添加了 scripts/test.py,用于简单构建+测试 PyMuPDF git checkout。

    • 添加了 fitz.pymupdf_version_tuple,例如 (1, 23, 6)

    • 恢复了对 2345 错误回退的修复: 关闭 utils.py 中的 print 语句

    • mupdf_warnings() 返回的警告信息中包含任何末尾的 ... repeated <N> times... 文本(仅限 rebased)。

版本 1.23.6 (2023-11-06) 中的变更

  • 错误修复

    • 已修复 2553: 版本 >= 1.22 中存在无效字符

    • 已修复 2608: 不正确的 utf32 文本提取(高低代理对被拆分)

    • 已修复 2710: page.rect 和文本位置错误 / 与旧版本不同

    • 已修复 2774: sort=True 时“?”字符的编码错误

    • 已修复 2775: fitz_new 不适用于 python3.10 或更早版本

    • 已修复 2777: 使用 fitz_new 时,Page.mediabox 的类型错误

  • 其他

    • 使用 MuPDF-1.23.5。

    • 添加 Document.resolve_names()(仅限 rebased 实现)。

版本 1.23.5 (2023-10-11) 中的变更

  • 错误修复

    • 已修复 2341: linkDest 中处理 LINK_GOTO 的 zoom 部分中的负值

    • 已修复 2522: set_layer() 中的拼写错误 - NameError: name ‘f’ is not defined

    • 已修复 2548: 调用 fitz.Page.get_text_blocks 方法时,Fitz 在某些 PDF 上冻结。

    • 已修复 2596: save(garbage=3) 导致 get_pixmap() 出现副作用并损坏

    • 已修复 2635: “clean=True” 使对象在 PDF 中不可见

    • 已修复 2637: Page.insert_textbox 错误处理了开始新行的最后一个单词

    • 已修复 2699: 提取表格下方的段落

    • 已修复 2703: 边界情况(“page.get_texttrace()”)中字体大小计算错误

    • 已修复 2710: page.rect 和文本位置错误 / 与旧版本不同

    • 已修复 2723: Python 3.12 的 wheel 何时可用?

    • 已修复 2730: 持久的 get_text() 格式

  • 其他

    • 使用 MuPDF-1.23.4。

    • 修复系统安装时的优化标志。

    • 修复了表格识别时 clip 参数不生效的问题

    • 支持 Pillow 模式“RGBa”

    • 支持额外的单词分隔符

    • 支持检查有效的 PDF 名称对象

版本 1.23.4 (2023-09-26) 中的变更

  • 改进了构建说明。

  • 修复了 rebased 实现中的 Tesseract 问题。

  • 改进了使用系统 MuPDF 进行构建/安装。

  • 修复了 Pyodide 构建。

  • 修复了 rebased bug in _insert_image()。

  • 错误修复

    • 已修复 2556: 调用 get_cdrawings(extended=True) 时发生段错误

    • 已修复 2637: Page.insert_textbox 错误处理了开始新行的最后一个单词

    • 已修复 2683: Windows sdist 构建失败 - 路径未加引号且使用了 UNIX which 命令

    • 已修复 2691: rebased fitz_new 版本中 Page.get_textpage_ocr() 的 bug

    • 已修复 2692: rebased fitz_new 版本中 Page.get_pixmap(clip=Rect()) 的 bug

版本 1.23.3 (2023-08-31) 中的变更

  • 修复了 Tesseract OCR 的使用问题。

版本 1.23.2 (2023-08-28) 中的变更

  • 已修复 #2613: 1.23.0 版本不兼容 MacOS-arm64

版本 1.23.1 (2023-08-24) 中的变更

  • 更新了 README 和包摘要描述。

  • 修复了在某些 Python-3.10(可能更早版本)的 Linux 安装上,import fitz 失败并出现 ImportError: libcrypt.so.2: cannot open shared object file: No such file or directory 的问题。

  • 修复了 MacOS arm64 上的 incompatible architecture 错误。

  • 修复了 Poetry 关于 wheel 的 RECORD 文件中缺少条目的安装警告。

版本 1.23.0 (2023-08-22) 中的变更

  • Page 对象添加了方法 find_tables()

    这允许在任何支持的文档页面上定位表格,并按单元格提取表格内容。

  • PyMuPDF 的新“rebased”实现。

    rebased 实现作为 Python 模块 fitz_new 可用。可以通过 import fitz_new as fitz 将其用作直接替代品。

  • 与 Python 无关的 MuPDF 库现在位于第二个名为 PyMuPDFb 的 wheel 中,pip 将自动安装。

    这是为了节省 pypi.org 上的空间 - 完整版本只需为每个操作系统提供一个 PyMuPDFb wheel。

  • 错误修复

    • 已修复 #2542: fitz.utils.scrub AttributeError Annot object has no attribute fileUpd inside

    • 已修复 #2533: get_texttrace 返回了不正确的字符 bbox

    • 已修复 #2537: 设置分组单选按钮时验证抛出 RuntimeError: path to ‘V’ has indirects

  • 其他变更

    • 放弃了对 Python-3.7 的支持。

    • 修复了错误的页面 / 注解 /Contents 清理。

      我们需要将 pdf_filter_options::no_update 设置为零。

    • 添加了新函数 get_tessdata()。

    • 处理 /Annot 数组问题。

      以前在方法 Document.insert_pdf 中复制页面注解时,我们没有检查 /Annots 数组成员的有效性。对于有缺陷的成员(如 null 或非字典项),这可能导致不必要的异常。此修复实现了更多检查并跳过此类数组项。

    • 额外的注解类型检查。

      以前在获取/设置注解边框属性时,我们没有检查注解类型。现在根据 MuPDF 进行了检查。

    • 提高容错性。

      避免在源页面包含 /Annots 数组中的无效项时,在方法 insert_pdf() 中出现异常。

    • 对于适用的注解,返回空边界字典。

      以前即使对于不适用的注解类型,我们也会返回非空边界字典。现在在这种情况下返回空字典 {}。这需要在注解 .update() 方法中进行一些相应的更改,特别是对于虚线和边框宽度。

    • 限制 set_rect 于适用的注解类型。

      我们以前对 set_rect() 方法未充分排除不适用的注解类型。现在让 MuPDF 捕获不受支持的注解,并在这些情况下返回 False

    • page.get_texttrace() 中错误的字体大小计算。

      计算字体大小时,我们使用了最终文本转换矩阵,而应该使用 span->trm。这里进行了修正。

    • 更新以适应最新 MuPDF 的变化。

      pdf_lookup_anchor() 已被移除。

    • 更新 fill_textbox 以更好地遵循 rect.width

      fill_textbox 中的函数 norm_words 在其最后一个循环中存在一个 bug,它在实际测量 n 个字符的宽度时附加了 n+1 个字符。这导致 fill_texbox 中当你尝试写入一个主要由“宽”字母(M,m, W, w…)组成的单词时出现 bug,导致写入的文本超出给定的 rect。

      修复方法只是将 n+1 替换为 n。

    • 为 widget 添加 script_focusscript_blur 选项。

版本 1.22.5 (2023-06-21) 中的变更

  • 此版本使用 MuPDF-1.22.2

  • 错误修复

    • 已修复 #2365: 类型为“fs”的绘图的字典值不正确。

    • 已修复 #2391: 当我们多次更新同一复选框时,复选框会自动取消选中。

    • 已修复 #2400: 同一行文本内的间隙未用空格填充。

    • 已修复 #2404: 在 PDF 中对图像进行黑线处理不会移除 1.22.X 版本中的底层内容。

    • 已修复 #2430: 错误地减少了 Py_None 的引用计数。

    • 已修复 #2450: 对于 1.22.* 版本中带有填充和描边操作的路径,填充颜色和填充不透明度为空。

    • 已修复 #2462: 在 “get_drawing(extended=True )” 处出错

    • 已修复 #2468: 尝试获取绘图时出现解码错误

    • 已修复 #2710: page.rect 和文本位置错误 / 与旧版本不同

    • 已修复 #2723: Python 3.12 的 wheel 何时可用?

  • 新特性

    • 变更 注解现在支持“云状”边框。Annot.border 属性新增了项目 clouds,并且方法 Annot.set_border() 支持相应的 clouds 参数。

    • 变更 同一单选按钮组中的单选按钮 widget 现在如果以标准方式定义,将得到一致更新。

    • 新增 支持 PDF 可选内容中的 /Locked 键。此数组位于 catalog entry /OCProperties 内,现在可以提取和设置。

    • 新增 支持 OCR 函数中的新参数 tessdata。新函数 get_tessdata() 如果安装了 Tesseract,可以定位语言支持文件夹。

版本 1.22.3 (2023-05-10) 中的变更

  • 此版本使用 MuPDF-1.22.0

  • 错误修复

    • 已修复 #2333: 无法在表单中设置任何单选按钮组

版本 1.22.2 (2023-04-26) 中的变更

  • 此版本使用 MuPDF-1.22.0

  • 错误修复

    • 已修复 #2369: 较新版本中的图像提取错误

版本 1.22.1 (2023-04-18) 中的变更

  • 此版本使用 MuPDF-1.22.0

  • 错误修复

    • 已修复 #2345: 关闭 utils.py 中的 print 语句

    • 已修复 #2348: extract_image 返回扩展名“flate”而不是“png”

    • 已修复 #2350: 无法通过添加标志 PDF_FIELD_IS_READ_ONLY 使 widget(复选框)只读

    • 已修复 #2355: 1.22.0 使用 get_toc 时出错 (AttributeError: ‘SwigPyObject’ object has no attribute)

版本 1.22.0 (2023-04-14) 中的变更

  • 此版本使用 MuPDF-1.22.0

  • 行为变更

    • 文本提取现在包含与剪裁矩形重叠的字形;以前只有当它们完全包含在剪裁矩形内时才会被包含。

  • 错误修复

    • 已修复 #1763: 交互式(智能表单) PDF 表单计算在 pymupdf 中不起作用

    • 已修复 #1995: RuntimeError: 尝试处理长页 PDF 文件时图像过高

    • 已修复 #2093: 应用密文删除后 PDF 中的图像颜色发生变化

    • 已修复 #2108: 密文删除移除的文本超出预期

    • 已修复 #2141: 尝试获取块时读取 JPX 头部失败

    • 已修复 #2144: 替换图像抛出错误

    • 已修复 #2146: “None”对象的引用计数处理错误

    • 已修复 #2161: 支持直接将图像作为页面添加

    • 已修复 #2168: page.add_highlight_annot(start=pointa, stop=pointb) 不工作

    • 已修复 #2173: Pixmap 中使用的 Colorspace 双重释放

    • 已修复 #2179: pixmap.tint_with() 文档不正确

    • 已修复 #2208: Pushbutton widget 显示为复选框

    • 已修复 #2210: apply_redactions() 在密文删除后将 PDF 文本向右移动

    • 已修复 #2220: Page.delete_image() | 对象没有属性 is_image

    • 已修复 #2228: 打开某些 PDF 文件花费太多时间

    • 已修复 #2238: Bug - 在最新版本 1.21.1 中无法从文件提取数据

    • 已修复 #2242: 如果在 Story.element_positions() 中回调函数原型错误,Python 会静默退出

    • 已修复 #2246: TextWriter 在错误位置写入文本

    • 已修复 #2248: 密文删除内容后,剩余文本的位置发生变化

    • 已修复 #2250: 文档:page.rst 中的链接不清晰或损坏

    • 已修复 #2251: mupdf_display_errors 在加载损坏图像时对 Pixmap 不适用

    • 已修复 #2270: Annot.get_text(“words”) - 不返回第一行的单词

    • 已修复 #2275: insert_image:文档说明旋转是逆时针的

    • 已修复 #2278: 无法通过添加标志 PDF_FIELD_IS_READ_ONLY 使 widget(复选框)只读

    • 已修复 #2290: Page.get_text(“dict”) 和 Fitz.get_page_images() 返回不同的图像格式/数据

    • 已修复 #2293: 在我的机器上从 sdist 安装时 68 个测试失败

    • 已修复 #2300: 树(parents)中递归过多,导致程序终止

    • 已修复 #2322: add_highlight_annot 使用 clip 在 PDF 中生成“A Number is Out of Range”错误

  • 其他

    • 为选定的按钮表单字段的底层注解对象添加键“/AS (Yes)”。

    • 移除未使用的 Document 方法 has_xref_streams()has_old_style_xrefs(),因为 MuPDF 中相应的等效方法已被移除。

    • 添加新的 Document 方法和属性用于获取/设置 /PageMode/PageLayout/MarkInfo

    • 新的 Document 属性 version_count,包含增量保存次数加一。

    • 新的 Document 属性 is_fast_webaccess,指示文档是否已线性化。

    • DocumentWriter 现在是一个上下文管理器。

    • 添加对 Pixmap JPEG 输出的支持。

    • 添加对绘制圆角矩形的支持。

    • get_drawings():添加可选参数 extended

    • 修复了跟踪设备状态初始化不正确的问题;从 fitz.Page.get_texttrace() 等方法返回的数据可能会略有改变,例如 linewidth 值。

    • 如果在当前目录包含无效的 fitz/ 目录时看起来正在使用 PyMuPDF,则向 stderr 输出警告,因为这会破坏 fitz 模块的导入。例如,当当前目录是 PyMuPDF 检出目录时,尝试使用 fitz 就会发生这种情况。

  • 文档

    • 总体重构

      • 引入了新的主页和新的目录。

      • 结构更新以包含新的“关于”部分。

      • 比较与性能图表。

      • 在附录中包含性能方法论。

      • 更新 conf.py 以将单反引号理解为代码。

      • 将双反引号转换为单反引号。

      • 移除冗余文件。

    • 改进 insert_file() 文档。

    • get_bboxlog():为 get_bboxlog() 添加可选参数 layers

    • Page.get_texttrace():添加新的字典键 layer,表示可选内容组的名称。

    • 在安装文档中提及使用 Python venv。

    • 在版本 1.21.1 的变更日志中添加了对 #2057 的缺失修复。

    • 修复了指向 PyMuPDF-Utilities 仓库脚本的许多链接。

    • 避免 changes.txtdocs/changes.rst 的重复。

  • 构建

    • 添加 pyproject.toml 文件以改进使用 pip 等工具的构建。

版本 1.21.1 (2022-12-13) 中的变更

  • 此版本使用 MuPDF-1.21.1

  • 错误修复

    • 已修复 #2110: 如果完全嵌入的字体占用多个对象,则仅部分提取。

    • 已修复 #2094: 矩形检测逻辑

    • 已修复 #2088: toc 中命名链接未设置目标点

    • 已修复 #2087: 未提取带有 Filter “[/FlateDecode/JPXDecode]” 的图像

    • 已修复 #2086: Document.save() 的 owner_pw 和 user_pw 存在缓冲区溢出错误

    • 已修复 #2076: fitz.py 中出现段错误

    • 已修复 #2057: Document.save 的 garbage 参数在 PyMuPDF 1.21.0 中不起作用

    • 已修复 #2051: 缺失 DPI 参数

    • 已修复 #2048: 最新版本 1.21.0 中 TextPage 和 bbox 的大小无效

    • 已修复 #2045: SystemError: <built-in function Page_get_texttrace> 返回的结果设置了错误标志

    • 已修复 #2039: 1.21.0 无法针对系统 libmupdf 构建

    • 已修复 #2036: Archive::Archive 定义了两次

  • 其他

    • 吞掉链接 URI 字符串中的 “&zoom=nan”。

    • 添加新的 Page 工具方法 Page.replace_image()Page.delete_image()

  • 文档

    • #2040: 在 tests/README.md 中添加了关于非默认构建 MuPDF 导致的测试失败的说明。

    • #2037: 在 docs/installation.rst 中,提及与 Windows 上 chocolatey.org 的不兼容性。

    • #2061: 修复了 Annot.file_info 的描述。

    • #2065: 展示如何插入内部 PDF 链接。

    • 改进了不使用 sdist 从源代码构建的描述。

    • 添加了关于运行测试的信息。

    • #2084: 修复了指向 PyMuPDF-Utilities 的损坏链接。

版本 1.21.0 (2022-11-8) 中的变更

  • 此版本使用 MuPDF-1.21.0

  • 新功能:Stories。

  • 添加了 Python-3.11 的 wheel。

  • 错误修复

    • 已修复 #1701: 自定义图像插入中断。

    • 已修复 #1854: Document.delete_pages() 拒绝关键字参数。

    • 已修复 #1868: 在 page.apply_redactions() 处发生访问冲突错误。

    • 已修复 #1909: 添加 fontname="Helvetica" 的文本可能会静默失败。

    • 已修复 draw_rect(): 如果未指定颜色,则不尊重宽度。

    • 已修复 subset_fonts(): 使其能够静默标准输出。

    • 已修复 #1936: 矩形检测可能不正确,产生错误输出。

    • 已修复 #1945: 使用 clean=True 保存时发生段错误。

    • 已修复 pdfocr_save() 严重崩溃。

    • 已修复 #1971: 使用 get_drawings() 时发生段错误。

    • 已修复 #1946: get_text() 文档中 block_noblock_type 位置互换。

    • 已修复 #2013: AttributeError: 在删除 widget 时,‘Widget’ 对象没有属性 ‘_annot’。

  • 核心代码的其他更改

    • 修复了各种编译器警告和一个序列点错误。

    • 添加了对 Memento 构建的支持。

    • 修复了 Memento 在测试套件中检测到的内存泄漏。

    • 修复了 set_name() 和 set_rect() 中异常的处理。

    • 允许使用最新的 MuPDF 构建,以便定期测试 PyMuPDF master 分支。

    • 处理在为某些 Annot 类型设置 rect 时出现的新 MuPDF 异常。

    • 减少了 MuPDF 的 config.h 和 PyMuPDF 的 _config.h 之间的外观差异。

    • 处理 MuPDF API 的各种更改。

  • 其他

    • 修复了文档中的各种损坏链接和拼写错误。

    • 提及在 MacOS 上为 #875 安装 swig-python

    • 添加了 macos-arm64 的(未经测试的)wheel。

版本 1.20.2 中的变更

  • 此版本使用 MuPDF-1.20.3

  • 已修复 #1787。修复了 Unix 系统上的链接问题。

  • 已修复 #1824。应用密文删除与透明图像重叠时发生段错误。(在 MuPDF-1.20.3 中修复。)

  • sphinx 生成文档的改进

    • 改进了 docs/installation.rst 中关于从源代码构建的信息。

    • 澄清了 docs/tools.rst 中内存分配设置 JM_MEMORY`

    • 修复了 docs/app3.rst 中指向 PDF 参考手册的链接。

    • 修复了在 OpenBSD 上构建 html 文档的问题。

    • 将旧的 docs/faq.rst 移动到单独的 docs/recipes-* 文件中。

  • 移除了部分未使用文件和目录

    • installation/

    • docs/wheelnames.txt

版本 1.20.1 中的变更

  • 已修复 #1724。修复了在 FreeBSD 上构建的问题。

  • 已修复 #1771。在 1.20.0 中引入的 linkDest() 调用 re.match() 有误。

  • 已修复 #1751get_drawings()get_cdrawings() 以前总是返回 closePath=False

  • 已修复 #1645。FreeText 注解的默认文本颜色现在是黑色。

  • sphinx 生成文档的改进

    • 使用 readthedocs 主题并增强。

    • .txt 文件重命名为使用 .rst 后缀。


版本 1.20.0 中的变更

此版本使用 MuPDF-1.20.0,发布于 2022-06-15。

  • 处理新的 MuPDF 链接 URI 格式,从 #<int>,<int>,<int> 变更为 #page=<int>&zoom=<float>,<float>,<float>

  • tests/test_insertpdf.py 中,使用新的参考输出 joined-1.20.pdf。我们还检查新的输出值与旧值大致相同。

  • 已修复 #1738pdf_graft_map 内存泄漏。同时修复了由此暴露的 SEGV 问题,原因是底层 fz_document 释放不正确。

  • 已修复 #1733。修复了 Annotation.get_pixmap() 的所有权问题。

构建/发布流程变更

  • 如果 pip 因为没有可用的合适 wheel 而从源代码构建,我们不再要求预先安装 MuPDF。相反,所需的 MuPDF 源代码嵌入在 sdist 中并自动构建到 PyMuPDF 中。

  • 修改 setup.py 以根据需要下载所需的 MuPDF 版本。详细信息请参阅 setup.py 开头的注释。

  • 添加 .github/workflows/build_wheels.yml 文件以控制在 Github 上构建 wheel。


版本 1.19.6 中的变更

  • 已修复 #1620Page.get_textpage() 创建的 TextPage 现在将正确释放(移除了内存泄漏)。

  • 已修复 #1601。文档打开错误现在应该更简洁易懂。在此过程中,添加了两个 PyMuPDF 特定的 Python 异常:

    • EmptyFileError – 尝试从空文件或零长度内存创建 Document (fitz.open()) 时引发。

    • FileDataError – 当 MuPDF 遇到不可恢复的文档结构问题时引发。

  • 新增 Page.load_widget(),给定 PDF 字段的 xref。

  • 新增 字典 pdfcolor,它提供了定义为 PDF 颜色值的约 500 种颜色,以小写颜色名称作为键。

  • 新增Quad 类添加了代数功能。这些对象现在也可以相互加减,并可以与数字和矩阵相乘。

  • 新增 定义默认文本提取标志的新常量,以便更方便地处理。它们的命名约定类似于 page.get_text(“words”) 的 TEXTFLAGS_WORDS。请参阅 文本提取标志默认值

  • 变更 Page.annots()Page.widgets(),使其检测并防止在迭代器循环内通过 Document.reload_page()(非法地)重新加载页面。这样做会导致解释器崩溃。文档中提供了在正确设计的循环内进行注解和 widget 批量更新的干净方法。

  • 变更 几个内部工具函数,使其成为独立的(“SWIG inline”),而不是 Tools 类的一部分。这其中包括提高了几何对象创建的性能。

  • 变更 Document.update_stream(),使其始终接受流更新 - 无论 xref 后面的字典对象是否已经是流。因此,以前的 new 参数现在被忽略,并将在 v1.20.0 中移除。


版本 1.19.5 中的变更

  • 已修复 #1518。一个有限的“修复”:在某些情况下,矩形和四边形未正确编码,无法支持 Shape 的重新绘制。

  • 已修复 #1521。这与问题 #1510 背后的根本原因相同。

  • 已修复 #1513。某些可选内容函数不支持非 ASCII 字符。

  • 已修复 #1510。支持更多软遮罩图像子类型。

  • 已修复 #1507。针对大纲链中是 "null" 对象的项进行免疫处理。

  • 已修复 重新打开的 #1417。(“打开文件过多”)。这是由于对 MuPDF 的 fz_drop_document() 调用不足造成的。这也修复了 #1550

  • 已修复 几个未记录的问题,这些问题与错误设置文本跨度原点 point_like 有关。

  • 已修复 在文本翻转(而不是仅旋转)时,方法 Page.get_texttrace() 计算字符 bbox 的未记录错误。

  • 新增image_properties() 返回的字典中添加了项:orientationtransform 报告图像的自然方向(EXIF 数据)。

  • 新增 方法 Document.xref_copy()。它将使给定的目标 PDF 对象成为源对象的精确副本。


版本 1.19.4 中的变更

  • 已修复 #1505。针对循环大纲项进行免疫处理。

  • 已修复 #1484。现在在所有情况下都返回正确的 CropBox 坐标。

  • 已修复 #1479

  • 已修复 #1474。TextPage 对象现在再次被正确删除。

  • 新增 用于 PDF /ArtBox/BleedBox/TrimBoxPage 方法和属性。

  • 新增 全局属性 TESSDATA_PREFIX,用于轻松检查 OCR 支持。

  • 变更 Document.xref_set_key(),以便如果字典键设置为值 "null",则将物理删除该键。

  • 变更 Document.extract_font(),使其可选地返回一个字典(而不是一个元组)。


版本 1.19.3 中的变更

此补丁版本针对 Pixmap 实现了一些微小改进,同时也包含一些重要修复。


版本 1.19.2 中的变更

此补丁版本针对 Page.get_drawings() 实现了一些微小改进,同时也包含一些重要修复。

  • 已修复 #1388。修复了插入或更新注解时间歇性内存损坏的问题。

  • 已修复 #1375Page.get_text() 的“words”和“dict”选项返回的行号不一致的问题已得到纠正。

  • 已修复 #1364recover_span_quad() 中检查是否为 "rawdict" 跨度现在工作正常。

  • 已修复 #1342。纠正了 Page.show_pdf_page() 中矩形无限性检查的问题。

  • 变更 Page.get_drawings()Page.get_cdrawings(),使其返回矩形覆盖区域方向的指示器。这实现了 #1355。此外,矩形和四边形的识别率也得到了显著提高。

  • 变更 所有文本搜索和提取方法,使其默认将新的 flags 选项 TEXT_MEDIABOX_CLIP 设置为 ON。该位导致自动抑制完全位于页面 mediabox 之外的所有字符(只要文档类型支持该概念)。这消除了使用 clip=page.rect 或类似方法省略可见区域之外文本的需要。

  • 新增 参数 "dpi"Page.get_pixmap()Annot.get_pixmap()。给定该参数时,参数 "matrix" 将被忽略,并创建一个具有所需每英寸点数的 Pixmap

  • 新增 属性 Pixmap.is_monochromePixmap.is_unicolor,允许快速检查 pixmap 属性。解决了 #1397

  • 新增 方法 Pixmap.color_count(),用于确定 pixmap 中的独特颜色。

  • 新增 布尔参数 "compress" 到 PDF 文档方法 Document.update_stream()。解决了 / 启用了 #1408 的解决方案。


版本 1.19.1 中的变更

这是第一个支持 MuPDF v1.19.0 的补丁版本。除了一处错误修复外,它还包括对 OCR 支持的重要改进以及将提取的文本按标准阅读顺序“从左上到右下”排序的选项。


版本 1.19.0 中的变更

这是支持 MuPDF 1.19.* 的第一个版本,发布于 2021-10-05。与之前的 1.18.* 版本相比,它引入了许多新特性。

PyMuPDF 现在已集成了 Tesseract OCR 支持,这在 MuPDF v1.18.0 中已经存在。

  • 支持的图像可以通过其 Pixmap 进行 OCR,生成带有文本层的单页 PDF。

  • 所有支持的文档页面(即不限于 PDF)都可以使用专用的文本提取方法进行 OCR。结果是标准文本和 OCR 文本的混合(取决于页面哪个部分被认为需要 OCR),可以进行无限制的搜索和提取。

  • 所有这一切都需要独立安装 Tesseract。MuPDF 实际上(仅)需要 Tesseract 的 "tessdata" 文件夹位置,其中存储了其语言支持数据。该位置必须作为环境变量 TESSDATA_PREFIX 可用。

MuPDF 的一个新特性是 **PDF 更新日志记录(journalling)**,PyMuPDF 版本也支持此功能。更改可以记录、回滚或重放,从而实现对 PDF 文档完整性的全新级别的控制——类似于现代数据库系统中存在的功能。

第三个特性(与新的 MuPDF 版本无关)包括检测页面对象何时相互覆盖或隐藏的能力。例如,现在可以查看文本是否被绘图或图像覆盖。

  • 变更 重要几何概念的术语和含义:矩形现在被描述为 *有限*、*有效* 或 *空*,而这些术语的定义也发生了变化。具体来说,矩形现在被认为是“开放”的:并非所有角和边都被视为矩形的一部分。详细信息请阅读 Rect 部分。

  • 新增Document.save() / Document.tobytes() 方法添加了新参数 "no_new_id"。使用它可以抑制更新文档 /ID 的第二个项,PDF 中该项指示原始文件已被更新。如果 PDF 还没有 /ID,则也不会创建新的。

  • 新增 用于 PDF 更新的 **日志记录(journalling)工具**。这允许记录更改、撤销或重做更改,或保存日志供以后使用。请参阅 Document.journal_enable() 等方法。

  • 新增 新的 Pixmap 方法 Pixmap.pdfocr_save()Pixmap.pdfocr_tobytes(),它们生成一个包含 pixmap 作为 PNG 图像和 OCR 文本层的单页 PDF。

  • 新增 Page.get_textpage_ocr(),它对页面执行光学字符识别,然后提取结果并将其与“正常”页面内容一起存储在 TextPage 中。在后续的文本提取和文本搜索中使用或重用此对象,以避免重复工作。现有的文本搜索和文本提取方法已扩展以支持单独创建的 textpage – 请参阅下一项。

  • 新增 为文本提取和文本搜索方法添加了新参数 textpage。这允许重用先前创建的 TextPage,从而显著提高了运行时性能——这对于新的 OCR 功能尤其重要。但“正常”文本提取也肯定能从中受益。

  • 新增 Page.get_texttrace(),这是一个提供底层文本字符属性的技术方法。之前它是一个私有方法,但作者认为它现在已经足够成熟,可以正式提供。它特别包含一个“序列号”,指示绘制文本的页面外观构建操作。

  • 新增 Page.get_bboxlog(),它提供了文本、图像或绘图等页面对象的矩形列表。其重要性在于其顺序:与索引较低区域相交的矩形会覆盖或隐藏它们。

  • 变更 方法 Page.get_drawings()Page.get_cdrawings(),使其包含一个指示创建绘图的页面外观构建操作的“序列号”。

  • 已修复 #1311。组合框中的字段值现在应该得到正确处理。

  • 已修复 #1290。错误是由于不正确的矩形空检查引起的,此版本新的几何逻辑修复了该问题。

  • 已修复 #1286。密文删除注解的文本对齐现在再次正常工作。

  • 已修复 #1287。非 Windows 系统在应用某些密文删除时出现的无限循环问题已得到解决。

  • 已修复 #1284。在某些情况下应用密文删除后文本布局被破坏的问题已得到解决。


版本 1.18.18 / 1.18.19 中的变更

  • 已修复 问题 #1266。在重要情况下设置 Pixmap.samples 失败的问题已在新版本 1.18.19 中热修复。

  • 已修复 问题 #1257。现在可以从 PDF 字段中移除只读标志。

  • 已修复 问题 #1252。现在可以正确指定 PDF 链接注解的 zoom 值。

  • 已修复 问题 #1244。现在可以正确计算 Page.get_image__bbox() 中的变换矩阵。

  • 已修复 问题 #1241。防止 Page.get_textbox() 返回伪影字符,这在某些情况下会发生。

  • 已修复 问题 #1234。避免在角落案例中创建无限矩形 – Page.get_drawings()Page.get_cdrawings()

  • 新增 将测试数据和测试脚本添加到 PyPI 源代码分发包中。


版本 1.18.17 中的变更

此版本的重点是选定函数的重大性能改进。

  • 已修复 问题 #1199。在 Document.get_page_images() 等方法中使用不存在的页码将不再导致段错误。

  • 变更 Page.get_drawings(),使其现在区分“描边”、“填充”和组合路径。现在支持包含多个矩形(即“re”项)的路径。提取“剪裁”路径现在作为一项选项可用。

  • 新增 Page.get_cdrawings(),它是 Page.get_drawings() 的性能优化版本。

  • 新增 Pixmap.samples_mv,它是 pixmap 像素区域的 memoryview。它不进行复制,因此总是访问该区域的当前状态。

  • 新增 Pixmap.samples_ptr,它是指向 pixmap 像素区域的 Python“指针”。允许更快地创建 Qt 图像(速度提升 800 倍以上)。


版本 1.18.16 中的变更

  • 已修复 问题 #1184。PDF 中现有的 PDF widget 字体现在可以接受(即不再强制更改为 Base-14 字体)。

  • 已修复 问题 #1154。指定 clip 时,文本搜索结果现在应该正确。

  • 已修复 问题 #1152

  • 已修复 问题 #1146

  • 新增 Link.flagsLink.set_flags()Link 类。实现了增强请求 #1187

  • 新增 模拟 TextWriter.fill_textbox() 输出的选项,用于预测给定文本在文本框中将占据的行数。

  • 新增 文本输出支持作为子命令 gettextfitz CLI 模块。最重要的是,现在支持原始物理文本布局的再现。


版本 1.18.15 中的变更

  • 已修复 问题 #1088。移除注解的填充颜色现在应该再次以两种方式工作:使用 Annot.update() 中的 fill_color=[] 参数以及 Annot.set_colors() 中的 fill=[] 参数。

  • 已修复 问题 #1081Document.subset_fonts(): 修复了导致某些字体字符宽度错误的问题。

  • 已修复 问题 #1078Page.get_text() 和其他与文本提取相关的方法:更改了 TextPage flags 参数的默认值。现在保留所有空格和 ligatures

  • 已修复 问题 #1085。现在正确定义了 fitz.detTextlength 的旧的 *snake_cased* 别名。

  • 变更 Document.subset_fonts(),它现在将使用适当的六个大写字母标签正确地为字体子集添加前缀,符合 PDF 规范。

  • 新增 新方法 Widget.button_states(),它返回按钮类型字段在设置为“开”或“关”时可能具有的值。

  • 新增FontTextWriter 类添加了对带有 **小型大写字母(Small Capital)** 的文本的支持。这体现在它们的各种方法中新增了一个布尔参数 small_caps


版本 1.18.14 中的变更

  • 完成 为方法和属性实现了新的、“snake_cased”名称,这些名称以前是“camelCased”且在许多方面都不方便。本文档末尾有一个 已弃用名称 部分,其中包含更多背景信息和旧名称到新名称的映射。

  • 已修复 问题 #1053Page.insert_image(): 如果给定,在哈希计算中包含图像遮罩。

  • 已修复 问题 #1043。将 Pixmap.getPNGdata 添加到 Pixmap.tobytes() 的别名中。

  • 已修复 计算 Page.get_drawings() 返回的绘制路径包围矩形时的内部错误。

  • 修复了通过 TextWriter.fill_textbox() 输出文本时偶尔导致循环的内部错误。

  • 新增Font.char_lengths() 方法,该方法返回字符串的字符宽度元组。

  • 新增了在 Document.delete_pages() 中指定页面的更多方式。现在可以指定序列(列表、元组或范围),也可以使用 Python del 语句。在使用 del 语句的情况下,也接受 Python slices

  • 更改Document.del_toc_item() 方法,该方法用于禁用目录(TOC)中的单个项目:以前,它会移除标题文本。现在,支持此功能的查看器会显示整个项目为灰色。


版本 1.18.13 的更改


版本 1.18.11 / 1.18.12 的更改


版本 1.18.10 的更改


版本 1.18.9 的更改

  • 修复了问题 #888。移除了关于 PyMuPDF 许可证的模糊陈述,现在明确声明许可证为 GNU AGPL V3。

  • 修复了问题 #895

  • 修复了问题 #896。自 v1.17.6 起,PyMuPDF 抑制了字体子集标签,并在文本提取输出“dict”/“json”/“rawdict”/“rawjson”中仅报告基础字体名称。现在可以通过新的全局参数 Tools.set_subset_fontnames() 请求旧的行为。

  • 修复了问题 #885。Pixmap 创建现在也支持以 pathlib.Paths 形式给定的文件名。

  • 更改Document.subset_fonts() 方法:文本不再重写,因此应该保留其所有原始属性——例如隐藏或受可选内容机制控制。

  • 更改TextWriter 输出,使其也接受从右到左模式的文本(阿拉伯语、希伯来语):TextWriter.fill_textbox()TextWriter.append()。这些方法现在接受一个新的布尔参数 right_to_left,默认为 False。实现了问题 #897

  • 更改TextWriter.fill_textbox() 方法,使其返回未放入给定矩形中的所有文本行。还将 warn 参数的默认值更改为在溢出情况下不再打印警告消息。

  • 新增了一个实用函数 recover_quad(),用于计算 span 的四边形(quadrilateral)。此函数可用于正确标记使用 Page.get_text() 的“dict”或“rawdict”选项提取的文本。


版本 1.18.8 的更改

这仅是一个错误修复版本。由于潜在广泛使用的函数,我们提前发布。

  • 修复了问题 #881。修复了在从文件或内存插入图片时,Page.insert_image() 方法中的内存泄漏问题。

  • 修复了问题 #878pathlib.Path 对象现在应该能正确处理文件路径层次结构。


版本 1.18.7 的更改

我们继续进行将方法和属性从 “mixedCase” 重命名为 “snake_case” 的过程。文档通常只提及新名称,但旧的、已弃用的名称仍可用一段时间。


版本 1.18.6 的更改

  • 修复了问题 #812

  • 修复了问题 #793。之前无效的文档元数据有时会阻止打开某些文档。此错误已移除。

  • 修复了问题 #792。如果使用默认的 clip=None,文本搜索和文本提取将完全不进行矩形包含检查。

  • 修复了问题 #785

  • 修复了问题 #780。更正了一个参数检查错误。

  • 修复了问题 #779。修复了拼写错误。

  • 新增了一个选项,用于设置文本框的所需行高。实现了问题 #804

  • 更改了文本位置检索,以更好地应对 Tesseract 的无字形字体。实现了问题 #803

  • 新增了一个选项,用于选择新批注、字段和链接的前缀,以提供唯一的批注 ID。实现了请求 #807

  • 新增了获取和设置 PDF 目录项的颜色和文本属性。实现了问题 #779

  • 新增了 PDF 页面标签处理功能:Page.get_label() 返回页面标签,Document.get_page_numbers() 返回具有指定标签的所有页码,以及 Document.set_page_labels() 添加或更新 PDF 的页面标签定义。

注意

此版本引入了 Python 类型提示。目标是为所有函数和方法的每个参数和返回值提供类型信息。这项工作仍在进行中,尽管大部分函数已经处理完毕。


版本 1.18.5 的更改

除了几处修复外,此版本还专注于几项次要但重要的功能改进。其中包括更精确地计算适当的行高和插入点,以便写入/插入文本。与使用与字体无关的常量不同,这些值现在取自字体的属性。

另请注意,这是第一个不再提供 Python 3.6 之前版本预生成 wheel 包的版本。PIP 也将在 2020 年底停止对这些版本的支持。

  • 修复了问题 #771。通过使用“small glyph heights”选项,可以提取整个页面文本。

  • 修复了问题 #768

  • 修复了问题 #750

  • 修复了问题 #739。 “dict”、“rawdict”以及相应的 JSON 输出变体现在有两个新的 span 键:“ascender”和“descender”。这些浮点数表示特殊的字体属性,可用于计算刚好是字体大小高度的 span 或字符的 bboxes(与默认行高不同)。示例算法显示在“Span Dictionary”部分 此处。还改进了在某些字体中遇到的错误指定的 ascender / descender 值的检测和修正。

  • 新增了一个新的实验性方法 Tools.set_small_glyph_heights() – 也是为了响应问题 #739。此方法设置或取消设置一个全局参数,使其始终以字体大小高度计算 bboxes。如果设置为“on”,文本搜索和所有文本提取都将返回高度较小的矩形、bboxes 和 quads。

  • 修复了问题 #728

  • 更改了“Polyline”批注的填充颜色逻辑:此参数现在仅与线条末端符号有关——批注本身不再能有填充颜色。也解决了问题 #727

  • 更改Page.getImageBbox() 方法,使其在图片包含在 XObject 中时也能计算 bbox。

  • 更改Shape.insertTextbox()Page.insertTextbox()TextWriter.fillTextbox() 方法,使其在计算行高和插入点时尊重字体的“ascender”/“descender”属性。这应该不再导致多行输出时的线条重叠。这些方法以前忽略字体特定性而使用常量值。


版本 1.18.4 的更改

此版本增加了一些功能以支持 PDF 可选内容。其中包括 OCMD(Optional Content Membership Dictionaries),具有完整的“可见性表达式”(PDF 键 /VE)范围,文本插入(包括 TextWriter 类)和绘图。

  • 修复了问题 #727。FreeText 批注现在在 fill_color=None 时支持无色矩形。

  • 修复了问题 #726。现在为 HTML / XML Page.getText() 输出处理 UTF-8 编码错误。

  • 修复了问题 #724。空值不再存储在 PDF /Info 元数据字典中。

  • 新增了新方法 Document.set_oc()Document.get_oc(),用于为现有图片和表单 XObject 设置或获取可选内容引用。这些方法类似于 Annot 的同名方法。

  • 新增Document.set_ocmd()Document.get_ocmd() 用于处理 OCMD。

  • 新增了对文本插入和绘图的可选内容支持。

  • 新增了新方法 Page.deleteWidget(),用于从页面删除表单字段。这类似于删除批注。

  • 新增了对 Popup 批注的支持。这包括定义 Popup 矩形以及设置 Popup 的打开或关闭状态。相关方法/属性包括 Annot.set_popup()Annot.set_open()Annot.has_popupAnnot.is_openAnnot.popup_rectAnnot.popup_xref

其他变更

  • PyMuPDF 中方法和属性的命名远未令人满意:我们到处都有 CamelCasesmixedCaseslower_case_with_underscores。以 Annot 作为第一个候选,我们已经开始逐步清理这项工作,将方法和属性转换为 lower case with underscores,同时保持常量为 UPPERCASE。

    • 旧名称仍将保留,以防止代码中断,但文档中将不再提及它们。

    • 所有类的新方法和属性将按照新标准命名。


版本 1.18.3 的更改

作为一个主要的新功能,此版本引入了对 PDF 可选内容概念的支持。

  • 修复了问题 #714

  • 修复了问题 #711

  • 修复了问题 #707:如果提供了 PDF 用户密码,但未提供或不存在所有者密码,则用户密码也用作所有者密码。

  • 修复Document.save()Document.write() 方法的 expanddeflate 参数。现在单个图片和字体压缩应该最终起作用了。解决了问题 #713

  • 新增了对 PDF 可选内容的支持。这包括几个新的 Document 方法,用于查询和设置可选内容状态,以及添加可选内容配置和组。此外,图片、表单 XObject 和批注现在可以绑定到可选内容规范。解决了问题 #709


版本 1.18.2 的更改

此版本包含了一些有趣的文本搜索改进:现在返回任意数量的搜索结果,并且移除了 hit_max 参数。新的 clip 参数此外允许限制搜索区域。搜索现在会检测行尾的连字符,并相应地找到带连字符的单词。

  • 修复了问题 #575:如果在文本搜索中使用 quads=False,则同一行上重叠的矩形会合并。在此之前,搜索字符串中属于不同“标记内容”项目的各个部分都会生成自己的矩形——就像它们出现在单独的行上一样。

  • 新增了属性 Document.isRepaired,如果 PDF 在打开时被修复,则此属性为 true。

  • 新增Document.setXmlMetadata() 方法,用于更新或创建 PDF XML 元数据。实现了问题 #691

  • 新增Document.getXmlMetadata() 方法,返回 PDF XML 元数据。

  • 更改了 PDF 文档的创建:它们现在总是会在文档 trailer 中包含一个 PDF 标识符(/ID 字段)。实现了问题 #691

  • 更改Page.searchFor() 方法:接受新的参数 clip,用于将搜索限制在此矩形内。相应地,TextPage.rect 属性现在受到 TextPage.search() 方法的尊重。

  • 更改Page.searchFor()TextPage.search() 方法中的参数 hit_max,此参数现在已过时:方法将返回所有匹配项。

  • 更改Page.getText() 方法中的字符选择标准:现在,如果字符的 bbox 完全包含在 clip 中,则该字符被视为 clip 的一部分。在此之前,非空交集就足够了。

  • 更改Document.scrub() 方法,以支持新的选项 redact_images。这解决了问题 #697


版本 1.18.1 的更改

  • 修复了问题 #692。PyMuPDF 现在可以检测并从 PDF 页面中更多的循环资源依赖项中恢复,并首次在 MuPDF 警告存储中报告它们。

  • 修复了问题 #686

  • 新增Shape 类的透明度选项:描边和填充颜色现在可以设置为某个透明度值。这意味着所有 Page 绘图方法、方法 Page.insertText()Page.insertTextbox()Shape.finish()Shape.insertText()Shape.insertTextbox() 都支持两个新参数:stroke_opacityfill_opacity

  • 新增Page.insertImage() 方法的新参数 mask,用于可选地提供外部图片遮罩。解决了问题 #685

  • 新增Annot.soundGet() 方法,用于提取音频批注的声音。


版本 1.18.0 的更改

这是第一个支持 MuPDF v1.18 的 PyMuPDF 版本。除了错误修复外,此版本的重点是扩展 PyMuPDF 自身的功能。后续的 PyMuPDF 补丁可能会解决 MuPDF 中的新功能。

  • 修复了问题 #519。此上游错误偶尔只发生在某些页面上,现在似乎已修复:在这些情况下,页面布局应该不再会被破坏。

  • 修复了问题 #675

    • 不成功的存储分配现在应该总是导致异常(规避了一个偶尔导致解释器崩溃的上游错误)。

    • Pixmap 大小现在基于 C 中的 size_t 而不是 int,即使对于非常大的 pixmap 也应该是正确的。

  • 修复了问题 #668。PDF 绘图插入的虚线规范现在应该正确反映 PDF 规范。

  • 修复了问题 #669。移除了 Page.insert_pdf() 方法中的一个主要的内存泄漏源。

  • 新增了关键字 “images”Page.apply_redactions() 方法,用于精细控制图片的处理。

  • 新增Annot.getText()Annot.getTextbox() 方法,提供了与 Page 版本相同的功能。

  • 新增了键 “number”Page.getText() / Annot.getText() 方法选项“dict”和“rawdict”的块字典中。

  • 新增glyph_name_to_unicode()unicode_to_glyph_name() 函数。这两个函数并不真正连接到特定字体,现在也可以独立使用。数据现在基于 Adobe 字形列表

  • 新增了便利函数 adobe_glyph_names()adobe_glyph_unicodes(),它们返回相应的可用数据。

  • 新增Page.getDrawings() 方法,该方法返回文档页面上绘图操作的详细信息。适用于所有文档类型。

  • 改进了 Document.insert_pdf() 的性能。现在,从同一来源多次单独插入时,也会抑制多个对象复制。这节省了时间、内存和目标文件大小。以前,此机制仅在每个单独的方法执行中有效。此功能也可以通过新的方法布尔参数 final=1(默认值)来抑制。

  • 对于从 pixmap 创建的 PNG 图片,分辨率 (dpi) 现在会自动从相应的 Pixmap.xresPixmap.yres 值中设置。


版本 1.17.7 的更改

  • 修复了问题 #651。通过回溯 MuPDF 开发仓库的更改,修复了一个在某些边缘情况下的密文处理过程中导致解释器崩溃的上游错误。

  • 修复了问题 #645。Pixmap 左上角坐标可以通过自己的方法 Pixmap.set_origin() 进行设置(再次可用)。

  • 修复了问题 #622Page.insertImage() 方法再次接受 rect_like 参数。

  • 新增了几个新方法以改进和加速目录(TOC)处理。其中包括,TOC 项目现在可以单独更改或删除——而无需总是替换整个 TOC。此外,现在无需先加载页面即可访问某些 PDF 页面属性。这对 TOC 操作的性能有非常显著的影响。

  • 新增Document.insert_pdf() 方法的一个选项,允许显示进度消息。解决了 #640

  • 新增Page.getTextbox() 方法,该方法提取矩形中包含的文本。在许多情况下,这应该使您无需为此类事情编写自己的脚本。

  • 新增了新参数 clipPage.getText() 方法,以简化和加速页面子区域的文本提取。

  • 新增TextWriter.appendv() 方法,用于在垂直书写模式下添加文本。解决了问题 #653


版本 1.17.6 的更改

  • 修复了问题 #605

  • 修复了问题 #600 – 文本现在应该也能正确地定位在 CropBox 小于 MediaBox 的页面上。

  • 新增了文本 span 字典键 origin,其中包含该 span 中第一个字符的左下角坐标。

  • 新增了属性 Font.buffer,它是字体文件的 bytes 副本。

  • 新增了参数 sanitizePage.cleanContents() 方法。允许切换 sanitization,因此仅进行语法清理。


版本 1.17.5 的更改

  • 修复了问题 #561 – 第二次尝试:某些 TextWriter 在使用多种交替字体时未正确工作。

  • 修复了问题 #566

  • 修复了问题 #568

  • 修复了问题 – 如果在 TextWriter.writeText() 方法中未给出,则透明度现在会正确地从 TextWriter 对象中获取。

  • 新增了一个新的全局属性 fitz_fontdescriptors。包含来自仓库 pymupdf-fonts 可用字体的信息。

  • 新增Font.valid_codepoints() 方法,该方法返回字体包含字形的 unicode 码点数组。

  • 新增了选项 text_as_pathPage.getSVGimage() 方法。这实现了问题 #580。如果设置为 False,将生成包含可解析文本的更小的 SVG 文件。


版本 1.17.4 的更改

  • 修复了问题 #561。在同一页面上处理超过 10 个 Font 对象现在应该可以正确工作。

  • 修复了问题 #562。批注 Pixmap 不再派生自页面 Pixmap,从而避免了意外包含页面内容。

  • 修复了问题 #559。此 MuPDF 错误正在使用 MuPDF 下一个版本的预发布版本进行临时修复。

  • 新增了实用函数 repair_mono_font(),用于纠正某些等宽字体的显示字符间距。

  • 新增了实用方法 Document.need_appearances(),用于精细控制 Form PDF 的行为。解决了问题 #563

  • 新增了实用函数 sRGB_to_pdf(),用于恢复给定 sRGB 格式颜色整数的 PDF 颜色三元组。

  • 新增了实用函数 sRGB_to_rgb(),用于恢复给定 sRGB 格式颜色整数的 (R, G, B) 颜色三元组。

  • 新增了实用函数 make_table(),该函数根据给定矩形和所需的列数、行数生成表格单元格。

  • 新增了对仓库 pymupdf-fonts 中可选字体的支持。


版本 1.17.3 的更改

  • 修复了一个未记录的问题,该问题在使用 Page.cleanContents() 方法时阻止了完全清理 PDF 页面。

  • 修复了问题 #540。EPUB 的文本提取应该再次正确工作。

  • 修复了问题 #548。文档现在包括 LINK_NAMED

  • 新增了新参数,用于控制 TextWriter.fillTextbox() 方法中文本的起始位置。实现了问题 #549

  • 更改Page.add_redact_annot() 方法的文档,以解释非内置字体的使用方法。


版本 1.17.2 的更改

  • 修复了问题 #533

  • 新增了选项,用于修改“Redact”批注的外观。实现了问题 #535


版本 1.17.1 的更改

  • 修复了问题 #520

  • 修复了问题 #525。“Ink”批注的顶点现在应该正确。

  • 修复了问题 #524。现在可以查询和设置适用批注类型的旋转角度。

还显著改进了内联文档,以更好地支持交互式帮助。


版本 1.17.0 的更改

此版本基于 MuPDF v1.17。以下是新功能和更改功能的亮点。

  • 新增了批注和 widget 的扩展语言支持:拉丁语、希腊语、俄语、中文、日语和韩语字符的混合现在可以在“FreeText”批注和文本 widget 中使用。无需特殊安排即可使用。

  • 对于支持“章节”结构的文档(目前适用于 EPUB 文档),实现了更快的页面访问。这带来了一些新的 Document 方法,并更改了 Document.loadPage() 和“索引”页面访问 doc[n]:除了像以前一样指定页码外,还可以指定一个元组 (chaper, pno) 来标识所需的页面。

  • 更改: 改进了对密文批注的支持:密文重叠的图片通过擦除重叠区域而永久修改。如果链接被密文重叠,也会被移除。这现在与 PDF 规范完全同步。

其他变更

  • 更改TextWriter.writeText() 方法以支持 “morph” 参数。

  • 新增了方法 Rect.morph()IRect.morph()Quad.morph(),这些方法返回一个新的 Quad

  • 更改Page.add_freetext_annot() 方法,使其通过新的参数 “align” 支持文本对齐。

  • 修复了问题 #508。改进了图片矩形计算,希望能提供在大多数(如果不是全部)情况下都正确的值。

  • 修复了问题 #502

  • 修复了问题 #500Document.convertToPDF() 方法应该不再导致内存泄漏。

  • 修复了问题 #496。批注和 widget/字段现在使用未旋转页面的坐标添加或修改。此行为现在与修改 PDF 页面的其他方法同步。

  • 新增了属性 Page.rotationMatrixPage.derotationMatrix,以支持 PDF 页面旋转版本和原始版本之间的坐标转换。

潜在的破坏性代码更改

  • 私有方法 Page._getTransformation() 已被移除。请改用公共属性 Page.transformationMattrix


版本 1.16.18 的更改

此版本引入了几个围绕 PDF 文本输出的新功能。其动机是简化此任务,同时提供扩展功能。

一个主要的成就是利用 MuPDF 的能力,当当前字体中找不到字符时,动态选择回退字体。这对于 Base-14 字体与 CJK 字体(中国、日本、韩国)的组合无缝工作。因此,文本可以包含来自拉丁语、希腊语、俄语、中文、日语和韩语的任意字符组合

  • 修复了问题 #493Pixmap(doc, xref) 现在应该再次正确地表示加载的图片对象。

  • 修复了问题 #488。widget 名称现在可以修改。

  • 新增了新的类 Font,表示一个字体。

  • 新增了新的类 TextWriter,用作要在页面上写入的文本的容器。

  • 新增Page.writeText() 方法,用于将一个或多个 TextWriter 对象写入页面。


版本 1.16.17 的更改

  • 修复了问题 #479。PyMuPDF 现在应该更正确地报告图片分辨率。这适用于图片(无论是来自图片文件还是从 PDF 文档中提取的图片)和从图片创建的 pixmap。

  • 新增Pixmap.set_dpi() 方法,该方法设置 x 和 y 方向的图片分辨率。


版本 1.16.16 的更改

  • 修复了问题 #477

  • 修复了问题 #476

  • 更改了批注线条末端符号的颜色设置,并修复了‘Polyline’/’Polygon’批注内部颜色设置错误。


版本 1.16.14 的更改

  • 更改了文本标记批注以接受除四边形以外的参数,以便现在可以标记两点之间的文本行

  • 新增Document.scrub() 方法,该方法从 PDF 中移除潜在的敏感数据。实现了问题 #453

  • 新增Annot.blendMode() 方法,该方法返回批注的混合模式

  • 新增Annot.setBlendMode() 方法,用于设置批注的混合模式。这解决了问题 #416

  • 更改Annot.update() 方法以接受额外的参数,用于设置混合模式和透明度。

  • 新增了高级图形功能以控制抗锯齿值,即 Tools.set_aa_level()。解决了问题 #467

  • 修复了问题 #474

  • 修复了问题 #466


版本 1.16.13 的更改

  • 新增Document.getPageXObjectList() 方法,该方法返回页面中表单 XObject 的列表。

  • 新增Page.setMediaBox() 方法,用于更改 PDF 页面物理尺寸。

  • 新增Page 方法,这些方法以前是内部方法:Page.cleanContents() (= Page._cleanContents()),Page.getContents() (= Page._getContents()),Page.getTransformation() (= Page._getTransformation())。


版本 1.16.12 的更改

  • 修复了问题 #447

  • 修复了问题 #461

  • 修复了问题 #397

  • 修复了问题 #463

  • 新增了对 PDF 表单字段的 JavaScript 支持,从而修复了问题 #454

  • 新增了新的批注方法 Annot.delete_responses(),该方法移除引用当前批注的“Popup”批注和响应批注。主要用于数据保护目的。

  • 新增了新的表单字段方法 Widget.reset(),该方法将字段值重置为其默认值。

  • 更改和扩展了密文处理:如果图片和 XObject 包含在密文矩形中,则将其移除。任何部分重叠都只会用密文背景色覆盖。现在可以指定一个覆盖文本,将其插入到矩形区域,以取代已删除的原始文本。这解决了问题 #434


版本 1.16.11 的更改


版本 1.16.10 的更改

  • 修复了问题 #421(“annot.set_rect(rect) has no effect on text Annotation”)。

  • 修复了问题 #417(“Strange behavior for page.deleteAnnot on 1.16.9 compare to 1.13.20”)。

  • 修复了问题 #415(“Annot.setOpacity throws mupdf warnings”)。

  • 更改了所有“添加批注/widget”方法,以便在 PDF 键 /NM 中存储唯一的名称。

  • 更改Annot.setInfo() 方法,使其除了字典外,还接受直接参数。

  • 更改Annot.info 属性,现在也显示批注的唯一 ID(PDF 键 /NM),如果存在的话。

  • 新增Page.annot_names() 方法,该方法返回所有批注名称(/NM 键)的列表。

  • 新增Page.load_annot() 方法,该方法根据批注的唯一 ID(/NM 键)加载批注。

  • 新增Document.reload_page() 方法,该方法在完成所有待处理更新后提供页面的新副本。


版本 1.16.9 的更改

  • 修复了问题 #412(“功能请求:允许控制 TOC 条目是否应该折叠”)。

  • 修复了问题 #411(“page.firstWidget 导致段错误”)。

  • 修复了问题 #407(“Annot.setOpacity 问题”)。

  • 更改了方法 Annot.setBorder()Annot.setColors()Link.setBorder()Link.setColors(),使其也接受直接参数,而不仅仅是繁琐的字典。


版本 1.16.8 的更改

  • 新增了几个新方法到 Document 类,使处理 PDF 低层结构更容易。我还决定将它们作为“正常”方法提供(而不是以“_”开头的私有方法)。这些方法是 Document.xrefObject()Document.xrefStream()Document.xrefStreamRaw()Document.PDFTrailer()Document.PDFCatalog()Document.metadataXML()Document.updateObject()Document.updateStream()

  • 新增Tools.mupdf_disply_errors() 方法,用于设置是否在 sys.stderr 上显示 mupdf 错误。

  • 新增了命令行功能。这是一个主要的新功能:您现在可以通过 “python -m fitz …” 调用几个实用函数。这应该可以取代许多最简单的脚本的需求。请参阅 命令行界面


版本 1.16.7 中的变化

细微更改,以更好地同步 TextPage 图像块和 Document.extractImage() 图像的二进制图像流。

  • 修复 问题 #394 (“使用 TOOLS.mupdf_warnings() 时 PyMuPDF 出现段错误”)。

  • 更改 MuPDF 错误消息的重定向:除了将它们写入 Python sys.stderr 外,现在也将它们与 MuPDF 警告一起存储。

  • 更改 Tools.mupdf_warnings() 为自动清空存储(除非通过参数停用)。

  • 更改 Page.getImageBbox() 在页面上找不到图像时返回一个无限矩形,而不是引发异常。


版本 1.16.6 中的变化

  • 修复 问题 #390 (“注释删除不完整”)。

  • 更改 Page.searchFor() / Document.searchPageFor() 也支持 flags 参数,该参数控制包含在 TextPage 中的数据。

  • 更改 Document.getPageImageList()Document.getPageFontList() 及其 Page 对应方法以支持新参数 full。如果为 true,则返回的项将包含引用字体或图像的 Form XObjectxref


版本 1.16.5 中的变化

文本提取方面有更多性能改进。

  • 修复 问题 #381 的第二部分(参阅 v1.16.4 中的项目)。

  • 新增 Page.getTextPage(),因此文本提取不再需要创建中间显示列表。页面级别的文本提取和文本搜索现在基于此,这应该可以提高约 5% 的性能。


版本 1.16.4 中的变化

  • 修复 问题 #381 (“TextPage.extractDICT ... 在升级到 1.16.3 后失败 ...”)

  • 新增 方法 Document.pages(),它提供页面范围上的生成器迭代器。

  • 新增 方法 Page.links(),它提供页面链接上的生成器迭代器。

  • 新增 方法 Page.annots(),它提供页面注释上的生成器迭代器。

  • 新增 方法 Page.widgets(),它提供页面表单域上的生成器迭代器。

  • 更改 Document.is_form_pdf 现在包含控件数量,如果不是 PDF 或此数量为零,则为 False


版本 1.16.3 中的变化

与 1.16.2 版本相比有细微更改。Page.getText() 的“dict”和“rawdict”变体的代码已移植到 C,大大提高了性能。这种改进在文本密集型文档中尤其明显,现在它们的执行速度应该快近两倍。

  • 修复 问题 #369 (“mupdf: cmsCreateTransform failed”),通过移除 ICC 颜色空间支持。

  • 更改 Page.getText() 现在接受额外的关键字“blocks”和“words”。它们将分别返回 Page.getTextBlocks()Page.getTextWords() 的结果。因此,所有文本提取方法现在都通过统一的 API 提供。相应地,现在有新方法 TextPage.extractBLOCKS()TextPage.extractWords()

  • 更改 Page.getText() 默认将位指示器 TEXT_INHIBIT_SPACES 设置为关闭。默认情况下不抑制额外空格的插入。


版本 1.16.2 中的变化

  • 更改 Page 的文本提取方法,允许详细控制提取的数据量。

  • 新增 planish_line(),它将给定线段(定义为一对点)映射到 x 轴。

  • 修复 一个问题(没有 Github 编号),在使用 Page.getText() 加上“dict”选项时,遇到某些不可用 UTF-8 编码的字符会导致解释器崩溃。

  • 修复 问题 #362 (“getText('rawDICT') 内存泄漏”)。


版本 1.16.1 中的变化

  • 新增 属性 Quad.is_convex,它检查连接其上两点的线段是否包含在四边形中。

  • 更改 Document.insert_pdf() 现在允许在复制过程中独立丢弃或包含链接和注释。修复问题 #352 (“Corrupt PDF data and …”),该问题在使用此方法处理某些有问题的文件时似乎会间歇性发生。

  • 修复 一个错误,该错误在使用语法 “m1/m2” 进行矩阵除法时,导致矩阵 “m1” 被结果替换,而不是返回一个新的矩阵。

  • 修复 问题 #354 (“Python 3.8 中的 SyntaxWarning”)。我们现在始终使用 “==” 来比较字面量(而不是 Python 关键字 “is”)。

  • 修复 问题 #353 (“mupdf version check”),不再在与 MuPDF 仅存在补丁版本差异时拒绝导入。


版本 1.16.0 中的变化

MuPDF 的这个主要新版本带来了几项不错的新功能和更改功能。其中一些确实涉及编程 API 的更改。以下是已更改内容的概要

  • PDF 文档加密和解密现在完全支持。这包括设置权限密码(用户和所有者密码)以及所需的加密方法。

  • 为响应新的加密功能,PyMuPDF 返回一个整数(即位的组合)表示文档权限,不再是字典。

  • 现在原生支持重定向 MuPDF 错误和警告。PyMuPDF 将 MuPDF 的错误消息重定向到 sys.stderr,不再缓冲它们。警告继续被缓冲,不会显示。存在用于访问和重置警告缓冲区的功能。

  • 注释现在仅支持 PDF

  • 注释和控件(表单域)现在是页面上的独立对象链(尽管控件在技术上仍然 PDF 注释)。这意味着,在使用 Page.firstAnnotAnnot.next() 时,您将永远不会遇到控件。您必须使用 Page.firstWidgetWidget.next() 来访问表单域。

  • 作为 MuPDF 关于控件的更改的一部分,添加更改表单域时,仅支持以下四种字体:Courier、Helvetica、Times-RomanZapfDingBats

更改详情列表

  • 新增 Document.can_save_incrementally(),用于检查阻止使用 Document.save() 的选项 incremental=True 的条件。

  • 新增 Page.firstWidget,指向页面上的第一个域。

  • 新增 Page.getImageBbox(),返回页面上显示的图像所占用的矩形。

  • 新增 Annot.setName(),允许您更改(图标)名称域。

  • 新增 Page.getText() 中的文本颜色输出:“dict”、“rawdict”和“xml”选项现在也显示 sRGB 格式的颜色。

  • 更改 Document.permissions 现在包含布尔指示器的整数值——以前是字典。

  • 更改 Document.save()Document.write(),现在完全支持基于密码的 PDF 文件解密和加密。

  • 更改了所有与注释和控件相关的 Python 常量的名称。如果您的脚本处理这两个类,请务必查阅常量和枚举章节。此决定源于取消对非 PDF 注释的支持。旧名称(以“ANNOT_*”或“WIDGET_*”开头)将作为已弃用同义词提供。

  • 更改 控件的字体支持:添加或更改表单域时,仅接受 Cour (Courier)、Helv (Helvetica, 默认)、TiRo (Times-Roman) 和 ZaDb (ZapfDingBats)。仅支持纯净版本——不支持斜体或粗体变体。但是,读取控件时会显示其原始字体。

  • 更改 警告缓冲区的名称为 Tools.mupdf_warnings(),清空此缓冲区的功能现在称为 Tools.reset_mupdf_warnings()

  • 更改 Page.getPixmap()Document.get_page_pixmap():现在可以使用新的布尔参数 annots抑制页面注释的渲染

  • 更改 Page.add_file_annot()Page.add_text_annot() 以允许设置图标。

  • 移除 Annot 对象中与控件相关的方法和属性。

  • 移除 Document 属性 openErrCodeopenErrMsg,以及 Tools 属性/方法 stderrreset_stderrstdoutreset_stdout

  • 移除 PyMuPDF 中的第三方 zlib 依赖:MuPDF 中现已提供压缩函数。PyMuPDF 的源代码安装程序现在可以省略此额外安装步骤。

未发布 MuPDF v1.15.0 版本


版本 1.14.20 / 1.14.21 中的变化

  • 更改 文本标记注释以支持多个矩形/四边形。这修复了问题 #341 (“Question : How to addhighlight so that a string spread across more than a line is covered by one highlight?”) 和类似问题 (#285)。

  • 修复 问题 #331 (“导入 PyMuPDF 会全局改变警告过滤行为”)。


版本 1.14.19 中的变化

  • 修复 问题 #319 (“使用自定义字体时 InsertText 函数出错”)。

  • 新增 方法 Document.get_sigflags(),返回 PDF 是否已签名的信息。解决问题 #326 (“如何在表单 PDF 中检测签名?”)。


版本 1.14.17 中的变化

  • 新增 Document.fullcopyPage(),用于在 PDF 中进行整页复制(不像 Document.copyPage() 那样仅复制引用)。

  • 更改 Page.getPixmap()Document.get_page_pixmap() 现在默认为 alpha=False

  • 更改 文本提取:span 字典现在(再次)在 bbox 键下包含其矩形。

  • 更改 Document.movePage()Document.copyPage() 使用直接函数代替包装 Document.select() – 类似于 v1.14.16 中的 Document.delete_page()


版本 1.14.16 中的变化

  • 更改 Document 方法围绕 PDF /EmbeddedFiles,不再使用 MuPDF 的“portfolio”函数。MuPDF v1.15 中将取消此支持,因此需要另一种解决方案。

  • 更改 Document.embfile_Count() 为函数(以前是属性)。

  • 新增 方法 Document.embfile_Names(),返回嵌入文件名的列表。

  • 更改 Document.delete_page()Document.delete_pages() 内部不再使用 Document.select(),而是使用函数直接执行删除。事实证明,Document.select() 方法对于非常复杂的 PDF 和复杂的注释使用会生成无效的大纲树(目录)。


版本 1.14.15 中的变化

  • 修复 问题 #301 (“线端点和线连接点”)、#300 (“如何绘制无轮廓的形状”) 和 #298 (“utils.updateRect 异常”)。这些错误与使用 PyMuPDF 绘制形状有关。完全支持绘制无边框的形状。线端点样式和线连接点样式现在已区分并支持所有可能的 PDF 值 (0, 1, 2),而不仅仅是布尔值。先前的参数 roundCap 已弃用,转而使用 lineCaplineJoin,并将在下个版本中删除。

  • 修复 问题 #290 (“getText(‘rawDICT’) 内存泄漏”)。此错误导致调用 Page.getText() 的“dict”、“rawdict”和“json”版本后内存未(完全)释放。


版本 1.14.14 中的变化

  • 新增 低级函数 ImageProperties(),用于确定图像的一系列特征。

  • 新增 低级函数 Document.is_stream(),用于检查对象是否为流类型。

  • 更改 低级函数 Document._getXrefString()Document._getTrailerString() 现在默认以格式化形式返回对象定义,方便解析。


版本 1.14.13 中的变化

  • 更改 处理二进制输入的方法:除了始终支持 bytes 和 bytearray 对象外,现在也接受 io.BytesIO 输入,使用其 getvalue() 方法。这涉及文档创建、嵌入文件、FileAttachment 注释、pixmap 创建等。修复问题 #274 (“将 BytesIO 作为流用于 insertImage 时出现段错误”)。

  • 修复 问题 #278 (“insertImage(keep_proportion=True) 是否损坏?”)。现在图像在保持纵横比时正确显示。


版本 1.14.12 中的变化

  • 更改 PageShape 的绘制方法,不仅支持 RGB,还支持 GRAY 和 CMYK 颜色空间。这解决了问题 #270 (“有没有办法使用 CMYK 颜色绘制形状?”)。此更改也适用于 ShapePage 的文本插入方法。

  • 修复 问题 #269 (“Document.insert_page() 中的 AttributeError”),该问题在使用 Document.insert_page() 同时插入文本时发生。


版本 1.14.11 中的变化

  • 更改 Page.show_pdf_page(),始终将源矩形定位于目标的中心。此方法现在还支持任意角度旋转。参数 reuse_xref 已弃用:内部现已处理重复项的防止。

  • 更改 Page.insertImage(),支持图像的旋转显示和保持纵横比。此处仅支持 90 度倍数的旋转。

  • 修复 问题 #265 (“TypeError: insertText() 收到意外关键字参数 ‘idx’”)。此问题仅在使用 Document.insert_page() 同时插入文本时发生。


版本 1.14.10 中的变化

  • 更改 Page.show_pdf_page(),支持源矩形旋转。修复 #261 (“无法旋转插入的页面”)。

  • 修复 Page.insertImage() 中的一个错误,该错误阻止了插入以流形式提供的多个图像。


版本 1.14.9 中的变化

  • 新增 低级方法 Document._getTrailerString(),返回 PDF 的 trailer 对象。这非常类似于 Document._getXrefString(),除了 PDF trailer 没有/不需要 xref 来标识它。

  • 新增 文本插入方法的参数。现在可以独立设置字形(文本字符)的描边和填充颜色,以及字形边框的厚度。新的参数 render_mode 控制这些颜色的使用,以及文本是否应该可见。

  • 修复 问题 #258 (“复制图像流到新 PDF 而不增加大小”):对于嵌入在 PDF 中的 JPX 图像,Document.extractImage() 现在以其原始格式返回它们。以前使用了 MuPDF 基础库,它以 PNG 格式返回它们(导致大小大幅增加)。

  • 修复 问题 #259 (“变形文本以适应矩形内”)。澄清了 get_text_length() 的用法,并移除了长单词的额外换行符。


版本 1.14.8 中的变化

  • 新增 Pixmap.set_rect(),用于更改矩形中的像素值。这也可以用作设置完整 pixmap 颜色的替代方法(Pixmap.clear_with())。

  • 修复 JBIG2(单色)编码 PDF 图像的提取问题。该问题发生在 Page.getText()(参数“dict”和“rawdict”)和 Document.extractImage() 方法中。

  • 修复 未正确清除非 alpha Pixmap 的问题(Pixmap.clear_with())。

  • 修复 未正确反转非 alpha Pixmap 颜色的问题(Pixmap.invert_irect())。


版本 1.14.7 中的变化


版本 1.14.5 中的变化

  • 更改: Shape 方法现在严格使用 Page 的变换矩阵——而不是“手动”计算位置。

  • 新增 方法 Pixmap.pixel(),返回给定像素坐标的像素值(一个列表)。

  • 新增 方法 Pixmap.tobytes(),返回表示 pixmap 的 bytes 对象,支持多种格式。以前只能用于 PNG 输出(Pixmap.tobytes())。

  • 更改: Pixmap.save() 和(新的)Pixmap.tobytes() 方法的输出现在也可以是 PSD (Adobe Photoshop Document)。

  • 新增 方法 Shape.drawQuad(),用于绘制一个 Quad。这实际上是使用 quad 边缘的 Shape.drawPolyline() 的简写。

  • 更改 方法 Shape.drawOval():参数现在可以矩形(rect_like),也可以是四边形(quad_like)。


版本 1.14.4 中的变化

  • 修复 问题 #239 “注释坐标一致性”。


版本 1.14.3 中的变化

此补丁版本包含细微错误修复和 CJK 字体输出支持。

  • 新增 支持将四种 CJK 字体作为 PyMuPDF 生成的文本输出。这涉及方法 Page.insertFont()Shape.insertText()Shape.insertTextbox() 以及相应的 Page 方法。新字体可以通过“保留”字体名称访问:“china-t”(繁体中文)、“china-s”(简体中文)、“japan”(日语)和“korea”(韩语)。

  • 新增 对内置字体‘Symbol’和‘Zapfdingbats’的完全支持。

  • 更改:现在可以通过 4 个字母的缩写引用 14 种标准字体。


版本 1.14.1 中的变化

此补丁版本包含细微性能改进。

  • 新增 支持将 pathlib 对象作为 Document 文件名输入,通过使用 Python 的 str() 函数。


版本 1.14.0 中的变化

为了支持 MuPDF v1.14.0,PyMuPDF 进行了大量更改——其中大部分是纯技术性的,对开发者影响不大。但也新增和改进了许多有趣的功能。详情如下

  • 新增 “墨迹”注释。

  • 新增 “图章”注释。

  • 新增 “波浪下划线”文本标记注释。

  • 新增Quad(四边形)——表示平面上的通用四边形。矩形、非空四边形的特殊子类型用于文本标记注释以及文本搜索方法返回的对象。

  • 新增Document.save()Document.write() 新增选项“decrypt”。现在保存密码保护的 PDF 时可以保持加密

  • 新增 对底层 C 库 MuPDF 发出的不请自来消息的抑制和重定向。详情参阅 诊断

  • 更改:对注释的更改现在始终需要 Annot.update() 才能生效。

  • 更改 FreeText 注释以支持完整的拉丁字符集和各种外观选项。

  • 更改 文本搜索 Page.searchFor(),使其可以选择性地返回包围每个搜索结果的 Quad 对象而不是 Rect 对象。

  • 更改 纯文本输出:如果每行本身不以该字符结尾,则现在为其添加一个换行符。

  • 修复 问题 211 (“文档中的错误”)。

  • 修复 问题 213 (“重写的大纲仅在基于 MuPDF 的应用程序中显示”)。

  • 修复 问题 214 (“PDF 解密失效!”)。

  • 修复 问题 215 (“使用 PyMuPDF 添加的链接的格式问题”)。

  • 修复 问题 217 (“使用 JSON 提取我的 PDF 时失败”)。

幕后,我们更改了几何对象的实现:它们现在纯粹存在于 Python 中,不再在 C 级别(MuPDF 中)拥有“影子”副本。这使得该领域的处理速度提高了两倍以上。

出于同样的原因,大多数涉及几何参数的方法现在也接受相应的 Python 序列。例如,在方法“page.show_pdf_page(rect, …)”中,参数 rect 现在可以是任何 rect_like 序列。

我们还投入了大量精力进一步扩展和改进常见问题章节。


版本 1.13.19 中的变化

此版本包含一些技术/性能改进和错误修复。

  • 更改 内存管理:对于 Python 3 构建,所有 C 级代码中仅使用 Python 内存管理(即 MuPDF 代码或 PyMuPDF 接口代码中不再使用原生 malloc())。这改进了内存使用状况,也有一些运行时改进:文本提取和 pixmap 创建的运行时缩短了 > 2%(目前仅限 Windows 机器)。

  • 修复 Python 2.7 中使用 TextPage.extractRAWDICT() (= Page.getText(“rawdict”)) 时发生的错误,导致解释器崩溃。

  • 修复 Python 2.7 中创建链接目的地时发生的错误。

  • 扩展 常见问题章节,增加了更多示例。


版本 1.13.18 中的变化


版本 1.13.17 中的变化

  • 修复 Page.show_pdf_page() 中间歇性导致异常的错误,该错误发生在显示来自许多不同源 PDF 的页面时。

  • 更改 方法 Document.extractImage() 现在返回有关提取图像的更多元信息。此外,其性能也得到了显著提高。已更改了几个演示脚本以使用此方法。

  • 更改 方法 Document._getXrefStream() 如果对象不是流,现在返回 None,否则不再引发异常。

  • 新增 方法 Document._deleteObject(),用于删除由其 xref 标识的 PDF 对象。仅供经验丰富的 PDF 专家使用。

  • 新增 方法 paper_rect(),根据提供的纸张格式字符串返回一个 Rect。示例:fitz.paper_rect(“letter”) = fitz.Rect(0.0, 0.0, 612.0, 792.0)

  • 新增 为本文档新增常见问题章节。


版本 1.13.16 中的变化

  • 新增 支持正确设置某些注释类型的透明度(不透明度)。

  • 新增 工具属性(Tools.fitz_config),显示此 PyMuPDF 版本的配置。

  • 修复 问题 #193 (‘insertText(overlay=False) 给出“无法调整具有共享存储的缓冲区大小”错误’),通过避免使用只读缓冲区。


版本 1.13.15 中的变化

  • 修复 问题 #189 (“找不到内置 CJK 字体”),现在支持内置 CJK 字体(CJK = 中国、日本、韩国)。这应该能正确生成使用这些语言的文档的 pixmap。此更改对我们的二进制文件大小有影响:现在将在 8 到 10 MB 之间,取决于操作系统。

  • 修复 问题 #191 (“Jupyter Notebook 内核在大约 40 页后崩溃”),该问题在修改注释内容时发生。


版本 1.13.14 中的变化

此补丁版本包含多项改进,主要针对注释。

  • 更改 Annot.lineEnds 现在是两个整数的列表,表示线端符号。以前是字符串的 dict

  • 新增 支持为适用的注释类型添加线端符号。PyMuPDF 现在可以生成包含线端符号的这些注释。

  • 新增 Annot.setLineEnds(),为适用的注释类型(‘Line’、‘PolyLine’、‘Polygon’)添加线端符号。

  • 更改 Page.insertImage()Page.show_pdf_page() 的技术实现:它们现在创建自己的 contents 对象,从而避免更改可能较大的流,以及随之而来的压缩/解压缩工作和大量更改带来的增量更新。


版本 1.13.13 中的变化

此补丁版本包含对嵌入文件和文件附件注释的多项改进。

  • 新增 Document.embfile_Upd(),允许更改嵌入文件的文件内容和元数据。它取代了旧方法 Document.embfile_SetInfo()(该方法将在未来版本中删除)。内容会自动压缩,元数据可以是 unicode。

  • 更改 Document.embfile_Add(),现在会自动压缩文件内容。伴随的元数据现在可以是 unicode(过去必须是 ASCII)。

  • 更改 Document.embfile_Del(),现在会自动删除所有具有提供的标识名称的条目。返回码现在是删除条目的整数计数(以前是 None)。

  • 更改 嵌入文件方法,现在也接受或显示 PDF unicode 文件名作为额外参数 ufilename

  • 新增 Page.add_file_annot(),添加新的文件附件注释。

  • 更改 Annot.fileUpd()(文件附件注释),现在也接受 PDF unicode 参数 ufilename。描述参数 desc 可以正确处理 unicode。此外,所有参数都是可选的,因此可以在不替换文件内容的情况下更改元数据。

  • 更改 Annot.fileInfo()(文件附件注释),现在也显示 PDF unicode 文件名作为参数 ufilename

  • 修复 问题 #180 (“page.getText(output=’dict’) 返回无效的 bbox”),现在也适用于垂直文本。

  • 修复 问题 #185 (“无法渲染 PyMuPDF 创建的注释”)。问题的原因是 MuPDF 创建注释时采用的极简方法。通过 MuPDF 函数创建时,某些注释类型没有 /AP(“外观”)对象。MuPDF、SumatraPDF 以及 PyMuPDF 无法渲染没有此类对象的注释。此修复现在确保始终与注释本身一起创建一个外观对象。仍不支持线端点样式。


版本 1.13.12 中的变化

  • 修复 问题 #180 (“page.getText(output=’dict’) 返回无效的 bbox”)。请注意,这是对 MuPDF 错误的规避,该错误在某些情况下会生成零高度字符矩形。发生这种情况时,此修复确保 bbox 高度至少为字体大小。

  • 更改 ListBox 和 ComboBox 控件的可选值属性列表已重命名为 Widget.choice_values

  • 更改 添加控件时,如果缺少 PDF Base 14 字体,会自动将其添加到 PDF 中。控件文本字体现在也可以从现有控件字体中选择。现在会遵循任何指定的域值,并生成具有预设值的域。

  • 新增 Annot.updateWidget(),允许更改现有表单域——包括域值。


版本 1.13.11 中的变化

虽然之前的补丁子版本仅包含各种修复,此版本再次引入了主要新功能

  • 新增 对 PDF 控件注释的基本支持。现在可以添加 Text、CheckBox、ListBox 和 ComboBox 类型的 PDF 表单域。如有必要,添加第一个控件时,PDF 将转换为表单 PDF。

  • 修复 问题 #176 (“文件嵌入错误”)、#177 (“调用 page.getText() 时发生段错误”) 以及 #179 (“在加密 PDF 上使用 page.getLinks() 时发生段错误”)。


版本 1.13.7 中的变化

  • 新增 对可重排文档(电子书、HTML 等)可变页面大小的支持:在 Document 创建(open)时新增参数 rectfontsize,以及作为单独方法 Document.layout()

  • 新增 Annot 创建多种注释类型的功能:便签、自由文本、圆形、矩形、直线、多边形、折线和文本标记。

  • 新增 支持注释透明度(Annot.opacityAnnot.setOpacity())。

  • 更改 Annot.vertices:点坐标现在以浮点数对的形式分组(不再是单独的浮点数)。

  • 更改 注释颜色字典:两个键现在命名为“stroke”(以前是“common”)和“fill”。

  • 新增 Document.isDirty,如果在当前会话中 PDF 已更改,则为 True。每次调用 Document.save()Document.write() 时重置为 False


版本 1.13.6 中的变化

  • 修复 #173:对于内存驻留文档,确保流对象在文档关闭前不会被 Python 垃圾回收。


版本 1.13.5 中的变化

  • 新增低级方法 Page._setContents(),定义一个由其 xref 提供的对象作为 contents 对象。

  • 更改并扩展了 PDF 表单域支持:属性 widget_text 已重命名为 Annot.widget_value。现在支持所有表单域类型(签名除外)的值。新增属性 Annot.widget_choices 包含列表框和组合框的可选值。如果不存在值,所有这些属性现在都包含 None


版本 1.13.4 中的变化

  • Document.convertToPDF() 现在支持页面范围、反转的页面序列和页面旋转。如果文档已经是 PDF,则引发异常。

  • 修复了 v1.13.0 引入的一个错误,该错误阻止了 Page.insertImage() 处理透明图像。


版本 1.13.3 中的变化

引入了一种将任何 MuPDF 支持的文档转换为 PDF 的方法。如果您曾想将 XPS、EPUB、CBZ 或 FB2 文件转换为 PDF 版本——这就是一种方法。

  • Document.convertToPDF() 返回一个 PDF 格式的 Python bytes 对象。可以在 PyMuPDF 中像普通文件一样打开,或者以“.pdf”扩展名写入磁盘。


版本 1.13.2 中的变化

主要增强是 PDF 表单域支持。表单域是类型为 (19, ‘Widget’) 的注释。新增一个文档方法来检查 PDF 是否为表单。 Annot 类新增了描述域详情的属性。

  • 如果对象类型为 /AcroForm 且至少存在一个表单域,则 Document.is_form_pdf 为 true。

  • Annot.widget_typeAnnot.widget_textAnnot.widget_name 包含表单域(即“Widget”注释)的详细信息。


版本 1.13.1 中的变化

  • TextPage.extractDICT() 是一个新方法,用于提取文档页面内容(文本和图像)。支持所有文档类型,与其他 TextPage extract*() 方法一样。返回的对象是一个包含嵌套列表和其他字典的字典,与旧方法 TextPage.extractJSON() 的 JSON 反序列化结果**完全一致**。区别在于结果是直接创建的——不使用 JSON 模块。由于用户不需要 JSON 模块来解释信息,因此使用更方便,性能也更好,因为它包含原始二进制格式的图像——无需进行 base64 解码。

  • Page.getText() 也相应地支持新参数值“dict”来调用上述方法。

  • TextPage.extractJSON()(或 Page.getText(“json”))为了方便起见仍然受支持,但预计其使用会减少。


版本 1.13.0 中的变化

此版本基于并需要 MuPDF v1.13.0。此版本“主要是错误修复版本”。

在 PyMuPDF 中,我们也进行了一些错误修复,同时引入了细微增强。对用户 API 的更改非常少。

  • Document 构造更灵活:新的 filetype 参数允许设置文档类型。如果指定,将忽略文件名的任何扩展名。更全面地解决 问题 #156。作为此项更改的一部分,文档已重写。

  • Pixmap 构造器的更改
    • 颜色空间转换不再允许丢弃 alpha 通道:源和目标的 alpha 现在将始终相同。在使用 alpha = 0 时曾出现异常甚至解释器崩溃。

    • 作为替代,简单的 pixmap 复制允许您选择目标 alpha。

  • Document.save() 再次提供完整的垃圾回收范围 0 到 4。由于 xref 维护中的错误,我们不得不暂时强制 garbage > 1。最终解决 问题 #148

  • Document.save() 现在通过一个额外参数提供了“美化”PDF 源的功能。

  • Page.insertImage() 新增参数 stream,指定存放图像的内存区域。

  • 修复了 Linux 系统上 PNG 图像损坏的问题(“Problem writing PNG” #133)。


版本 1.12.4 中的变化

这是对 1.12.3 的扩展。

  • 修复 问题 #147:方法 Document.getPageFontlist()Document.getPageImagelist() 现在也显示通过“Form XObjects”嵌套在 resources 中的字体和图像。

  • 问题 #148 的临时修复:如果给定较低的值,保存到新 PDF 文件时现在会自动使用 garbage = 2。最终修复预计将在 MuPDF 的下一版本中提供。届时我们将移除此规避措施。

  • 预防性修复,解决某些方法中非法使用 stencil / 图像掩码 pixmap 的问题。

  • 方法 Document.getPageFontlist() 现在在列表中包含每个字体的编码名称。

  • 方法 Document.getPageImagelist() 现在在列表中包含每个图像的解码方法名称。


版本 1.12.3 中的变化

这是对 1.12.2 的扩展。


版本 1.12.2 中的变化

这是对 1.12.1 的扩展。

  • 方法 Page.show_pdf_page() 现在接受新的 clip 参数。此参数指定源页面的一个区域,显示将限于该区域。

  • 为了方便,新增了 Page.CropBoxPage.MediaBox


版本 1.12.1 中的变化

这是对 1.12.0 版本的扩展。

  • 新增方法 Page.show_pdf_page(),显示另一个 PDF 的页面。这是一个矢量图像,因此在缩放时保持精确。涉及的两个文档必须是 PDF。

  • 新增方法 Page.getSVGimage(),从页面创建 SVG 图像。与 pixmap 的光栅图像不同,这是一种矢量图像格式。返回结果是一个 unicode 文本字符串,可以保存为 .svg 文件。

  • 方法 Page.getTextBlocks() 现在接受一个额外的布尔参数“images”。如果设置为 true(默认值为 false),图像块(仅元数据)将包含在生成的列表中,从而可以检测到渲染图像的区域。

  • 细微错误修复。

  • Page.getText() 的“text”结果现在使用单个空格字符连接块内的所有行。MuPDF 的原始输出改为使用“\n”,这会产生比较参差不齐的输出。

  • Page 对象的新属性 Page.MediaBoxSizePage.CropBoxPosition 提供了关于页面尺寸的更多信息。对于非 PDF 文件(以及大多数 PDF 文件),这些将分别等于 Page.rect.bottom_rightPage.rect.top_left。例如,类 Shape 利用它们正确放置其项目。


版本 1.12.0 中的变化

此版本基于并需要 MuPDF v1.12.0。新的 MuPDF 版本包含相当多的更改——其中大部分与文本提取相关。部分更改影响了编程 API。

  • Outline.saveText()Outline.saveXML() 已被删除,没有替代方法。无论如何,您可能很少使用它们。但如果您正在寻找替代方法:Document.get_toc() 的输出可以轻松用于生成等效内容。

  • TextSheet 已不存在。

  • 文本“span”(TextPage 的一个层级)不再包含位置信息(即没有“bbox”键)。取而代之的是,span 现在提供其文本的字体信息。这会影响我们的 JSON 输出变体。

  • HTML 输出得到了很大改进:现在创建有效的文档,可以由浏览器显示,产生与原始文档相似的视图。

  • 新增输出格式 XHTML,以浏览器可读格式提供文本和图像。与 HTML 输出的区别在于,不致力于重现原始布局。

  • Page.getText() 的所有输出格式现在都支持创建完整、有效的文档,通过使用适当的头尾信息包装它们。如果您对使用 HTML 输出感兴趣,请务必阅读 控制 HTML 输出质量

  • 为了支持查找文本位置,我们新增了特殊方法,无需绕道 TextPage.extractJSON()TextPage.extractXML():使用 Page.getTextBlocks()Page.getTextWords() 分别创建文本块列表或单词列表,并附带其矩形。这应该比标准文本提取方法快得多,也避免使用额外包来解释其输出。


版本 1.11.2 中的变化

这是对 v1.11.1 的扩展。

  • 新增 Page.insertFont(),创建一个 PDF /Font 对象并返回其对象编号。

  • 新增 Document.extractFont(),根据给定对象编号提取嵌入字体的内容。

  • 方法 FontList(...) 项目不再包含 PDF 生成编号。这个值没有任何意义。取而代之的是,包含了字体文件扩展名(例如,“pfa”表示“PostScript ASCII 字体”),这提供了更有价值的信息。

  • 现在也支持“简单字体”(Type1)以外的字体。

  • 改变 Pixmap 大小的新选项

    • 方法 Pixmap.shrink() 按比例原地缩小 Pixmap。

    • 新的 Pixmap 复制构造函数允许通过设置目标宽度和高度来进行缩放。


版本 1.11.1 中的更改

这是 v1.11.0 的扩展。

  • 新类 Shape。它简化并扩展了在 PDF 页面上创建图像形状的功能。它包含多种方法,用于创建基本形状(如线条、矩形或圆形),这些基本形状可以组合成更复杂的形状,并赋予它们共同的属性,如线宽或颜色。组合的形状作为一个单元处理,例如可以“变形”在一起。该类可以累积多个复杂形状,并将它们全部放置在页面的前景或背景中——从而也减少了对页面 contents 对象的更新次数。

  • 所有 Page 绘制方法现在都使用新的 Shape 类。

  • 文本插入方法 insertText()insertTextBox() 除了文本旋转外,现在还支持变形。它们已成为 Shape 类的一部分,因此允许文本与图形自由组合。

  • 新的 Pixmap 构造函数允许创建带有附加 alpha 通道的 Pixmap 副本。新方法还允许直接操作 alpha 值。

  • 几何对象(矩阵、矩形和点)的二元代数运算现在通常也支持列表或元组作为第二个操作数。您可以将数字元组 *(x, y)* 添加到 Point 中。在此上下文中,此类序列称为“point_like”(分别称为 matrix_likerect_like)。

  • 几何对象现在完全支持原地运算符。例如,对于数字 *m*,*p /= m* 将点 p 替换为 *p * 1/m*;对于 matrix_like 对象 *m*,则替换为 *p * ~m*。类似地,如果 *r* 是一个矩形,则 *r |= (3, 4)* 是包含 *fitz.Point(3, 4)* 的新矩形,而 *r &= (1, 2, 3, 4)* 是它与 *fitz.Rect(1, 2, 3, 4)* 的交集。


版本 1.11.0 中的更改

此版本基于 MuPDF v1.11 并需要它。

尽管 MuPDF 声明这主要是一个错误修复版本,但确实包含了一个主要新功能:支持嵌入文件——也称为作品集或集合。我们扩展了 PyMuPDF 的功能,使其在这方面稍稍超出了 *mutool* 工具的范围,具体如下。

  • *Document* 类现在通过几种新方法和一个新属性支持嵌入文件

    • *embfile_Info()* 返回嵌入文件列表中某个条目的元数据信息。这比 *mutool* 当前提供的信息更多:它显示了用于嵌入文件的所有信息(而不仅仅是条目的名称)。

    • *embfile_Get()* 将条目的(解压后的)内容检索到 *bytes* 缓冲区中。

    • *embfile_Add(…)* 将新内容插入到 PDF 作品集中。我们(与 *mutool* 不同)**限制**此操作仅用于具有**新名称**的条目(不允许重复名称)。

    • *embfile_Del(…)* 从作品集中删除一个条目(MuPDF 中未提供的功能)。

    • *embfile_SetInfo()* – 更改嵌入文件的文件名或描述。

    • *embfile_Count* – 包含嵌入文件的数量。

  • 对几何对象进行了一些改进以简化操作。这些改进与新的 MuPDF 版本无关,其中大多数也反映在 PyMuPDF v1.10.0 中。其中包括通过名称标识矩形角点的新属性(例如 *Rect.bottom_right*)以及处理集合论问题(如 *Rect.contains(x)* 或 *IRect.intersects(x)*)的新方法。特别努力集中在支持更多“Pythonic”语言结构上:*if x in rect …* 等同于 *rect.contains(x)*。

  • Rect 章现在提供了更多关于空矩形和无限矩形以及我们如何处理它们的信息。处理方式本身也已更新,以提高该领域的一致性。

  • 我们已开始对 PDF 内容的**生成**提供基本支持

    • *Document.insert_page()* 在 PDF 中添加一个新页面,可选地包含一些文本。

    • *Page.insertImage()* 在 PDF 页面上放置一个新图像。

    • *Page.insertText()* 在现有页面上放置新文本

  • 对于 **FileAttachment** 注释,可以提取和更改附加文件的内容和名称。


版本 1.10.0 中的更改

MuPDF v1.10 的影响

MuPDF 版本 1.10 对我们的绑定产生了显著影响。其中一些更改也影响了 API – 换句话说,也影响了作为 PyMuPDF 用户的**您**。

  • 链接目标信息已减少。*linkDest* 类的几个属性不再包含有价值的信息。实际上,该类已从 MuPDF 库中整体删除,我们在 PyMuPDF 中仅保留它以提供与现有代码的兼容性。

  • 为了最小化内存需求,MuPDF v1.10 中内置了几项改进

    • 新的 *config.h* 文件可用于在 C 基础代码中取消选择不需要的功能。利用此功能,我们能够将二进制文件 *_fitz.o* / *_fitz.pyd* 的大小减少约 50%(从 9 MB 降至 4.5 MB)。使用 UPX 压缩后,大小进一步降至非常方便的 2.3 MB。

    • Pixmap 的 alpha(透明度)通道现在是可选的。将 alpha 默认设置为 *False* 可显著减小 Pixmap 大小(CMYK 减少 20%,RGB 减少 25%,GRAY 减少 50%)。因此,许多 *Pixmap* 构造函数现在接受一个 *alpha* 布尔值来控制是否包含此通道。其他 Pixmap 构造函数(例如,用于文件和图像输入的构造函数)创建的 Pixmap 完全没有 alpha 通道。不利的一面是,Pixmap 的保存方法不再接受 *savealpha* 选项:当存在该通道时,它将始终被保存。为了最大程度地减少代码中断,我们保留了调用模式中的此参数——它将被忽略。

  • *DisplayList* 和 *TextPage* 类构造函数现在**要求引用页面的 mediabox**(即 *page.bound()* 矩形)。无法从其他来源构建此信息,因此在这种情况下无法避免更改源代码。然而,我们假设没有多少用户会明确使用这些相当低级的类。因此,此更改的影响应该很小。

与版本 1.9.3 相比的其他更改

  • 新的 Document 方法 *write()* 将已打开的 PDF 写入内存(与 *save()* 写入文件不同)。

  • 注释现在可以在其页面上进行缩放和移动。这是通过修改其矩形来完成的。

  • 注释现在可以被删除。Page 包含新方法 *deleteAnnot()*。

  • 现在可以修改各种注释属性,例如内容、日期、标题(= 作者)、边框、颜色。

  • 方法 *Document.insert_pdf()* 现在也复制源页面的注释。

  • *Pages* 类已被删除。由于文档现在可以通过页码作为索引访问(如 *doc[n] = doc.loadPage(n)*),并且文档对象可以用作迭代器,因此维护该类的收益过低。请参见以下评论。

  • *loadPage(n)* / *doc[n]* 现在接受任意整数来指定页码,只要 *n < pageCount*。因此,例如 *doc[-500]* 总是有效的,并将加载页面 *(-500) % pageCount*。

  • 文档现在也可以用作迭代器,如下所示:*for page in doc: …<对“page”进行操作> …*。这将把 *doc* 的所有页面作为 *page* 生成。

  • Pixmap 方法 *getSize()* 已被属性 *size* 替换。与以前一样,*Pixmap.size == len(Pixmap)* 为真。

  • 为了响应透明度(alpha)成为可选功能,已向 PixmapColorspace 类添加了一些新参数和属性,以支持确定其特征。

  • Page 类现在包含新属性 *firstAnnot* 和 *firstLink*,用作相应类链的起始点,其中 *firstLink* 只是方法 *loadLinks()* 的助记同义词,该方法继续存在。类似地,新属性 *rect* 是方法 *bound()* 的同义词,该方法也继续存在。

  • Pixmap 方法 *samplesRGB()* 和 *samplesAlpha()* 已被删除,因为现在可以创建不带透明度的 Pixmap。

  • Rect 现在有一个属性 *irect*,它是方法 *round()* 的同义词。同样,IRect 现在有一个属性 *rect*,用于返回一个 Rect,其坐标与浮点值相同。

  • Document 类有一个新方法 *searchPageFor()* 用于搜索文本字符串。它与相应的 *Page.searchFor()* 方法功能完全相同,只是需要额外提供页码参数。


版本 1.9.3 中的更改

此版本同样基于 MuPDF v1.9a。与版本 1.9.2 相比的更改如下:

  • 作为一项主要增强功能,现在以与链接类似的方式支持注释。注释可以显示(作为 pixmap),并且可以访问其属性。

  • 除了文档的 *select()* 方法外,现在还可以使用一些更简单的方法来操作 PDF

    • *copyPage()* 在文档内复制页面。

    • *movePage()* 类似,但会删除原始页面。

    • *delete_page()* 删除页面

    • *delete_pages()* 删除页面范围

  • *rotation* 或 *setRotation()* 分别访问或更改 PDF 页面的旋转角度。

  • 之前可用但未记录的 IRectRectPointMatrix 现在支持 *len()* 方法,并且其坐标属性可以通过索引访问,例如 *IRect.x1 == IRect[2]*。

  • 为了方便起见,文档现在支持简单的索引访问:*doc.loadPage(n) == doc[n]*。索引范围可以是 *-pageCount < n < pageCount*,这样 *doc[-1]* 就是文档的最后一页。


版本 1.9.2 中的更改

此版本同样基于 MuPDF v1.9a。与版本 1.9.1 相比的更改如下:

  • *fitz.open()*(无参数)创建一个新的空 **PDF** 文档,即如果之后保存,必须赋予 *.pdf* 扩展名。

  • Document 现在接受以下所有格式(*Document* 和 *open* 是同义词)

    • open(),

    • *open(filename)*(等同于 *open(filename, None)*),

    • *open(filetype, area)*(等同于 *open(filetype, stream = area)*)。

    内存区域 *stream* 的类型可以是 *bytes* 或 *bytearray*。因此,例如 *area = open(“file.pdf”, “rb”).read()* 可以直接使用(无需先将其转换为 bytearray)。

  • 新方法 *Document.insert_pdf()*(仅限 PDF)插入另一 PDF 中的页面范围。

  • *Document* 对象 doc 现在支持 *len()* 函数:len(doc) == doc.pageCount

  • 新方法 *Document.getPageImageList()* 创建页面上使用的图像列表。

  • 新方法 *Document.getPageFontList()* 创建页面引用的字体列表。

  • 新的 Pixmap 构造函数 *fitz.Pixmap(doc, xref)* 基于已打开的 PDF 文档和图像的 xref 编号创建 pixmap。

  • 新的 Pixmap 构造函数 *fitz.Pixmap(cspace, spix)* 创建另一个 pixmap *spix* 的副本,并将其色彩空间转换为 *cspace*。这适用于所有色彩空间组合。

  • Pixmap 构造函数 *fitz.Pixmap(colorspace, width, height, samples)* 现在允许 *samples* 是 *bytes* 类型,而不仅是 *bytearray*。


版本 1.9.1 中的更改

此版本的 PyMuPDF 基于 MuPDF 库源代码版本 1.9a,发布于 2016 年 4 月 21 日。

请查看 MuPDF 的网站,了解其中包含的更改和增强功能。

版本 1.9.1 与版本 1.8.0 相比的更改如下:

  • *fitz.Rect* 和 *fitz.IRect* 的新方法 *get_area()*

  • 现在可以使用新的构造函数 *fitz.Pixmap(filename)* 直接从文件创建 Pixmap。

  • Pixmap 构造函数 *fitz.Pixmap(image)* 已相应扩展。

  • 现在可以使用点和坐标的所有可能组合创建 *fitz.Rect*。

  • PyMuPDF 类和方法现在都包含 __doc__ 字符串,其中大部分由 SWIG 自动创建。虽然 PyMuPDF 文档肯定更详细,但此功能在支持 Python 的 IDE 中编程时应提供很大帮助。

  • 新的文档方法 *getPermits()* 返回与当前访问文档相关的权限(打印、编辑、注释、复制),形式为 Python 字典。

  • 单位矩阵 *fitz.Identity* 现在是**不可变的**。

  • 新的文档方法 *select(list)* 从文档中删除所有不在列表中的页面。页面也可以复制和重新排列。

  • 我们的演示和示例集合中有各种改进和新成员。也许最突出的是:*PDF_display* 现在支持使用鼠标滚轮滚动,并且有一个新的示例程序 *wxTableExtract*,允许图形化地识别和提取文档中的表格数据。

  • *fitz.open()* 现在是 *fitz.Document()* 的别名。

  • 新的 pixmap 方法 *tobytes()* 将返回一个格式化为 pixmap PNG 图像的 bytearray。

  • 新的 pixmap 方法 *samplesRGB()* 提供一个剥离了 alpha 字节的 *samples* 版本(仅限 RGB 色彩空间)。

  • 新的 pixmap 方法 *samplesAlpha()* 仅提供 *samples* 区域的 alpha 字节。

  • 文档页面集合上的新迭代器 *fitz.Pages(doc)*。

  • 新的矩阵方法 *invert()*(计算逆矩阵),*concat()*(计算矩阵乘积),*pretranslate()*(执行平移操作)。

  • 新的 *IRect* 方法 *intersect()*(与另一矩形的交集),*translate()*(执行平移操作)。

  • 新的 *Rect* 方法 *intersect()*(与另一矩形的交集),*transform()*(通过矩阵变换),*include_point()*(扩大矩形以包含一个点),*include_rect()*(扩大矩形以包含另一矩形)。

  • 已记录的方法 *Point.transform()*(通过矩阵变换点)。

  • *Matrix*、*IRect*、*Rect* 和 *Point* 类现在支持紧凑的代数形式来操作这些对象。

  • 现在可以使用调用模式 *doc.save(doc.name, incremental=True)* 进行增量保存更改。

  • PDF 的元数据现在可以通过文档方法 *set_metadata()* 进行删除、设置或更改。支持增量保存。

  • PDF 的书签(或目录)现在可以使用文档方法 *set_toc(list)* 通过列表中的条目进行删除、设置或更改。支持增量保存。


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