PyMuPDF 1.24.4 中文文档(十三)(2)https://developer.aliyun.com/article/1559480
复制 / 连接 / 合并
读取 PDF 文件并解析其内容以进行进一步处理的速度有多快?由于批处理工具总是一次性执行所请求的任务,从头到尾完全完成,因此无法直接比较解析性能。 PDFrw 也具有惰性解析策略,这意味着它只解析在任何时刻都需要的文档部分。
因此,为了找到问题的答案,我们测量了使用每个工具将 PDF 文件复制到输出文件所需的时间,并且不做其他任何操作。
这些是每个工具使用的 Python 命令:
PyMuPDF
import pymupdf doc = pymupdf.open("input.pdf") doc.save("output.pdf")
PDFrw
doc = PdfReader("input.pdf") writer = PdfWriter() writer.trailer = doc writer.write("output.pdf")
PikePDF
from pikepdf import Pdf doc = Pdf.open("input.pdf") doc.save("output.pdf")
PyPDF2
pdfmerge = PyPDF2.PdfMerger() pdfmerge.append("input.pdf") pdfmerge.write("output.pdf") pdfmerge.close()
观察
这些是我们的运行时间发现,以秒为单位,以及与 PyMuPDF 比较的基准速率摘要:
名称 | PyMuPDF | PDFrw | PikePDF | PyPDF2 |
adobe.pdf | 1.75 | 5.15 | 22.37 | 374.05 |
artifex-website.pdf | 0.26 | 0.38 | 1.41 | 2.81 |
db-systems.pdf | 0.15 | 0.8 | 1.68 | 2.46 |
fontforge.pdf | 0.09 | 0.14 | 0.28 | 1.1 |
pandas.pdf | 0.38 | 2.21 | 2.73 | 70.3 |
pymupdf.pdf | 0.11 | 0.56 | 0.83 | 6.05 |
pythonbook.pdf | 0.19 | 1.2 | 1.34 | 37.19 |
sample-50-MB-pdf-file.pdf | 0.12 | 0.1 | 2.93 | 0.08 |
总计 | 3.05 | 10.54 | 33.57 | 494.04 |
与 PyMuPDF 比较的速率 | 1.0 | 3.5 | 11.0 | 162 |
文本提取
以下表格显示了纯文本提取持续时间。所有工具均使用其最基本的功能 - 即没有布局重新排列等。
观察
这些是我们的运行时间发现,以秒为单位,以及与 PyMuPDF 比较的基准速率摘要:
名称 | PyMuPDF | XPDF | PyPDF2 | PDFMiner |
adobe.pdf | 2.01 | 6.19 | 22.2 | 49.15 |
artifex-website.pdf | 0.18 | 0.3 | 1.1 | 4.06 |
db-systems.pdf | 1.57 | 4.26 | 25.75 | 42.19 |
fontforge.pdf | 0.24 | 0.47 | 2.69 | 4.2 |
pandas.pdf | 2.41 | 10.54 | 25.38 | 76.56 |
pymupdf.pdf | 0.49 | 2.34 | 6.44 | 13.55 |
pythonbook.pdf | 0.84 | 2.88 | 9.28 | 24.27 |
sample-50-MB-pdf-file.pdf | 0.27 | 0.44 | 8.8 | 13.29 |
总计 | 8.01 | 27.42 | 101.64 | 227.27 |
与 PyMuPDF 比较的速率 | 1.0 | 3.42 | 12.69 | 28.37 |
页面渲染
我们已经在分辨率为 150 DPI 的情况下测试了 PyMuPDF 与 pdf2jpg 和 XPDF 的渲染速度,
这些是每个工具使用的 Python 命令:
PyMuPDF
def ProcessFile(datei): print "processing:", datei doc=pymupdf.open(datei) for p in pymupdf.Pages(doc): pix = p.get_pixmap(dpi=150) pix.save("t-%s.png" % p.number) pix = None doc.close() return
XPDF
pdftopng.exe -r 150 file.pdf ./
PDF2JPG
def ProcessFile(datei): print("processing:", datei) pdf2jpg.convert_pdf2jpg(datei, "images", pages="ALL", dpi=150) return
观察
这些是我们的运行时间发现,以秒为单位,以及与 PyMuPDF 比较的基准速率摘要:
名称 | PyMuPDF | XPDF | PDF2JPG |
adobe.pdf | 51.33 | 98.16 | 75.71 |
artifex-website.pdf | 26.35 | 51.28 | 54.11 |
db-systems.pdf | 84.59 | 143.16 | 405.22 |
fontforge.pdf | 12.23 | 22.18 | 20.14 |
pandas.pdf | 138.74 | 241.67 | 202.06 |
pymupdf.pdf | 22.35 | 39.11 | 33.38 |
pythonbook.pdf | 30.44 | 49.12 | 55.68 |
sample-50-MB-pdf-file.pdf | 1.01 | 1.32 | 5.22 |
总计 | 367.04 | 646 | 851.52 |
与 PyMuPDF 比较的速率 | 1.0 | 1.76 | 2.32 |
你对这个页面有什么反馈吗?
此软件按原样提供,不提供任何明示或暗示的保证。此软件根据许可协议分发,未经许可明确授权,不得复制、修改或分发。请参阅artifex.com上的许可信息,或联系美国加利福尼亚州旧金山市 94129 Mesa 街 39 号 108A 套房的 Artifex Software Inc. 获取更多信息。
本文档涵盖了所有版本,直至 1.24.4。
[外链图片转存中…(img-h34TQaNr-1718851590737)]
变更日志
1.24.4 版本变更(2024-05-16)
- 其他:
- 修复了 sysinstall 测试在新安装之前未能删除所有先前安装的失败。
- 修复了
utils.do_links()
崩溃问题。 - 更正了 TextPage 创建代码。
- 统一各种诊断。
- 修复了
page_merge()
中的错误。
1.24.3 版本变更(2024-05-09)
- 现在 Python 模块称为
pymupdf
。fitz
仍支持向后兼容。 - 使用 MuPDF-1.24.2。
- 修复的问题:
- 修复 3357:使用 page.get_text(“text”)时 PyMuPDF==1.24.0 会卡住。
- 修复 3376:1.24.x 中消除的结果不如预期。
- 修复 3379:get_text_blocks 返回值顺序与文档不匹配。
- 修复 3381:内容流包含科学计数法中的浮点数。
- 修复 3402:无法添加包含字段间计算 JavaScript 的小部件。
- 修复 3414:缺少属性 set_dpi()。
- 修复 3430:page.get_text()在 v1.24.2 上与某些 PDF 文件导致进程冻结。
- 其他:
- 新/修改的方法:
Page.remove_rotation()
:新功能,将页面旋转设置为零但保持外观。
- 修复了检查 PDF 属性时的一些问题。
- 修复了从 sdist 构建的 pip 构建(参见讨论3360:Alpine Linux Docker 构建失败“找不到匹配的分发版本 pymupdfb==1.24.1”)。
1.24.2 版本变更(2024-04-17)
- 从版本中删除了过时的经典实现(先前作为模块
fitz_old
可用)。 - 修复的问题:
- 其他:
- 新/修改的方法:
Document.bake()
:新功能,使注释/字段内容永久化。Page.cluster_drawings()
:新功能,根据它们的几何接近性识别彼此属于的绘图项目(即矢量图形或线条艺术)。Page.apply_redactions()
:添加了新参数text
。Document.subset_fonts()
:使用 MuPDF 的pdf_subset_fonts()
替代 PyMuPDF 的代码。
- Document 类现在支持以切片形式指定的页码。
- 避免引起 MuPDF 的警告。
1.24.1 版本(2024-04-02)的变更
- 修复问题:
- 其他:
- 使用 MuPDF-1.24.1。
- 支持 ObjStm 压缩。方法
Document.save()
,Document.ez_save()
和Document.write()
现在支持新参数use_objstm
,compression_effort
和preserve_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:不要将警告记录到标准输出。
- 修复 3125:
get_pixmap
方法在一页上卡住且永远运行。 - 修复 2964:页面生成的图像存在问题。
- 其他:
- 使用 MuPDF-1.24.0。
- 添加对遮盖矢量图形的支持。
- 对表模块进行了几处修复。
- 添加将表输出为 Markdown 字符串的新方法。
- 解决计算表头对象中的错误:
现在我们允许空值作为单元格值,因为这将在需要时解决(例如在 pandas DataFrame 中)。
我们之前试图强制在所有标题单元格 bboxes 中使用 rect-like 元组,然而对于所有空列的表格来说,这是失败的。此修复使其生效,并在对应单元格字符串中构造空字符串。
现在在聚类图形的 bbox 中正确包括线条的起始 / 终止点。我们之前连接了线条的矩形 - 这没有效果,因为它总是空的。
- 如果我们无法打开文档,则改进异常文本。
- 使用新的 libclang 18 构建修复。
版本 1.23.26(2024-02-29)中的更改
- 修复问题:
- 其他:
- 改进表格检测:
- 改进检查空表格,修复确定表格标题时的错误。
- 改进包围矢量图形矩形的计算。
- 忽略更多无意义的“伪”表格
- 安装命令行 ‘pymupdf’ 命令,运行 fitz/main.py。
- 在非 Windows 系统上构建时,不要覆盖 MuPDF 的 config.h。
- 修复 Story 构造函数的 Archive 参数以匹配文档 - 现在接受单个 Archive 构造函数参数。
- 在构建时不包括 MuPDF 源代码;将在构建时自动下载。
版本 1.23.25(2024-02-20)中的更改
- 修复问题:
- 其他:
- 在构建时,能够直接指定 python-config,使用环境变量
PIPCL_PYTHON_CONFIG
。
版本 1.23.24(2024-02-19)中的更改
- 修复问题:
- 修复 3148:表格提取 - 垂直文本处理不正确
- 修复 3179:表格检测:矢量图形簇分离不正确
- 修复 3180:无法显示可选内容组:AttributeError: 模块 ‘fitz.mupdf’ 没有属性 ‘pdf_array_push_drop’
- 其他:
- 能够使用
sudo pip install
而不是 venv 测试系统安装。
版本 1.23.23(2024-02-18)中的更改
- 修复问题:
- 修复 3126:使用 pathlib.Path 初始化存档失败。
- 修复 3131:调用注释的下一个属性会引发“没有属性 .parent”警告
- 修复 3134:在 Page.get_pixmap 中使用 IRect 作为剪辑参数自 1.23.9 以来不再工作
- 修复 3140:关闭文档后 PDF 文档仍在使用中。
- 修复 3150:doc.select() 在此文档上挂起。
- 修复 3163:使用 fitz.IRect 时出现 AssertionError。
- 修复 3177:构造 Pixmap 时 Unrecognised args for Pixmap。
- 其他:
- 通过使用新的 MuPDF 函数
pdf_rearrange_pages()
改进了Document.select()
。这是对所需操作更完整(且更快速)的实现,不仅会重新排列页面,还会对目录、链接到已删除页面的链接以及可选内容定义中受影响的条目进行相关更改。 TextWriter.appendv()
:添加了small_caps
参数。- 通过 MuPDF 主版本修复了一些 valgrind 错误。
- 修复了使用 MuPDF 主版本构建时的
Document.insert_image()
。
版本 1.23.22(2024-02-12)中的更改
- 修复的问题:
- 修复 3143:doc.get_ocgs() 和 page.get_drawings() 之间 OCGs 名称解码差异。
- 修复 3139:Pixmap 调整大小需要位置参数“clip” - 即使为 None。
- 其他:
- 移除了 PyMuPDF 中对 MuPDF 函数
fz_image_size()
的使用。
版本 1.23.21(2024-02-01)中的更改
- 修复的问题:
- 其他:
- 在 set_xml_metadata() 中修复了错误,PR
3112 https://github.com/pymupdf/PyMuPDF/pull/3112>
_:修复 pdf_add_stream 元数据错误。 - 修复了
TextPage
中缺少.parent
成员的问题,从Annot.get_textpage()
中。 - 修复了
Page.add_widget()
中的错误。
版本 1.23.20(2024-01-29)中的更改
- Bug 修复:
- 修复 3100:在 get_xml_metadata 中访问错误的内部属性。
- 其他:
- 显著提高了
Document.get_toc()
的速度。
版本 1.23.19(2024-01-25)中的更改
- Bug 修复:
- 修复 3087:在指定掩码时插入图像时出现异常。
- 修复 3094:在 doc.delete_pages 中访问到错误的内部属性 TypeError: ‘<’ not supported between instances of ‘FzLocation’ and ‘int’。
- 其他:
- 在查找表格时:
- 允许在查找表格时添加用户定义的“虚拟”矢量图形。
- 确认矢量图形的包围框是否在剪切矩形内。
- 避免缓慢的矩形相交查找。
- 添加了
Font.bbox
属性。
版本 1.23.18(2024-01-23)中的更改
- Bug 修复:
- 修复 3081:doc.close() 未关闭文档。
- 其他:
- 减小了 sdist 的大小,以适应 pypi.org(通过减小两个测试文件的大小)。
- 修复了
Annot.file_info()
如果没有Desc
项的问题。
版本 1.23.17(2024-01-22)的变更
- Bug 修复:
- 修复 3062:
page_rotation_reset
不会将页面返回到原始旋转。 - 修复 3070:
update_link()
:AttributeError:‘Page’ 对象没有 ‘super’ 属性。
- 其他:
- 修复了
Page.links()
中的 bug(PR #3075)。 - 修复了
Page.get_bboxlog()
在使用层时的 bug。 - 在脚本和测试中增加对超时的支持,例如
scripts/
和tests/run_compound.py
。
版本 1.23.16(2024-01-18)的变更
- Bug 修复:
- 修复 3058:从 CMYK JPEG 创建的 Pixmap 提供 RGB 格式。
- 其他:
- 在表检测策略“lines_strict”中排除仅填充的矢量图形。
- 修复了 sysinstall 测试失败的问题。
- 在文档中,更新特征矩阵,增加有关文本编写的项目。
版本 1.23.15(2024-01-16)的变更
- Bug 修复:
- 修复 3050:python3.9 中
pix.set_pixel
在c.append( ord(i))
方面存在问题。
- 其他:
- 改进了
Page.find_tables()
的文档。
版本 1.23.14(2024-01-15)的变更
- Bug 修复:
- 其他:
- 确保在
Page.get_drawings()
中的“derotated pages” 中有效的 “re” 矩形。
版本 1.23.13(2024-01-15)的变更
- Bug 修复:
- 其他:
- 修复了
Rect.height
和Rect.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)的变更
- Bug 修复:
- 修复 3020:无法调整 PixMap 的大小。
- 其他:
- 修复了
Page.delete_image()
。
版本 1.23.9(2024-01-11)的变更
- 默认使用新的 “rebased” 实现。
- 可以通过
import fitz_old as fitz
使用旧的“经典”实现。 - 欲了解更多有关我们为何转向基于 rebase 的实现,请参阅:
github.com/pymupdf/PyMuPDF/discussions/2680
- 使用 MuPDF-1.23.9。
- Bug fixes (rebased implementation only):
- 修复 2911:
Page.derotation_matrix
返回元组而非 Matrix,基于 rebase 的实现 - 修复 2919: Rebase 版本:在合并 PDF 时 resolve_names 中的 KeyError
- 修复 2922: 允许插入命名目标链接的新功能未生效
- 修复 2943: 在使用
apply_redactions()
时出现的 ZeroDivisionError: float division by zero - 修复 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: 在某些 PDF 中使用 Python 3.12 调用
clean_contents
时发生段错误 - 修复 2905: SystemError: 返回了一个带有异常的结果
- 修复 2742: 将同一源页面的三个副本插入一个目标页面时发生的段错误
- 其他:
- 可选设置透明度到
Page.insert_htmlbox()
。 - 修复在 #2934 中提到的
add_redact_annot()
问题。 - 修复
Page.rotation()
在非 PDF 文档中返回 0 而非抛出异常。 - 修复内部四边形检测以应对任何 Python 序列。
- 修复重置的
fitz.pymupdf_version_tuple
- 之前设置为 mupdf 版本。 - 改进对 Linux 系统安装的支持,包括在 Github 上定期进行测试。
- 将
flake8
添加到scripts/gh_release.py:test_packages
中。 - 使用 MuPDF-1.23.8 中的新公共函数。
- 改进
scripts/test.py
以帮助调查 MuPDF 问题。
1.23.8 版本变更(2023-12-19)
- Bug fixes (rebased implementation only):
- 修复 2634: 对于旋转页面,
get_toc
和set_toc
的行为不一致 - 修复 2861:在 PDF 合并期间的 getLinkDict 中出现 AttributeError。
- 修复 2871:在 PDF 合并期间 getLinkDict 中出现 KeyError。
- 修复 2886:在命名链接目标的 Skeleton 中出现错误。
- Bug 修复(重定位和经典实现):
- 修复 2885:pymupdf 查找表太慢。
- 其他:
- 重定位实现:
Page.insert_htmlbox()
:使用 Story 的新的、更强大的替代Page.insert_textbox()
或TextWriter.fill_textbox()
,新增。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 版本信息,以及操作系统名称。 - 不再使用
(*args, **kwargs)
在 API 中,现在明确指定关键字参数。 - 使用新的 MuPDF Python 异常类。
- 修复了当
button_states()
指向间接对象时返回 None 的错误。 - 修复了 pillow 测试不再忽略所有错误,并在测试时安装 pillow。
- 添加了对
fitz.css_for_pymupdf_font()
的测试(使用包pymupdf-fonts
)。 - 简化了 Github Actions 的测试规范。
- 更新了
tests/README.md
。
版本 1.23.7 (2023-11-30) 中的更改:
- 重定位实现中的 Bug 修复,在经典实现中未修复的。
- Bug 修复(重定位和经典实现):
- 修复 2736:使用负值 mediabox 设置 cropbox 时失败。
- 修复 2749:RuntimeError: 结构树中的循环。
- 修复 2753:Story.write_with_links 将在 HTML 中的第一个“分页符”之后忽略所有内容。
- 修复 2812:横向页面上的 find_tables 生成了反向文本。
- 修复 2829: 尽管 #2345 已关闭,但仍打印 [cannot create /Annot for kind]
- 修复 2841: 使用 scrub 时出现意外的 KeyError
- 使用 MuPDF-1.23.7。
- 其他:
- rebase 实现:
- 将 flake8 代码检查添加到测试套件,并进行了各种修复。
- 在 Document 构造函数期间禁用诊断,以匹配经典实现。
- 对于 2553 的额外修复:版本 >= 1.22 中的无效字符
- 修复 MuPDF Bug 707324: 故事:HTML 表格行背景色重复打印错误
- 添加了
scripts/test.py
,用于 PyMuPDF git 检出的简单构建+测试。 - 添加了
fitz.pymupdf_version_tuple
,例如(1, 23, 6)
。 - 恢复了误删除的对 2345 的修复:关闭 utils.py 中的打印语句
- 在
mupdf_warnings()
返回的警告中包含任何尾随的... 重复 次...
文本(仅 rebase)。
1.23.6 版本变更(2023-11-06)
- Bug 修复:
- 修复 2553: 版本 >= 1.22 中的无效字符
- 修复 2608: 不正确的 utf32 文本提取(高低代理项被分割)
- 修复 2710: page.rect 和文本位置错误 / 与旧版本不同
- 修复 2774: 排序为 True 时,对 “?” 字符的错误编码
- 修复 2775: fitz_new 与 python3.10 或更早版本不兼容
- 修复 2777: 使用 fitz_new 时,Page.mediabox 的类型错误
- 其他:
- 使用 MuPDF-1.23.5。
- 添加了 Document.resolve_names()(仅 rebase 实现)。
1.23.5 版本变更(2023-10-11)
- Bug 修复:
- 修复 2341: 处理 LINK_GOTO 中缩放部分的负值
- 修复 2522: set_layer() 中的拼写错误 - NameError: name ‘f’ is not defined
- 修复 2548: 在调用 fitz.Page.get_text_blocks 方法时,某些 PDF 中 Fitz 卡死
- 修复 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 构建。
- 修复了 _insert_image() 中的 rebased bug。
- Bug 修复:
- 修复 2556:调用 get_cdrawings(extended=True) 时出现分段错误
- 修复 2637:Page.insert_textbox 错误地处理最后一个字,如果它开始一个新行
- 修复 2683:Windows sdist 构建失败 - 路径未加引号并使用 UNIX 的 which 命令
- 修复 2691:Page.get_textpage_ocr() 在 rebased fitz_new 版本中的 bug
- 修复 2692:Page.get_pixmap(clip=Rect()) 在 rebased fitz_new 版本中的 bug
版本 1.23.3(2023-08-31)中的更改
- 修复了 OCR 的 Tesseract 使用。
版本 1.23.2(2023-08-28)中的更改
- 修复 #2613:发布 1.23.0 不兼容 MacOS-arm64
版本 1.23.1(2023-08-24)中的更改
- 更新了 README 和包摘要描述。
- 修复了一些 Linux 安装上的问题,Python-3.10(以及可能的早期版本)中
import fitz
失败,出现ImportError: libcrypt.so.2: cannot open shared object file: No such file or directory
。 - 修复了 MacOS arm64 上的
incompatible architecture
错误。 - 修复了 Poetry 关于缺少 wheels’ RECORD 文件中条目的安装警告。
版本 1.23.0(2023-08-22)中的更改
- 添加方法
find_tables()
到 Page 对象。
这允许在任何支持的文档页面上定位表格,并通过单元格提取表格内容。 - PyMuPDF 的新的“rebased”实现。
rebased 实现可用作 Python 模块fitz_new
。它可以用作import fitz_new as fitz
的直接替换。 - Python 独立的 MuPDF 库现在在第二个名为
PyMuPDFb
的 wheel 中,pip 将自动安装它。
这是为了节省空间在 pypi.org 上 - 一个完整的发布只需要一个PyMuPDFb
wheel 对于每个操作系统。 - Bug 修复:
- 修复 #2542:
fitz.utils.scrub
属性错误,Annot
对象内没有fileUpd
属性。 - 修复 #2533:
get_texttrace
返回了一个不正确的字符边界框。 - 修复 #2537:在设置分组 RadioButton 时验证会抛出 RuntimeError:路径到 ‘V’ 具有间接引用。
- 其他变更:
- 不再支持 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 个字符。这导致当您尝试写入一个主要由“宽”字母(M,m,W,w…)组成的单词时,会导致写入的文本超出给定的矩形框。
修复仅仅将 n+1 替换为 n 的问题。 - 在小部件中添加了
script_focus
和script_blur
选项。
1.22.5 版本变更 (2023-06-21):
- 本版本使用
MuPDF-1.22.2
。 - 错误修复:
- 修复 #2365:类型为“fs”绘图的字典值不正确。
- 修复 #2391:更新同一复选框超过 1 次会自动取消选中。
- 修复 #2400:同一行文本中的间隙未填充空格。
- 修复 #2404:在版本 1.22.X 中,PDF 中的图像不会被覆盖。
- 修复 #2430:错误地减少了 Py_None 的引用计数。
- 修复 #2450:带有填充和描边操作的路径的空填充颜色和填充不透明度在版本 1.22.*中为空。
- 修复 #2462:在“get_drawing(extended=True )”处出现错误。
- 修复 #2468:尝试获取绘图时的解码错误。
- 修复 #2710:页面矩形和文本位置与旧版本不同。
- 修复 #2723:Python 3.12 的 wheel 何时可用?
- 新功能:
- 更改:现在注释支持“云”边框。
Annot.border
属性新增了clouds
项,方法Annot.set_border()
支持相应的clouds
参数。 - 更改:现在,同一单选按钮组中的单选按钮小部件在标准定义的情况下始终会被一致更新。
- 新增:在 PDF 可选内容中支持
/Locked
关键字。现在可以提取和设置/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 中的打印语句。
- 修复 #2348:提取图像返回扩展名“flate”而不是“png”。
- 修复 #2350:无法通过添加标志 PDF_FIELD_IS_READ_ONLY 使小部件(复选框)只读。
- 已修复 #2355:使用 get_toc 时出现 1.22.0 错误(AttributeError: ‘SwigPyObject’ 对象没有属性)
版本 1.22.0 中的变更 (2023-04-14)
- 此版本使用
MuPDF-1.22.0
。 - 行为变更:
- 现在文本提取包括与剪辑矩形重叠的字形;以前仅当它们完全包含在剪辑矩形内时才包括它们。
- Bug 修复:
- 已修复 #1763:交互(智能表单)形式的 PDF 计算在 pymupdf 中无效
- 已修复 #1995:在尝试时,长页 pdf 文件中的图像太高而导致 RuntimeError
- 已修复 #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:推动按钮小部件显示为复选框
- 已修复 #2210:
apply_redactions()
将 pdf 文本移动到删除后 - 已修复 #2220:
Page.delete_image()
| 对象没有属性is_image
- 已修复 #2228:打开某些 pdf 花费太多时间
- 已修复 #2238:Bug - 无法从最新版本 1.21.1 中提取数据
- 已修复 #2242:如果回调函数原型错误,Python 在
Story.element_positions()
中会静默退出 - 已修复 #2246:TextWriter 在错误的位置写入文本
- 已修复 #2248:消隐内容后,剩余文本的位置发生变化
- 已修复 #2250:文档:页面.rst 中的链接不明确或损坏
- 已修复 #2251:在加载损坏的图像时,
mupdf_display_errors
不适用于 Pixmap - 修复 #2270:
Annot.get_text("words")
- 不返回第一行单词 - 修复 #2275:insert_image:文档中指出旋转是逆时针方向的
- 修复 #2278:无法通过添加标志 PDF_FIELD_IS_READ_ONLY 将小部件(复选框)设置为只读
- 修复 #2290:
Page.get_text(“dict”)
和Fitz.get_page_images()
返回的图像格式/数据不同 - 修复 #2293:在我的系统上从 sdist 安装时出现 68 个测试失败的问题
- 修复 #2300:树中存在过多的递归(父节点),导致程序终止
- 修复 #2322:使用裁剪生成 add_highlight_annot 时出现“数字超出范围”的错误
- 其他:
- 在所选按钮表单字段的底层注释对象中添加了键“/AS(是)”。
- 删除了未使用的
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/
目录的当前目录,则向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.txt
和docs/changes.rst
的重复。
- 构建:
- 添加了
pyproject.toml
文件以改善使用 pip 等构建的过程。
PyMuPDF 1.24.4 中文文档(十三)(4)https://developer.aliyun.com/article/1559483