更新日志#
版本 1.25.2 (2025-01-17) 的更改
修复的问题:
其他:
使用Python内置的glyphname <> unicode转换。
提高位图颜色反转的速度。
为char_flags字典添加新成员,例如允许检测不可见文本。
检测TextPage输出中的图像掩膜。
添加了
Pixmap.pil_image()
。
版本 1.25.1 的变更 (2024-12-11)
版本 1.25.0 的变更 (2024-12-05)
使用 MuPDF-1.25.1。
修复的问题:
版本 1.24.14 的变更 (2024-11-19)
使用 MuPDF-1.24.11。
修复的问题:
修复 3448: get_pixmap 函数移除了表格,仅保留了内容
修复 3758: 使用 add_redact_annot/apply_redactions 时出现“malloc(): 检测到未对齐的 tcache 块 已终止 (核心转储)”
修复 3813: 故事:带有嵌套无序列表的有序列表计数损坏
修复 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)
修复的问题:
版本 1.24.12 的变更 (2024-10-21)
修复的问题:
当前支持的Python版本是3.9-3.13。
由于结束生命周期,放弃对Python-3.8的支持。
添加对Python-3.13的支持,因为现在已经发布。
版本 1.24.11 的更改 (2024-10-03)
使用 MuPDF-1.24.10。
修复的问题:
轮子现在使用Python稳定ABI:
每个平台都有一个PyMuPDF的轮子。
每个轮子都支持所有受支持的Python版本。
每个 wheel 使用最旧的支持 Python 版本构建(当前为 3.8)。
没有PyMuPDFb轮子。
其他:
对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: 无效的OCGs在SVG图像创建时未被忽略
修复 3603: ObjStm 压缩和 PDF 线性化无法一起工作
固定 3650: 每个字母之间插入换行
修复 3661: 更新文档以检查 /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)
修复的问题:
其他:
修正了codespell发现的各种拼写错误。
改进了我们在Windows上修改MuPDF默认配置的方法。
使文本搜索能够处理连字。
版本 1.24.7 的更改 (2024-06-26)
版本 1.24.6 的变更(2024-06-25)
使用 MuPDF-1.24.4
修复的问题:
修复 3599: Story.fit_width() 有一条奇怪的线
修复 3594: 亚马逊可持续发展报告提取乱码
修复 3591: Page.get_drawings() 中的 'width' 返回的宽度为 0
修复 3561: 零除错误:使用 page.apply_redactions() 时浮点数除以零
修复 3559: 当在insert_htmlbox中使用空的H1 H2 H3 H4等元素时出现SegFault 11
修复 3539: 添加点状网格线检测到表格识别
修复 3519: get_toc(simple=False) 属性错误: ‘Outline’ 对象没有属性 ‘rect’
修复 3510: page.get_label() 在文档的第一页上获取错误的标签
修复 3494: 1.24.2/1.24.3: 使用 subset_fonts 和 insert_pdf 时引入了多余的字符
已修复 3470: subset_fonts错误退出,没有异常/警告
修复 3400: set_toc 修改一些旋转页面在 pymupdf 1.24.2 中的链接坐标
修复 3347: 针对高度不同的页面上链接到点的错误
修复 3237: Set_metadata() 不工作
修复 3493:将PyMuPDF与其他库隔离;当PyMuPDF与其他库(如GdkPixbuf)一起加载时出现问题
其他:
由于使用了常量临时文件名,导致PyMuPDF的固定并发使用。
将musllinux x86_64轮子添加到发布中。
添加了更清晰的版本信息:
pymupdf.pymupdf_version
.pymupdf.mupdf_version
.pymupdf.pymupdf_date
.
版本 1.24.5 的变更 (2024-05-30)
修复的问题:
其他:
一些更多的修复,使用MuPDF浮动格式。
移除/禁用了某些不必要的诊断。
修复了 utils.do_links() 崩溃问题。
实验性的新功能
pymupdf.apply_pages()
和pymupdf.get_text()
。地址错误标签生成,用于标签样式“a”和“A”。
版本 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。
修复的问题:
其他:
新/修改的方法:
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: 页面生成的 image 有问题 page.get_pixmap() 函数
其他:
使用 MuPDF-1.24.0。
添加对矢量图形的编辑支持。
对表模块的几个修复
添加用于将表格输出为markdown字符串的新方法。
处理计算表头对象中的错误:
我们现在允许 None 作为单元格值,因为在需要的地方会解决这个问题(例如,在 pandas DataFrame 中)。
我们之前尝试在所有表头单元格的边界框中强制使用矩形样式的元组,但对于所有列均为 None 的表格,这会导致失败。此修复启用此功能,并在对应单元格字符串中构造一个空字符串。
我们现在在聚类图形的边界框中正确包含线条的起止点。我们之前将线的矩形连接在一起 - 这没有任何效果,因为它总是为空。
如果我们无法打开文档,改进的异常文本。
修复了与新 libclang 18 的构建。
版本 1.23.26 的变化(2024-02-29)
修复的问题:
其他:
版本 1.23.25 的更改 (2024-02-20)
修复的问题:
其他:
构建时,可以直接指定 python-config,使用环境变量
PIPCL_PYTHON_CONFIG
。
版本 1.23.24 的变更 (2024-02-19)
修复的问题:
其他:
能够使用
sudo pip install
测试系统安装,而不是使用 venv。
版本 1.23.23 的更改(2024-02-18)
修复的问题:
其他:
改进了
Document.select() 通过 使用 新的 MuPDF 函数 `pdf_rearrange_pages()
。这是一个更完整(且更快)的实现,不仅会重新排列页面,还会对目录、链接到删除页面的内容以及可选内容定义中的相关条目进行相应的更改。TextWriter.appendv()
: 添加了small_caps
参数.修复了一些与MuPDF主版本相关的valgrind错误。
修复了
Document.insert_image()
在与 MuPDF master 构建时的问题。
版本 1.23.22 的更改(2024-02-12)
修复的问题:
其他:
从 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)
错误修复:
修复 3100: 在get_xml_metadata中访问了错误的内部属性
其他:
显著提高了
Document.get_toc()
的速度。
版本 1.23.19 的变更 (2024-01-25)
错误修复:
其他:
查找表时:
允许在查找表时添加用户定义的“虚拟”矢量图形。
确认矢量图形的包围框在剪辑矩形内。
避免矩形交集查找缓慢。
添加了
Font.bbox
属性。
版本 1.23.18 的变更 (2024-01-23)
错误修复:
修复 3081: doc.close() 没有关闭文档
其他:
减少了sdist的大小以适应pypi.org(通过减小两个测试文件的大小)。
修复
Annot.file_info()
如果没有Desc
项。
版本 1.23.17 的更改 (2024-01-22)
错误修复:
其他:
修复了
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)) 中出现问题
其他:
改进了 Page.find_tables() 的文档。
版本 1.23.14 的变化 (2024-01-15)
错误修复:
其他:
确保在
Page.get_drawings()
中使用去旋转的页面时有效的“re”矩形。
版本 1.23.13 的更改 (2024-01-15)
错误修复:
其他:
固定
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)
错误修复:
修复 3020: 无法调整 PixMap 的大小
其他:
固定 Page.delete_image()。
版本 1.23.9 (2024-01-11) 的变更
默认使用新的“重基”实现。
旧的“经典”实现可以通过
import fitz_old as fitz
获得。有关我们为什么要更改为重新基于的实现的更多信息,请参见: https://github.com/pymupdf/PyMuPDF/discussions/2680
使用 MuPDF-1.23.9。
错误修复(仅重构实现):
修复 2911: Page.derotation_matrix 返回一个元组而不是一个带有重基实现的矩阵
修复 2919: 重基版本: 在合并pdf时出现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: 在某些pdf上尝试在python 3.12中调用clean_contents时发生段错误
修复 2905: 系统错误: <内置函数 TextPage_extractIMGINFO> 返回了一个设置了异常的结果
修复 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)
错误修复(仅重构实现):
问题修复(重基和经典实现):
修复 2885: pymupdf 查找表格太慢
其他:
重基实现:
Page.insert_htmlbox()
:新的,更强大的替代方案,代替Page.insert_textbox()
或TextWriter.fill_textbox()
,使用Story。Story.fit*()
: 将一个故事适配到一个扩展的矩形的新方法。Story.write_with_links()
: 添加对外部链接的支持。Document.language()
: 修正为使用 MuPDF 的新mupdf.fz_string_from_text_language2()
。Document.subset_fonts()
- 修复。修复了内部
Archive._add_treeitem()
方法。修复了
fitz_new.__doc__
以包含 PyMuPDF 和 Python 版本信息,以及操作系统名称。删除了在 API 中使用
(*args, **kwargs)
,现在我们明确指定关键字参数。使用新的 MuPDF Python 异常类。
修复了一个错误:当
/AP
指向一个间接对象时,button_states()
返回 None。修复了对枕头测试不忽略所有错误的问题,并在测试时安装枕头。
添加了对
fitz.css_for_pymupdf_font()
的测试(使用包pymupdf-fonts
)。简化的Github Actions测试规范。
更新了
tests/README.md
。
版本 1.23.7 的变更 (2023-11-30)
在重新基准实现中修复的错误,经典实现中未修复:
问题修复(重基和经典实现):
使用 MuPDF-1.23.7。
其他:
重基实现:
将flake8代码检查添加到测试套件,并进行了各种修复。
在文档构造函数期间禁用诊断,以匹配经典实现。
对 2553 的额外修复:版本中的无效字符 >= 1.22
修复 MuPDF Bug 707324: 故事: HTML 表格行背景颜色重复不正确
添加了
scripts/test.py
,用于简单构建和测试 PyMuPDF git 检出。添加了
fitz.pymupdf_version_tuple
,例如(1, 23, 6)
。恢复错误回退的修复 2345: 关闭 utils.py 中的打印语句
在
mupdf_warnings()
(仅限重基)返回的警告中包含任何尾随... repeated
文本。times...
版本 1.23.6 的更改(2023-11-06)
错误修复:
其他:
使用 MuPDF-1.23.5。
添加了 Document.resolve_names()(仅限基于变基的实现)。
版本 1.23.5 的变更 (2023-10-11)
错误修复:
修复 2341: 在linkDest的LINK_GOTO的缩放部分处理负值
修复 2522: set_layer() 中的拼写错误 - NameError: name ‘f’ is not defined
修复 2548: Fitz在调用fitz.Page.get_text_blocks方法时,在某些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。
修复系统安装的优化标志。
修复了在表格识别过程中剪切参数无效的问题
支持枕头模式“RGBa”
支持额外的单词分隔符
支持检查有效的PDF名称对象
版本 1.23.4 的更改(2023-09-26)
改进的构建说明。
修复了重基于实现中的Tesseract。
对系统MuPDF的构建/安装进行改进。
修复了Pyodide构建。
修复了 _insert_image() 中的重基线错误。
错误修复:
版本 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和包摘要描述。
修复了某些Linux安装中Python-3.10(可能还有之前的版本)的问题,其中
import fitz
失败,出现ImportError: libcrypt.so.2: 无法 打开 共享 对象 文件: 没有 这样的 文件 或 目录
。修复了在 MacOS arm64 上的
incompatible architecture
错误。修复了来自Poetry关于wheels' RECORD文件中缺少条目的安装警告。
版本 1.23.0 的变化 (2023-08-22)
将方法
find_tables()
添加到 Page 对象。这允许在任何支持的文档页面上定位表格,并通过单元格提取表格内容。
新的“重基”实现的PyMuPDF。
重新基准的实现可作为 Python 模块
fitz_new
使用。它可以作为import fitz_new as fitz
的替换。与Python无关的MuPDF库现在在第二个包中,名为
PyMuPDFb
,将由pip自动安装。这是为了在 pypi.org 上节省空间 - 一个完整的发布只需要一个
PyMuPDFb
的轮子用于每个操作系统。错误修复:
其他更改:
放弃对 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在最后一个循环中有一个错误,添加了n+1个字符,而实际测量的是n个字符的宽度。 这导致了fill_texbox中的一个错误,当你尝试写一个主要由“宽”字母(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: 在PDF中给图像加黑线不会去除1.22.X版本中的底层内容。
修复 #2430: 错误地减少了 Py_None 的引用计数。
修复 #2450: 具有填充和描边操作的路径的填充颜色和填充不透明度为空,适用于1.22.*
修复 #2462: 在“get_drawing(extended=True )”处出错
修复 #2468: 获取图纸时解码错误
固定 #2710: page.rect 和文本位置错误 / 与旧版本不同
已修复 #2723: Python 3.12 的 wheel 什么时候可以使用?
新功能:
已更改 注释现在支持“阴 cloudy”边框。
Annot.border
属性新增项目clouds
, 而方法Annot.set_border()
支持相应的clouds
参数。更改 在同一 RB 组中的单选按钮小部件 现在会一致地更新 如果该组以标准方式定义。
增加 对 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
。错误修复:
版本 1.22.0 的更改 (2023-04-14)
此版本使用
MuPDF-1.22.0
。行为变化:
文本提取现在包括与裁剪矩形重叠的字形;之前它们仅在完全包含在裁剪矩形内时才被包含。
错误修复:
修复 #1763: Interactive(smartform) 表单 PDF 计算在 pymupdf 中不起作用
修复 #1995: RuntimeError: image is too high for a long paged pdf file when trying
修复 #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: 错误 - 无法从最新版本 1.21.1 中提取文件数据
修复 #2242: 如果回调函数原型错误,Python 在
Story.element_positions()
中静默退出修复 #2246: TextWriter 在错误的位置写入文本
已修复 #2248: 在编辑内容后,其余文本的位置发生变化
修复 #2250: 文档:页面中的链接不清晰或损坏
固定 #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 使用 clip 在 PDF 中生成 “数字超出范围” 错误
其他:
将键“/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/
目录,则向stderr
输出警告,因为这可能会破坏fitz
模块的导入。例如,当当前目录是 PyMuPDF 的检出时,会发生这种情况。
文档:
一般返工:
介绍一个新的主页和新的目录。
结构更新以包含新的关于部分。
比较与性能图表。
包括附录中的性能方法论。
更新conf.py以理解单个反引号作为代码。
将双反引号转换为单反引号。
删除冗余文件。
改进
insert_file()
文档。get_bboxlog()
: 添加了可选的layers
到get_bboxlog()
。Page.get_texttrace()
: 添加新字典键layer
,可选内容组的名称。在安装文档中提到使用 Python venv。
将缺失的修复添加到版本1.21.1的变更日志中。
修复了许多指向PyMuPDF-Utilities仓库脚本的链接。
避免重复
changes.txt
和docs/changes.rst
。
构建
新增了
pyproject.toml
文件,以改善使用 pip 等的构建。
版本 1.21.1 的变更 (2022-12-13)
此版本使用
MuPDF-1.21.1
。错误修复:
修复 #2110: 当完全嵌入的字体占用多个对象时,仅部分提取
已修复 #2094: 矩形检测逻辑
修复 #2088: 目录中的命名链接未设置目标点
修复 #2087: 带有过滤器“[/FlateDecode/JPXDecode]”的图像未被提取
修复 #2086: Document.save() owner_pw & user_pw 具有缓冲区溢出错误
修复 #2076: fitz.py中的段错误
修复 #2057: Document.save 垃圾参数在 PyMuPDF 1.21.0 中无法工作
修复 #2051: 缺失的 DPI 参数
修复 #2048: TextPage 和 bbox 的大小在最新版本 1.21.0 中无效
修复 #2045: 系统错误: <内置函数 Page_get_texttrace> 返回了一个设置了错误的结果
修复 #2039: 1.21.0 无法与系统 libmupdf 构建
修复 #2036: Archive::Archive 定义了两次
其他
在链接URI字符串中“&zoom=nan”。
添加新的页面实用方法
Page.replace_image()
和Page.delete_image()
。
文档:
版本 1.21.0 的变化 (2022-11-8)
此版本使用
MuPDF-1.21.0
。新功能:故事。
为Python-3.11添加了轮子。
错误修复:
修复 #1701: 自定义图像插入故障。
修复 #1854:
Document.delete_pages()
拒绝关键字参数。修复 #1868: 在
page.apply_redactions()
处发生访问冲突错误。修复 #1909: 使用
fontname="Helvetica"
添加文本可能会静默失败。修复 #1913:
draw_rect()
: 如果未指定颜色,则不遵循宽度。修复 #1917:
subset_fonts()
: 使其能够关闭标准输出。修复 #1936: 矩形检测可能不正确,产生错误的输出。
修复 #1945: 在使用
clean=True
保存时出现分段错误。修复 #1965:
pdfocr_save()
硬崩溃。修复 #1971: 使用
get_drawings()
时出现段错误。修复 #1946:
block_no
和block_type
在get_text()
文档中交换。修复 #2013: AttributeError: ‘Widget’ 对象在删除小部件时没有属性 ‘_annot’。
核心代码的其他修改:
修复了各种编译器警告和一个序列点错误。
增加了对Memento构建的支持。
修复了在测试套件中由Memento检测到的泄漏。
修复了在set_name()和set_rect()中处理异常的问题。
允许使用最新的MuPDF构建,以便对PyMuPDF主版本进行常规测试。
处理某些注释类型设置矩形时的新MuPDF异常。
减少了MuPDF的config.h和PyMuPDF的_config.h之间的外观差异。
应对MuPDF API的各种变化。
其他:
修复了文档中的各种损坏链接和拼写错误。
提到在MacOS上安装
swig-python
的内容为#875。添加了(未经测试)适用于 macos-arm64 的轮子。
版本 1.20.2 的更改
此版本使用
MuPDF-1.20.3
。修复 #1787。
修复Unix系统上的链接问题。修复 #1824. 在应用与透明图像重叠的遮盖时发生SegFault。 (已在
MuPDF-1.20.3
中修复。)文档的改进:
关于从源代码构建的改进信息在
docs/installation.rst
中。明确了内存分配设置
JM_MEMORY` in ``docs/tools.rst
.修复了指向PDF参考手册的链接,位于
docs/app3.rst
。修复了在OpenBSD上构建html文档的问题。
将旧的
docs/faq.rst
移动到单独的docs/recipes-*
文件中。
已删除一些未使用的文件和目录:
安装/
docs/wheelnames.txt
版本 1.20.1 的更改
修复 #1724. 修复在FreeBSD上的构建问题。
修复 #1771.
linkDest()
对re.match()
的调用存在问题,问题在 1.20.0 中引入。修复 #1751.
get_drawings()
和get_cdrawings()
之前总是返回closePath=False
。修复 #1645。默认的自由文本注释颜色现在为黑色。
对 Sphinx 生成的文档的改进:
使用带增强的readthedocs主题。
将
.txt
文件重命名为具有.rst
后缀
版本 1.20.0 的变化
本版本使用 MuPDF-1.20.0
,发布于2022-06-15。
处理新的MuPDF链接URI格式,已从
#
更改为, , #page=
。&zoom= , ,
在
tests/test_insertpdf.py
中,使用新的参考输出joined-1.20.pdf
。我们还检查新的输出值与旧值大致相同。
修复 #1738.
pdf_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上构建轮子。
版本 1.19.6 的变更
修复 #1620。由 TextPage 创建的
Page.get_textpage()
现在将正确释放(修复内存泄漏)。修复 #1601。文档打开错误现在应该更加简洁,更易于理解。在此过程中,添加了两个特定于PyMuPDF的Python异常。
EmptyFileError
– 当尝试从空文件或零长度内存创建一个 Document (fitz.open()
) 时引发。FileDataError
– 当MuPDF遇到无法修复的文档结构问题时引发。
添加
Page.load_widget()
以获得PDF字段的xref。添加 字典
pdfcolor
,提供大约 500 种作为 PDF 颜色值定义的颜色,以小写颜色名称作为键。添加 代数功能到 Quad 类。现在这些对象也可以相互相加和相减,并且可以与数字和矩阵相乘。
添加 了新的常量,定义了默认的文本提取标志,以便更方便地处理。它们的命名约定类似于
TEXTFLAGS_WORDS
对于page.get_text("words")
。请参见 文本提取标志默认值。已更改
Page.annots()
和Page.widgets()
以检测和防止在迭代器循环中 (非法地) 重新加载页面,通过Document.reload_page()
。这样做会使解释器崩溃。文档中说明了在合理设计的循环中进行注释和小部件批量更新的干净方法。更改若干内部工具函数,使其成为独立的(“SWIG 内联”),而不是成为工具类的一部分。这在其他一些方面提高了几何对象创建的性能。
更改
Document.update_stream()
以始终接受流更新 - 无论后面的字典对象是否已经是一个流。因此,之前的new
参数现在被忽略,并将在 v1.20.0 中删除。
版本 1.19.5 的更改
修复 #1521。这与问题 #1510 的最终原因相同。
已修复 #1513。一些可选内容功能不支持非ASCII字符。
修复 #1510。支持更多软蒙版图像子类型。
修复 #1507. 对在大纲链中的项目进行免疫,这些项目是
"null"
对象。修复 重新打开了 #1417。 (“打开的文件过多”). 这是因为对 MuPDF 的
fz_drop_document()
调用不足。此修复也解决了 #1550。修复了几个与错误设置文本跨度原点有关的未记录问题
point_like
。修复了 在方法
Page.get_texttrace()
中计算字符边界框时未记录的错误,当文本是 翻转的 (与仅旋转相对)。添加 项目到
image_properties()
返回的字典中:orientation
和transform
报告自然图像方向(EXIF 数据)。新增 方法
Document.xref_copy()
。它将使给定的目标 PDF 对象成为源对象的精确副本。
版本 1.19.4 的更改
修复 #1505。免疫对循环轮廓项目的影响。
修复 #1484. 现在在所有情况下返回正确的 CropBox 坐标。
修复 #1479。
修复 #1474. TextPage 对象现在可以正确删除了。
添加 页面 方法和属性用于 PDF
/ArtBox
,/BleedBox
,/TrimBox
。增加 全局属性
TESSDATA_PREFIX
以便于检查 OCR 支持。已更改
Document.xref_set_key()
,使得如果字典键的值设置为"null"
,则会物理移除字典键。已更改
Document.extract_font()
可选择性地返回字典(而不是元组)。
版本 1.19.3 的更改
此补丁版本对Pixmap进行了小幅改进,并且还修复了一些重要问题。
修复 #1351。恢复了在 v1.18.15 中引入内存增长的代码。
已修复 #1417。开发了绕过打开文件句柄增长的方法,使用
Document.insert_pdf()
。修复 #1418。开发了使用
Document.insert_pdf()
的内存增长绕过方法。修复 #1430. 开发了用于大量文档页面位图生成的变通方法。
修复 #1433。解决了PyMuPDF文本处理中的某些Type 3字体的bbox错误。
添加
Pixmap.color_topusage()
以确定最常用颜色的占比。解决了 #1397。添加了
Pixmap.warp()
,它从给定的任意凸四边形中生成一个新的像素图。添加
Annot.irt_xref
和Annot.set_irt_xref()
以查询或设置/IRT
(“响应于”)属性的注释。实现 #1450。添加
Rect.torect()
和IRect.torect()
用于计算转换到给定其他矩形的矩阵。已更改
Pixmap.color_count()
以同时返回每种颜色的数量。已更改
Page.get_texttrace()
以便在span["dir"] != (1, 0)
时也返回正确的 span 和字符边界框。
版本 1.19.2 的变更
此补丁版本对 Page.get_drawings()
实施了小幅改进,并且修复了一些重要问题。
修复 #1388. 修复了在插入或更新注释时间歇性内存损坏的问题。
修复 #1375。已修正“words”和“dict”选项返回的行号之间的不一致。
修复 #1364。现在对
recover_span_quad()
中的"rawdict"
跨度的检查工作正常。修复 #1342。修正了在
Page.show_pdf_page()
中对矩形无限性的检查。已更改
Page.get_drawings()
,Page.get_cdrawings()
以返回由矩形覆盖的区域方向指示器。这实现了 #1355。此外,矩形和四边形的识别率显著提高。更改了所有文本搜索和提取方法,默认将新的
flags
选项TEXT_MEDIABOX_CLIP
设置为开启。该位会自动抑制完全位于页面外的所有字符(在该概念适用于文档类型的情况下)。这消除了使用clip=page.rect
或类似方法来省略可见区域外的文本的必要。添加 参数
"dpi"
到Page.get_pixmap()
和Annot.get_pixmap()
。当提供时,参数"matrix"
将被忽略,并创建一个具有所需每英寸点数的 Pixmap。添加 属性
Pixmap.is_monochrome
和Pixmap.is_unicolor
以允许快速检查图像属性。涉及 #1397。添加 方法
Pixmap.color_count()
以确定位图中的唯一颜色。添加 布尔参数
"compress"
到 PDF 文档方法Document.update_stream()
。解决了 / 启用了 #1408 的解决方案。
版本 1.19.1 的更改
这是支持 MuPDF v1.19.0 的第一个补丁版本。除了一个错误修复,它还包括对 OCR 支持的重要改进以及将提取的文本按标准阅读顺序排序的选项,“从左上角到右下角”。
修复 #1328. “words” 文本提取再次返回正确的
(x0, y0)
坐标。已更改
Page.get_textpage_ocr()
: 现在支持参数dpi
来控制OCR质量。还可以选择是对整页进行OCR还是仅对页面显示的图像进行OCR。更改
Page.get_drawings()
和Page.get_cdrawings()
以自动将颜色转换为 RGB 颜色元组。 实现了 #1332。 类似的更改也适用于Page.get_texttrace()
。更改了
Page.get_text()
以支持一个参数sort
。如果设置为True
,输出将方便地进行排序。
版本 1.19.0 的更改
这是支持MuPDF 1.19.*的第一个版本,发布日期为2021-10-05。与之前的版本1.18.*相比,它引入了许多新功能。
PyMuPDF 现已集成 Tesseract OCR 支持,该功能在 MuPDF v1.18.0 中已经存在。
支持的图像可以通过它们的 Pixmap 进行OCR处理,生成带有文本层的1页PDF。
所有支持的文档页面(即不仅仅是PDF),可以使用专门的文本提取方法进行OCR处理。结果是标准文本和OCR文本的混合(取决于页面的哪个部分被认为需要OCR处理),可以在不受限制的情况下进行搜索和提取。
所有这些都需要独立安装 Tesseract。MuPDF 实际上(仅)需要 Tesseract 的
"tessdata"
文件夹的位置,语言支持数据存储在这里。此位置必须作为环境变量TESSDATA_PREFIX
可用。
一个新的MuPDF功能是记录PDF更新,这个功能在这个PyMuPDF版本中也得到了支持。更改可以被记录、回滚或重放,从而实现对PDF文档完整性的全新控制级别——类似于现代数据库系统中的功能。
第三个特点(与新版本的MuPDF无关)包括检测页面对象相互覆盖或隐藏的能力。现在,例如可以看到文本被图形或图像覆盖。
更改 重要几何概念的术语和含义:矩形现在被描述为 有限、有效 或 空,这些术语的定义也发生了变化。现在矩形具体被认为是“开放的”:并不是所有的角和边都被视为矩形的一部分。请阅读 Rect 部分以获取详细信息。
添加 新参数
"no_new_id"
到Document.save()
/Document.tobytes()
方法。使用它可以抑制更新文档的第二个项目/ID
,该项目在PDF中表示原始文件已被更新。如果PDF还没有/ID
,那么也不会创建新的。添加 了一个 日志功能 用于 PDF 更新。这允许记录更改、撤销或重做它们,或将日志保存以便后用。参考
Document.journal_enable()
和相关内容。添加了 新的 Pixmap 方法
Pixmap.pdfocr_save()
和Pixmap.pdfocr_tobytes()
,这些方法生成一个包含该位图作为PNG图像的1页PDF,并带有OCR文本层。添加
Page.get_textpage_ocr()
,该方法对页面执行光学字符识别,然后提取结果并与“普通”页面内容一起存储在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.samples_ptr
,Python “指针”到位图的像素区域。允许更快的创建(因素超过800倍)的Qt图像。
版本 1.18.16 的更改
修复 了问题 #1184。现在PDF中的现有PDF小部件字体被接受(即,不会强制更改为基本14种字体)。
修复了 问题 #1154。当
clip
被指定时,文本搜索命中现在应该是正确的。已修复 问题 #1152。
修复 问题 #1146.
添加了
Link.flags
和Link.set_flags()
到 Link 类。实现了增强请求 #1187。添加 选项以 模拟
TextWriter.fill_textbox()
输出以预测给定文本在文本框中占据的行数。增加了 文本输出支持作为子命令
gettext
到fitz
CLI 模块。最重要的是,现在支持原始 物理文本布局 再现。
版本 1.18.15 的变化
解决了 问题 #1088。现在,使用
fill_color=[]
参数在Annot.update()
和fill=[]
在Annot.set_colors()
中删除注释的填充颜色应该都能正常工作。修复 问题 #1081.
Document.subset_fonts()
: 修复了一个错误,该错误导致某些字体的字符宽度不正确。修复 问题 #1078.
Page.get_text()
和其他与文本提取相关的方法:更改了 TextPageflags
参数的默认值。现在所有空白和ligatures
都得以保留。修复 问题 #1085。旧的 snake_cased 别名
fitz.detTextlength
现在已正确定义。更改
Document.subset_fonts()
现在将正确地使用适当的六个字母的大写标签为字体子集加前缀,符合PDF规范。新增 方法
Widget.button_states()
,该方法返回按钮类型字段在被设置为“开”或“关”时可能具有的值。添加 对带有 小型大写 字母的文本的支持到 字体 和 文本写入器 类。这在他们的多个方法中通过一个额外的布尔参数
small_caps
反映出来。
版本 1.18.14 的更改
完成 了新的“蛇形命名”的方法和属性的实现,它们以前是“驼峰命名”的,在许多方面都显得尴尬。在本文件的最后,有一节 已弃用名称,其中包含更多背景信息和旧名称与新名称的对应关系。
修复 问题 #1053.
Page.insert_image()
: 当给定时,在哈希计算中包括图像掩码。修复 问题 #1043。将
Pixmap.getPNGdata
添加到Pixmap.tobytes()
的别名中。修复了 计算绘制路径的包围矩形时的内部错误,该路径由
Page.get_drawings()
返回。修复 了一个内部错误,此错误偶尔会导致通过
TextWriter.fill_textbox()
输出文本时出现循环。添加
Font.char_lengths()
,该函数返回一个字符串的字符宽度元组。添加了 更多指定页面的方式在
Document.delete_pages()
中。现在可以指定一个序列(列表、元组或范围),并且可以使用 Pythondel
语句。在后一种情况下,Pythonslices
也被接受。已更改
Document.del_toc_item()
,该函数禁用目录的单个项目:之前,标题文本被删除。现在,完整的项目将由支持的查看器显示为灰色。
版本 1.18.13 的更改
修复 问题 #1014。
修复 计算图像边界框时的内部内存泄漏 –
Page.get_image_bbox()
。新增 对PDF文件尾部的低级访问和修改的支持。适用于
Document.xref_get_keys()
、Document.xref_get_key()
和Document.xref_set_key()
。添加 维护 PDF 元数据中私有条目的文档。
添加 处理透明图像插入的文档,
Page.insert_image()
。添加
Page.get_image_rects()
,这是Page.get_image_bbox()
的改进版。已更改
Document.delete_pages()
以支持多种指定要删除页面的方式。实现了 #1042。更改
Page.insert_image()
以接受文件中现有图像的xref。这允许在页面之间“复制”图像,并进行非常快速的多次插入。更改
Page.insert_image()
以便同时接受整数参数alpha
。用于性能提升。已更改
Pixmap.set_alpha()
以支持新参数,用于与其 alpha 值预先乘法的颜色,并将特定颜色设置为完全透明(例如白色)。已更改
Document.embfile_add()
以自动设置创建和修改日期时间。相应地,Document.embfile_upd()
自动维护修改日期时间 (/ModDate
PDF 键),并且Document.embfile_info()
相应地报告这些数据。此外,嵌入文件的关联“集合项目”通过其xref
包含。这支持 PDF 组合应用程序的开发。
版本 1.18.11 / 1.18.12 的更改
修复 问题 #972。改善了源分发材料的布局。
修复 了问题 #962。稳定了从源代码生成 PyMuPDF 的 Linux 发行版检测。
新增:
Page.get_xobjects()
返回Document.get_page_xobjects()
的结果。新增:
Page.get_image_info()
提供页面上所有显示图像的元信息。新增:
Tools.mupdf_display_warnings()
允许开启/关闭显示 MuPDF 生成的警告。默认设置为关闭。添加:
Document.ez_save()
作为Document.save()
的便利别名,具有一些不同的默认值。更改: 文档页面的图像提取现在还包含图像的 变换矩阵。 这涉及到
Page.get_image_bbox()
和Page.get_text()
的 DICT、JSON、RAWDICT 和 RAWJSON 变体。
版本 1.18.10 的变更
修复 了问题 #941。为
DisplayList.get_pixmap()
和DisplayList.get_textpage()
添加了旧别名。修复 问题 #929。稳定了使用
Document.scrub()
移除 JavaScript 对象的过程。修复 问题 #927。在重构的
TextWriter.fill_textbox()
中移除了一个循环。更改
Document.xref_get_keys()
和Document.xref_get_key()
以允许访问 PDF 预告字典。这可以通过将-1
用作 xref 编号参数来完成。增加了多个函数,用于重建通过
Page.get_text()
选项“dict”和“rawdict”提取的文本行、跨度和字符的四边形。请参见recover_quad()
和相关函数。添加
Tools.unset_quad_corrections()
以 suppress 字符四分之一修正(偶尔需要用于错误的字体)。
版本 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()
,该功能计算跨度的四边形。这个函数可以用于正确标记使用Page.get_text()
的“dict”或“rawdict”选项提取的文本。
版本 1.18.8 的变化
这只是一个错误修复版本。我们提前发布是因为潜在的广泛使用的函数。
修复 问题 #881. 修复了在使用
Page.insert_image()
从文件或内存插入图像时的内存泄漏。修复 问题 #878。
pathlib.Path
对象现在应该正确处理文件路径层次结构。
版本 1.18.7 的更改
增加了一个实验性的
Document.subset_fonts()
,该方法根据PDF中文本使用情况减少合格字体的大小。实现了 #855。实现的 请求 #870:
Document.convert_to_pdf()
现在也支持 PDF 文档。重命名
Document.write
为Document.tobytes()
以提高清晰度。但过时的名称在一段时间内仍然可用。实现 请求 #843:
Document.tobytes()
现在支持线性化的 PDF 输出。Document.save()
现在也支持写入 Python 文件对象。此外,open 函数现在也支持 Python 文件对象。已修复 问题 #844。
修复 问题 #838。
修复 问题 #823。增加更多逻辑以更好地支持OCR文本输出(Tesseract,ABBYY)。
修复 问题 #818。
修复 问题 #814。
增加了
Document.get_page_labels()
,该函数返回PDF的页面标签定义列表。新增
Document.has_annots()
和Document.has_links()
以检查这些对象类型是否存在于PDF中的任何位置。添加 了专家级低级函数,以简化对PDF对象源的查询和修改:
Document.xref_get_keys()
列出对象xref
的键,Document.xref_get_key()
返回键的类型和内容,Document.xref_set_key()
修改键的值。添加 参数
thumbnails
到Document.scrub()
以允许移除页面缩略图像。改进的 文档,说明如何为非水平文本添加有效的文本标记注释。
我们继续将方法和属性的命名从 “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。通过使用“较小的字形高度”选项,可以提取完整的页面文本。
修复 问题 #768。
修复了 问题 #750。
修复 问题 #739。 “dict”、“rawdict”和相应的JSON输出变体现在有两个新的span键:
"ascender"
和"descender"
。这些浮动值代表特殊的字体属性,可以用于计算精确字体高度(与默认行高相对)的或字符的边界框。一个示例算法在“Span Dictionary”一节中这里显示。还改善了对一些字体中遇到的不正确指定的ascender / descender值的检测和修正。增加了 一个新的实验性
Tools.set_small_glyph_heights()
– 也是为了回应问题 #739。该方法设置或取消全局参数 始终以字体大小高度计算边界框。如果“开启”,文本搜索和所有文本提取将返回高度较小的矩形、边界框和四边形。修复 问题 #728。
更改 'Polyline' 注释的填充颜色逻辑:该参数现在仅适用于线条末端符号 - 注释本身不再能够具有填充颜色。同时解决了问题 #727。
已更改
Page.getImageBbox()
以便在图像包含在 XObject 中时也计算 bbox。更改
Shape.insertTextbox()
, 也就是Page.insertTextbox()
, 也就是TextWriter.fillTextbox()
以尊重字体属性“ascender”和“descender”在计算行高和插入点时。这不再导致多行输出的行重叠。这些方法以前忽略字体的特性,而是使用常量值。
版本 1.18.4 的更改
此版本添加了几项功能以支持PDF可选内容。除了其他功能外,这包括OCMDs(可选内容成员字典),具有完整的“可见性表达式”(PDF关键字/VE
)、文本插入(包括TextWriter类)和绘图。
修复 了问题 #727。自由文本注释现在支持在
fill_color=None
时显示无颜色的矩形。修复 了问题 #726。现在对 HTML / XML
Page.getText()
输出的 UTF-8 编码错误进行了处理。修复 了问题 #724。空值不再存储在PDF /Info元数据字典中。
新增 方法
Document.set_oc()
和Document.get_oc()
用于设置或获取 现有 图片和表单 XObjects 的可选内容引用。这些方法与 Annot 的同名方法类似。添加
Document.set_ocmd()
,Document.get_ocmd()
以处理 OCMDs。添加了 可选内容 支持文本插入和绘制。
新增 方法
Page.deleteWidget()
,该方法从页面中删除一个表单字段。这类似于删除注释。添加 对弹出注释的支持。这包括定义弹出矩形和设置弹出窗口为打开或关闭。方法 / 属性
Annot.set_popup()
,Annot.set_open()
,Annot.has_popup
,Annot.is_open
,Annot.popup_rect
,Annot.popup_xref
。
其他更改:
在PyMuPDF中,方法和属性的命名远未令人满意:我们到处都是CamelCases、mixedCases和lower_case_with_underscores。以Annot作为第一个候选,我们已经开始了一项活动,逐步清理这一点,将方法和属性转换为带下划线的小写,同时保持常量为大写。
旧名称将继续可用以防止代码中断,但它们将不再在文档中提及。
所有类的新方法和属性将根据新标准命名。
版本 1.18.3 的更改
作为一个主要的新特性,此版本引入了对PDF的可选内容概念的支持。
已修复 问题 #714。
修复 问题 #711.
修复 问题 #707: 如果提供了PDF用户密码,但没有提供或不存在所有者密码,则用户密码也被用作所有者密码。
固定
expand
和deflate
方法的参数Document.save()
和Document.write()
。单独的图像和字体压缩现在应该最终可以工作。解决了问题 #713。新增对PDF可选内容的支持。这包括几个新的 文档 方法,用于查询和设置可选内容状态,以及添加可选内容配置和组。此外,图像、表单XObjects和注释现在可以绑定到可选内容规范。已解决 问题 #709。
版本 1.18.2 的更改
此版本包含了一些有趣的文本搜索改进:现在返回任意数量的搜索命中,并且hit_max参数已被移除。新的clip参数还可以限制搜索区域。搜索现在可以在换行时检测连字符并相应地找到带连字符的单词。
修复 问题 #575: 如果在文本搜索中使用
quads=False
,那么同一行上的重叠矩形会被合并。之前,属于不同“标记内容”项目的搜索字符串部分各自生成自己的矩形——就像发生在不同的行上一样。添加
Document.isRepaired
,如果PDF在打开时被修复,则为true。新增
Document.setXmlMetadata()
,该方法用于更新或创建PDF XML元数据。实现了问题 #691。添加
Document.getXmlMetadata()
返回PDF XML元数据。更改 PDF文档的创建方式:现在它们将始终在文档尾部携带PDF标识 (
/ID
字段)。实现了问题 #691。更改
Page.searchFor()
: 接受一个新参数clip
以限制搜索在这个矩形内。相应地,属性TextPage.rect
现在被TextPage.search()
尊重。已更改 参数
hit_max
在Page.searchFor()
和TextPage.search()
中现在已过时:方法将返回所有结果。更改 字符 选择标准 在
Page.getText()
中:如果字符的 bbox 完全包含在内,现在该字符被认为是clip
的一部分。在此之前,仅需非空交集即可。已更改
Document.scrub()
以支持一个新选项redact_images
。这解决了问题 #697。
版本 1.18.1 的更改
修复 问题 #692。PyMuPDF 现在可以检测和恢复 PDF 页面中的更多循环资源依赖,并且首次将其报告在 MuPDF 警告存储中。
修复 问题 #686。
添加 不透明度选项给 形状 类:边框和填充颜色现在可以设置为某些透明值。这意味着所有的 页面 绘制方法,方法
Page.insertText()
、Page.insertTextbox()
、Shape.finish()
、Shape.insertText()
和Shape.insertTextbox()
支持两个新参数: stroke_opacity 和 fill_opacity。新增 参数
mask
到Page.insertImage()
用于可选提供外部图像遮罩。解决了问题 #685。已添加
Annot.soundGet()
以提取音频注释的声音。
版本 1.18.0 的更改
这是第一个支持 MuPDF v1.18 的 PyMuPDF 版本。这里的重点是扩展 PyMuPDF 自身的功能 - 除了修复错误。后续的 PyMuPDF 补丁可能会处理 MuPDF 中的新特性。
修复 问题 #519。这个上游bug偶尔只发生在某些页面,看来现在已经修复了:这些情况下的页面布局不应该再被破坏。
修复问题 #675。
不成功的存储分配现在应该总是导致异常(绕过一个间歇性崩溃解释器的上游错误)。
Pixmap 的大小现在基于
size_t
而不是int
在 C 中,并且即使对于极大的 pixmaps 也应该是正确的。
修复 问题 #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 来抑制,默认情况下就是这个值。对于从位图创建的PNG图像,分辨率(dpi)现在会自动根据各自的
Pixmap.xres
和Pixmap.yres
值进行设置。
版本 1.17.7 的更改
修复 问题 #651。通过从他们的开发库中回移植 MuPDF 的更改,修复了一个导致解释器在极端案例中崩溃的上游错误。
修复 了问题 #645。Pixmap 的左上角坐标可以通过它们自己的方法
Pixmap.set_origin()
(再次) 设置。添加 了几个新方法以改善和加快目录(TOC)处理。除此之外,TOC 项目现在可以单独更改或删除——无需总是替换整个 TOC。此外,现在可以在不先加载页面的情况下访问某些 PDF 页面属性。这对 TOC 操作的性能有着非常显著的影响。
添加一个选项到
Document.insert_pdf()
,允许显示进度消息。地址 #640。添加
Page.getTextbox()
,用于提取矩形内包含的文本。在许多情况下,这应该可以替代为此类操作编写自定义脚本。新增了新的
clip
参数到Page.getText()
,以简化和加快页面子区域的文本提取。添加
TextWriter.appendv()
以在 垂直写入模式 下添加文本。解决了问题 #653
版本 1.17.6 的更改
修复 问题 #605
修复 问题 #600 – 文字现在应正确定位,即使对于 CropBox 小于 MediaBox 的页面也是如此。
添加 文本跨度字典键
origin
,包含该跨度中第一个字符的左下角坐标。添加 属性
Font.buffer
,是字体文件的 字节 复制.添加 参数 sanitize 到
Page.cleanContents()
。允许切换清理选项,因此只会进行语法清理。
版本 1.17.5 的更改
修复 问题 #561 – 第二次尝试:某些 TextWriter 的用法在使用多种交替字体时未能正常工作。
已修复 问题 #566。
修复 问题 #568。
修复 – 不再提供的情况下,透明度现在正确地从 TextWriter 对象中获取,如果没有给出
TextWriter.writeText()
。新增 一个全局属性
fitz_fontdescriptors
。包含来自库 pymupdf-fonts 的可用字体信息。已添加
Font.valid_codepoints()
,该函数返回一个包含字体具有字形的unicode代码点的数组。新增 选项
text_as_path
到Page.getSVGimage()
。这实现了 #580。如果设置为 False,则生成更小的可解析文本的 SVG 文件。
版本 1.17.4 的更改
修复 问题 #562。注释位图不再派生自页面位图,从而避免了意外包含页面内容。
修复 问题 #559。这个 MuPDF 的bug正在通过MuPDF下一个版本的预发布版本临时修复。
添加 实用函数
repair_mono_font()
以修正某些等宽字体的显示字符间距。添加 实用方法
Document.need_appearances()
以精细控制表单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 的变更
版本 1.17.1 的更改
还显著改善了内联文档,以更好地支持互动帮助。
版本 1.17.0 的变化
此版本基于 MuPDF v1.17。以下是新功能和更改功能的亮点:
新增 对注释和小部件的扩展语言支持:现在可以在“自由文本”注释和文本小部件中使用拉丁文、希腊文、俄文、中文、日文和韩文字符的混合。使用它不需要特殊的安排。
对支持“章节”结构的文档实施了更快的页面访问。这目前适用于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。
修复 问题 #500。
Document.convertToPDF()
应不再导致内存泄漏。修复 问题 #496。注释和小部件/字段现在使用 未经旋转的页面 的坐标添加或修改。此行为现在与其他修改 PDF 页面的方法保持同步。
添加
Page.rotationMatrix
和Page.derotationMatrix
以支持旋转版和原始版PDF页面之间的坐标变换。
潜在的代码破坏性变更:
私有方法
Page._getTransformation()
已被删除。请使用公共Page.transformationMattrix
替代。
版本 1.16.18 的更改
这个版本引入了几个关于PDF文本输出的新特性。动机是简化这个任务,同时提供扩展功能。
一个主要成就是利用MuPDF的功能在当前字体中找不到字符时动态选择替代字体。这在Base-14字体与CJK字体(中国、日本、韩国)结合时无缝工作。因此,文本可以包含任何字符组合,来自拉丁语、希腊语、俄语、汉语、日语和韩语。
修复 问题 #493.
Pixmap(doc, xref)
现在应该能够正确地类似于加载的图像对象。修复 问题 #488。现在可以修改小部件名称。
新增 类 Font,表示一种字体。
新增 了一个类 TextWriter,作为要在页面上写入文本的容器。
添加
Page.writeText()
以将一个或多个 TextWriter 对象写入页面。
版本 1.16.17 的更改
修复 问题 #479。PyMuPDF 现在应该更正确地报告图像分辨率。这适用于图像(无论是来自图像文件还是从PDF文档中提取的)和从图像创建的位图。
添加
Pixmap.set_dpi()
用于设置图像在x和y方向的分辨率。
版本 1.16.16 的更改
版本 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()
返回页面的表单 XObjects 列表。添加
Page.setMediaBox()
以更改物理PDF页面大小。新增 页面 方法,这些方法以前是内部的:
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()
,它删除与当前相关的“弹出”及响应注释。主要用于数据保护目的。新增了一种表单字段方法
Widget.reset()
,该方法将字段值重置为默认值。更改和扩展了删减的处理:如果图像和XObjects 包含 在删减矩形中,则将被移除。任何部分重叠将仅由删减背景颜色覆盖。现在可以指定一个叠加文本,以便插入到矩形区域中以替代被删除的原始文本。这解决了#434的问题。
版本 1.16.11 的变化
新增 通过方法
Page.add_redact_annot()
和Page.apply_redactions()
支持编辑注释。修复 问题 #426 (“1.16.10 版本中的 PolygonAnnotation”).
版本 1.16.10 的更改
修复 问题 #421 (“annot.set_rect(rect) 对文本注释没有影响”)
修复了 问题 #417 (“与 1.13.20 相比,1.16.9 中 page.deleteAnnot 的奇怪行为”)
修复 问题 #415 (“Annot.setOpacity 引发 mupdf 警告”)
更改所有“添加注释/小部件”方法以在/NM PDF键中存储唯一名称。
已更改
Annot.setInfo()
以除了字典外还接受直接参数。已更改
Annot.info
现在还会显示注释的唯一ID(/NM PDF 密钥),如果存在的话。添加
Page.annot_names()
,该函数返回所有注释名称的列表(/NM 键)。添加
Page.load_annot()
,它根据其唯一 ID (/NM 键) 加载注释。添加
Document.reload_page()
,在完成对页面的任何待处理更新后提供页面的新副本。
版本 1.16.9 的变化
修复 #412 (“功能请求:允许控制目录条目是否应被折叠”)
修复 #411 (“页面的第一个小部件产生段错误”)
修复 #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()
,用于设置mupdf错误的显示在 sys.stderr 上。新增 命令行功能。这是一个主要的新特性:您现在可以通过 “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。如果为真,则返回的项目将包含所引用的xref
的 Form XObject。
版本 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 相比,进行了小幅更改。“dict”和“rawdict”变体的 Page.getText()
代码已经移植到 C 语言,这大大提高了它们的性能。这一改进在以文本为导向的文档中尤其明显,现在它们的执行速度几乎提高了两倍。
修复 问题 #369 (“mupdf: cmsCreateTransform 失败”) 通过移除 ICC 颜色空间支持。
已更改
Page.getText()
以接受附加关键字“blocks”和“words”。这将分别返回Page.getTextBlocks()
和Page.getTextWords()
的结果。因此,所有文本提取方法现在都可以通过统一的API获得。相应地,现在有新的方法TextPage.extractBLOCKS()
和TextPage.extractWords()
。已更改
Page.getText()
的默认位指示器 TEXT_INHIBIT_SPACES 为 关闭。默认情况下不抑制额外空格的插入。
版本 1.16.2 的更改
更改了页面的文本提取方法,以允许详细控制提取数据的数量。
添加
planish_line()
,将给定的线(定义为一对点)映射到 x 轴。修复了一个问题(无Github编号),该问题在使用
Page.getText()
的 “dict” 选项时遇到某些不可编码为UTF-8的字符时导致解释器崩溃。修复 问题 #362 (“使用 getText(‘rawDICT’) 的内存泄漏”).
版本 1.16.1 的变更
新增 属性
Quad.is_convex
,用于检查一条线是否包含在四边形内,如果它连接了四边形的两个点。已更改
Document.insert_pdf()
现在允许在复制期间独立地丢弃或包含链接和注释。修复了问题 #352(“损坏的 PDF 数据和…”),该问题似乎在使用该方法处理一些有问题的 PDF 文件时间歇性发生。修复了一个错误,该错误在使用语法 “m1/m2” 进行矩阵除法时,导致矩阵 “m1” 被替换为结果而不是返回一个新矩阵。
修复 问题 #354 (“Python 3.8 的语法警告”). 我们现在总是对字面量使用 “==” (而不是 “is” Python 关键字)。
修复 问题 #353 (“mupdf版本检查”), 现在在只有补丁级别偏差时不再拒绝导入MuPDF。
版本 1.16.0 的更改
MuPDF的这个重要新版本带来了几个不错的新特性或更改功能。不过,其中一些意味着编程API的变化。以下是已更改内容的摘要:
PDF 文档加密和解密现在完全支持。这包括设置权限、密码(用户密码和拥有者密码)以及所需的加密方法。
针对新的加密特性,PyMuPDF 返回一个整数(即位的组合)表示文档权限,而不再是一个字典。
MuPDF 错误和警告的重定向现在得到了原生支持。PyMuPDF 将 MuPDF 的错误消息重定向到 sys.stderr,不再对其进行缓冲。警告继续被缓冲,不会显示。存在访问和重置警告缓冲区的函数。
注释现在仅支持PDF。
注释和控件(表单字段)现在是页面上独立的对象链(尽管从技术上讲,控件仍然是 PDF 注释)。这意味着,当使用
Page.firstAnnot
或Annot.next()
时,您将永远不会遇到控件。您必须使用Page.firstWidget
和Widget.next()
来访问表单字段。作为MuPDF关于小部件变化的一部分,当 添加 或 更改 表单字段时,仅支持以下四种字体: Courier, Helvetica, Times-Roman 和 ZapfDingBats。
变更详情列表:
添加
Document.can_save_incrementally()
,检查阻止使用选项 incremental=True 的条件,Document.save()
。添加
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 对象。
已移除 文档 属性 openErrCode、openErrMsg,以及 工具 属性 / 方法 stderr、reset_stderr、stdout 和 reset_stdout。
移除了 第三方 zlib 依赖项在 PyMuPDF 中:现在 MuPDF 中提供了压缩函数。PyMuPDF 的源安装程序现在可以省略这个额外的安装步骤。
MuPDF v1.15.0没有发布版本
版本 1.14.20 / 1.14.21 的更改
更改文本标记注释以支持多个矩形/四边形。这修复了问题 #341 (“问题:如何添加高亮以使跨越多行的字符串由一个高亮覆盖?”) 和类似问题 (#285)。
修复 问题 #331(“导入 PyMuPDF 改变了警告过滤行为”)。
版本 1.14.19 的更改
修复 了问题 #319 (“当使用自定义字体时插入文本函数错误”)。
新增 方法
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()
– 类似于Document.delete_page()
在 v1.14.16 中。
版本 1.14.16 的更改
更改 文档 方法,围绕 PDF /EmbeddedFiles 不再使用 MuPDF 的“组合”函数。该支持将在 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 已被弃用,取而代之的是 lineCap 和 lineJoin,并将在下一个版本中删除。
修复 问题 #290 (“使用 getText(‘rawDICT’) 的内存泄漏”). 此错误导致在调用 “dict”, “rawdict” 和 “json” 版本的
Page.getText()
后内存未被(完全)释放。
版本 1.14.14 的变更
新增 低级函数
ImageProperties()
用于确定图像的多个特征。添加 了新的低级函数
Document.is_stream()
,用于检查一个对象是否是流类型。已更改 低级函数
Document._getXrefString()
和Document._getTrailerString()
现在默认返回格式化的对象定义,便于解析。
版本 1.14.13 的变更
更改 处理二进制输入的方法:尽管始终支持bytes和bytearray对象,但现在还支持 io.BytesIO 输入,使用它们的 getvalue() 方法。这涉及到文档创建、嵌入文件、FileAttachment 注释、位图创建等。修复问题 #274(“在将BytesIO用作insertImage的流时发生段错误”)。
已修复 问题 #278 (“insertImage(keep_proportion=True) 是否损坏?”)。现在在保持纵横比时,图像正确显示。
版本 1.14.12 的变更
更改了Page和Shape的绘制方法,以支持不仅仅是RGB,还包括GRAY和CMYK色彩空间。这解决了问题#270(“有没有办法使用CMYK颜色绘制形状?”)。此更改还适用于Shape的文本插入方法,以及Page的文本插入方法。
修复 问题 #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的尾部对象。这与Document._getXrefString()
非常相似,只是PDF的尾部没有 / 不需要xref
来识别它。添加 了文本插入方法的新参数。您现在可以独立设置字形(文本字符)的描边和填充颜色,以及字形边框的厚度。一个新的参数 render_mode 控制这些颜色的使用,以及文本是否应该可见。
修复 问题 #258 (“复制图像流到新的PDF而不增加大小”): 对于嵌入在PDF中的JPX图像,
Document.extractImage()
现在将以其原始格式返回它们。之前使用的是MuPDF基础库,它将图像以PNG格式返回(这会导致尺寸大幅增加)。修复 问题 #259 (“形态文本以适应矩形”). 澄清了使用
get_text_length()
的方法,并去除了长单词的多余换行.
版本 1.14.8 的更改
添加
Pixmap.set_rect()
用于更改矩形中的像素值。这也是设置整个图像的颜色的另一种选择(Pixmap.clear_with()
)。修复了与JBIG2(单色)编码的PDF图像相关的图像提取问题。该问题发生在
Page.getText()
(参数“dict”和“rawdict”)以及Document.extractImage()
方法中。修复了无法正确清除非字母 Pixmap (
Pixmap.clear_with()
) 的问题。修复了非透明度 Pixmap (
Pixmap.invert_irect()
) 的颜色未正确反转的问题。
版本 1.14.7 的更改
添加了
Pixmap.set_pixel()
以更改一个像素值。添加了 图像转换的文档在 常见问题解答 中。
新增 功能
get_text_length()
用于确定给定字体的字符串长度。新增 Postscript 图像输出(更改了
Pixmap.save()
和Pixmap.tobytes()
)。更改
Pixmap.save()
和Pixmap.tobytes()
以确保颜色空间、alpha 和输出格式的有效组合。已更改
Pixmap.save()
: 现在所需的格式是从文件名推断的。已更改 的自由文本注释现在可以具有透明背景 - 参见
Annot.update()
.
版本 1.14.5 的更改
添加 方法
Pixmap.pixel()
返回给定像素坐标的像素值(一个列表)。添加 方法
Pixmap.tobytes()
,它返回一个字节对象,表示以多种格式的位图。之前,这只能用于PNG输出(Pixmap.tobytes()
)。更改: 方法
Pixmap.save()
和 (新的)Pixmap.tobytes()
的输出现在也可以是 PSD (Adobe Photoshop 文档)。添加 方法
Shape.drawQuad()
,用于绘制一个 四边形。实际上,这是Shape.drawPolyline()
的简写,带有四边形的边缘。更改 方法
Shape.drawOval()
: 现在参数可以是 一个 矩形 (rect_like
) 或 一个四边形 (quad_like
).
版本 1.14.4 的变更
修复 问题 #239 “注释坐标一致性”。
版本 1.14.3 的变化
此补丁版本包含小的错误修复和CJK字体输出支持。
新增 对四种中日韩字体的支持,作为 PyMuPDF 生成的文本输出。这涉及到方法
Page.insertFont()
,Shape.insertText()
,Shape.insertTextbox()
, 以及相应的 Page 方法。新字体在“保留”字体名称下可用:“china-t”(繁体中文)、“china-s”(简体中文)、“japan”(日语) 和 “korea”(韩语)。添加 对内置字体‘Symbol’和‘Zapfdingbats’的完整支持。
更改:现在可以通过4个字母的缩写引用14种标准字体。
版本 1.14.1 的变更
此补丁版本包含小幅性能提升。
添加 对于作为 文档 文件名的 pathlib 对象的支持,通过使用 Python str() 函数。
版本 1.14.0 的更改
为了支持 MuPDF v1.14.0,PyMuPDF 进行了大量改动——其中大多数是纯技术性的,对开发者可见性较低。但也有很多有趣的新功能和改进功能。以下是详细信息:
添加 “ink” 注释。
添加 “橡皮图章” 注释。
添加 “波浪” 文本标记注释。
添加 新类 Quad(四边形或四角形)– 代表平面上的一般四边形。矩形、非空四边形的特殊子类型用于文本标记注释以及作为文本搜索方法中返回的对象。
添加了一个新选项“decrypt”到
Document.save()
和Document.write()
。现在您可以保持加密在保存受密码保护的 PDF 时。新增 对底层 C 库 MuPDF 发出的未请求消息的抑制和重定向。请查阅 诊断 以获取详细信息。
已更改: 注释的更改现在始终需要
Annot.update()
才能生效。更改 了自由文本注释,以支持完整的拉丁字符集和范围的外观选项。
改变 文本搜索,
Page.searchFor()
,现在可以选择返回 Quad 而不是 Rect 对象,包围每个搜索命中。已更改 普通文本输出:如果每行本身不以此字符结束,我们现在在每行末尾添加一个 n。
已修复 问题 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 构建,Python 内存管理在所有 C 级代码中都是独占使用的(即 MuPDF 代码或 PyMuPDF 接口代码中不再使用原生 malloc())。这导致了更好的内存使用效率,也带来了一些运行时改进:我们已经观察到文本提取和图像创建的运行时间缩短超过 2%(截至目前仅在 Windows 机器上)。
修复了在 Python 2.7 中出现的错误,当使用
TextPage.extractRAWDICT()
(= Page.getText(“rawdict”)) 时导致解释器崩溃。修复 在创建链接目标时发生的错误,出现在Python 2.7中。
扩展了常见问题章节,增加了更多示例。
版本 1.13.18 的更改
添加了 方法
TextPage.extractRAWDICT()
,并为方法Page.getText()
添加了一个新的字符串参数“rawdict”。它以 Python dict 形式从页面中提取文本和图像,类似于TextPage.extractDICT()
,但详细程度与TextPage.extractXML()
相同,提供每个字符的位置信息。
版本 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 = 中国、日本、韩国)。这应该会导致使用这些语言的文档生成正确的位图。此更改对我们的二进制文件大小有影响:它现在将在 8 到 10 MB 之间变化,具体取决于操作系统。
修复 问题 #191 (“Jupyter notebook 内核在大约 40 页后崩溃”), 该问题发生在修改注释内容时。
版本 1.13.14 的变更
此补丁版本包含几个改进,主要针对注释。
已更改
Annot.lineEnds
现在是一个包含两个整数的列表,表示行结束符。之前是一个 字典 的字符串。添加 适用于注释的行结束符支持。PyMuPDF 现在可以生成这些包括行结束符的注释。
添加
Annot.setLineEnds()
为适用的注释类型(‘Line’,‘PolyLine’,‘Polygon’)添加行结束符号。更改了
Page.insertImage()
和Page.show_pdf_page()
的技术实现:它们现在创建自己的内容对象,从而避免了对潜在的大流进行更改,这可能导致压缩/解压缩的工作以及增量更新造成的高变更量。
版本 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 基础 14 字体 会自动添加到 PDF 中。现在还可以从现有的小部件字体中选择小部件文本字体。任何指定的字段值现在都会得到尊重,并导致一个具有预设值的字段。
添加
Annot.updateWidget()
允许更改现有表单字段 - 包括字段值。
版本 1.13.11 的更改
虽然前面的补丁子版本只包含各种修复,但此版本再次引入了主要的新特性:
新增 对PDF小部件注释的基本支持。您现在可以添加类型为文本、复选框、列表框和组合框的PDF表单字段。在必要时,PDF会随着第一个添加的小部件转换为表单PDF。
修复 问题 #176 (“错误的文件嵌入”), #177 (“调用 page.getText() 时段错误”)和 #179 (“在加密 PDF 上使用 page.getLinks() 时段错误”).
版本 1.13.7 的变更
增加 对可重流文档(电子书、HTML等)可变页面大小的支持:在Document创建(打开)时新增参数rect和fontsize,并作为一个单独的方法
Document.layout()
。添加 Annot 创建多种注释类型:便签、自由文本、圆形、矩形、线、多边形、折线和文本标记。
添加 对注释透明度的支持 (
Annot.opacity
,Annot.setOpacity()
).已更改
Annot.vertices
: 点坐标现在以浮点数对的形式进行分组(不再是单独的浮点数)。更改 注释颜色字典:两个键现在被命名为 “stroke”(以前是 “common”)和 “fill”。
添加
Document.isDirty
如果在此会话中更改了PDF,则为 True。在每次Document.save()
或Document.write()
时重置为 False。
版本 1.13.6 的变更
修复 #173:对于内存驻留文档,确保流对象在文档关闭之前不会被Python垃圾回收。
版本 1.13.5 的更改
更改和扩展了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()
返回一个Python bytes 对象,格式为PDF。可以像普通文件一样在PyMuPDF中打开,或者写入磁盘,文件扩展名为“.pdf”。
版本 1.13.2 的变更
主要增强是PDF表单字段支持。表单字段是类型为 (19, ‘Widget’) 的注释。现在有一个新的文档方法来检查一个PDF是否是表单。Annot 类具有描述字段细节的新属性。
Document.is_form_pdf
为真如果对象类型 /AcroForm 并且至少存在一个表单字段。Annot.widget_type
、Annot.widget_text
和Annot.widget_name
包含表单字段的详细信息(即“Widget”注释)。
版本 1.13.1 的变化
TextPage.extractDICT()
是一种新的方法,用于提取文档页面的内容(文本和图像)。所有文档类型均受到支持,如其他 TextPage extract*() 方法。返回的对象是一个嵌套列表和其他字典的字典,并且 完全等于 旧的TextPage.extractJSON()
的 JSON 反序列化。区别在于结果是直接创建的 - 不使用 JSON 模块。因为用户不需要 JSON 模块来解释信息,所以使用起来应该更加方便,同时也会有更好的性能,因为它以其原始 二进制格式 包含图像 - 无需进行 base64 解码。Page.getText()
相应地支持新的参数值 “dict” 以调用上述方法。TextPage.extractJSON()
(resp. Page.getText(“json”)) 仍然出于便利性而被支持,但预计其使用将会减少。
版本 1.13.0 的更改
此版本基于 MuPDF v1.13.0。此发布“主要是一个错误修复发布”。
在PyMuPDF中,我们也进行了一些错误修复,同时引入了一些小的增强。用户的API几乎没有变化。
文档 构建更加灵活:新的 filetype 参数允许设置文档类型。如果指定,将忽略文件名中的任何扩展名。更全面地解决了 问题 #156。作为此的一部分,文档已进行了重新设计。
- Changes to 位图 constructors:
颜色空间转换不再允许丢弃 alpha 通道:源和目标 alpha 现在将始终相同。我们已经看到在使用 alpha = 0 时出现了例外甚至解释器崩溃。
作为替代,简单的位图复制让您选择目标 alpha。
Document.save()
再次提供了完整的垃圾收集范围 0 到 4。由于xref
维护中的一个bug,我们不得不暂时强制 garbage > 1。最终解决了 issue #148。Document.save()
现在提供通过额外参数“美化”PDF源的功能。Page.insertImage()
有一个额外的 stream -参数,用于指定一个包含图像的内存区域。在Linux系统上乱码PNG的问题已经解决 (“Problem writing PNG” #133)。
版本 1.12.4 的更改
这是1.12.3的扩展。
修复了 问题 #147:方法
Document.getPageFontlist()
和Document.getPageImagelist()
现在还显示包含在resources
中通过“Form XObjects”嵌套的字体和图像。临时修复问题 #148:保存为新的PDF文件时,如果给定了较低的值,将自动使用garbage = 2。最终修复预计将在MuPDF的下一个版本中实现。到那时,我们将删除这个变通办法。
防止在某些方法中非法使用模板/图像遮罩位图。
方法
Document.getPageFontlist()
现在在列表中包含每个字体的编码名称。方法
Document.getPageImagelist()
现在包含了列表中每个图像的解码方法名称。
版本 1.12.3 的变化
这是 1.12.2 的扩展。
许多函数现在返回 None 而不是 0,如果结果没有其他意义,仅仅表示成功执行 (
Document.close()
,Document.save()
,Document.select()
,Pixmap.save()
和许多其他函数)。
版本 1.12.2 的更改
这是 1.12.1 的扩展。
方法
Page.show_pdf_page()
现在接受新的 clip 参数。这指定了要限制显示的源页面的区域。为方便起见,新增了
Page.CropBox
和Page.MediaBox
。
版本 1.12.1 的变更
这是版本 1.12.0 的扩展。
新方法
Page.show_pdf_page()
显示他人的 PDF 页面。这是一种 矢量 图像,因此在缩放时保持精确。两个相关的文档必须是 PDF 格式。新方法
Page.getSVGimage()
从页面创建一个SVG图像。与位图的光栅图像相比,这是一个矢量图像格式。返回的是一个unicode文本字符串,可以保存为.svg文件。方法
Page.getTextBlocks()
现在接受一个额外的布尔参数 “images”。如果设置为 true(默认为 false),则生成的列表中将包含图像块(仅元数据),因此允许检测包含渲染图像的区域。小错误修复。
“text” 在
Page.getText()
中的结果使用单个空格字符连接块内的所有行。MuPDF 的原始实现则使用 “\n”,产生了相对凌乱的输出。新属性 Page 对象
Page.MediaBoxSize
和Page.CropBoxPosition
提供了关于页面尺寸的更多信息。对于非PDF文件(以及大多数PDF文件),这些将等于Page.rect.bottom_right
和Page.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”表示“ASCII 的 PostScript 字体”),这是一条更有价值的信息。
现在也支持除“简单字体”(Type1)以外的字体。
更改 Pixmap 大小的新选项:
方法
Pixmap.shrink()
以比例缩小位图。一个新的 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_like
,rect_like
)。几何对象现在完全支持就地操作符。例如, p /= m 用 p * 1/m 替换点 p(针对数字),或者用 p * ~m 替换点 p(针对一个
matrix_like
对象 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。
现在,pixmaps 的 alpha(透明度)通道是可选的。将 alpha 默认为 False 可显著减少 pixmap 的大小(CMYK 减少 20%,RGB 减少 25%,GRAY 减少 50%)。因此,许多 Pixmap 构造函数现在接受一个 alpha 布尔值,以控制该通道的包含。其他的 pixmap 构造函数(例如用于文件和图像输入的构造函数)创建的 pixmaps 完全不带 alpha。另一方面,pixmaps 的保存方法不再接受 savealpha 选项:如果该通道存在,将始终保存。为了尽量减少代码中断,我们在调用模式中保留了此参数——它将被忽略。
DisplayList 和 TextPage 类构造函数现在 需要页面的 mediabox(即 page.bound() 矩形)。无法从其他来源构建这些信息,因此在这些情况下无法避免源代码更改。然而,我们假设并不是很多用户实际上明确使用这些相对低级的类。因此,这一更改的影响应该是微小的。
与版本 1.9.3 相比的其他更改
新的 文档 方法 write() 将打开的 PDF 写入内存(与 save() 写入文件相对)。
现在可以在页面上缩放和移动注释。这是通过修改其矩形来实现的。
现在可以删除注释。 页面包含新方法 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)是可选的,几个新的参数和属性已被添加到 Pixmap 和 Colorspace 类,以支持确定它们的特性。
现在,Page 类包含新的属性 firstAnnot 和 firstLink,提供相应类链的起始点,其中 firstLink 是方法 loadLinks() 的一个助记符同义词,该方法仍然存在。类似地,新属性 rect 是方法 bound() 的同义词,该方法也继续存在。
Pixmap 方法 samplesRGB() 和 samplesAlpha() 已被删除,因为现在可以在没有透明度的情况下创建位图。
Rect 现在有一个属性 irect,它是方法 round() 的同义词。同样,IRect 现在有属性 rect 来提供一个 Rect,其坐标与浮点值相同。
文档具有新方法 searchPageFor() 用于搜索文本字符串。它的功能与相应的 Page.searchFor() 完全相同,页面编号作为附加参数。
版本 1.9.3 的更改
这个版本也是基于MuPDF v1.9a。与版本1.9.2相比的变化:
作为一个主要的增强功能,注解现在以类似于链接的方式得到支持。注解可以被显示(作为位图)并且可以访问它们的属性。
除了文档 select() 方法,现在可以使用一些更简单的方法来操作 PDF:
copyPage() 复制文档中的页面。
movePage() 类似,但是删除原始内容。
delete_page() 删除一个页面
delete_pages() 删除一个页面范围
rotation 或 setRotation() 访问或更改 PDF 页面的旋转。
以前可用但未文档化的, IRect, Rect, Point 和 Matrix 支持 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 扩展名。
文档 现在接受以下所有格式 (文档 和 打开 是同义词):
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对象现在支持len()函数:
len(doc) == doc.pageCount
。新方法 Document.getPageImageList() 创建一个页面上使用的图像列表。
新方法 Document.getPageFontList() 创建了一个页面引用的字体列表。
新的位图构造函数 fitz.Pixmap(doc, xref) 基于打开的 PDF 文档和图像的
xref
编号创建位图。新的位图构造函数 fitz.Pixmap(cspace, spix) 作为另一个位图 spix 的副本创建一个位图,同时将色彩空间转换为 cspace。这适用于所有色彩空间组合。
Pixmap 构造函数 fitz.Pixmap(colorspace, width, height, samples) 现在允许 samples 也可以是 bytes,而不仅仅是 bytearray。
版本 1.9.1 的变更
此版本的PyMuPDF基于2016年4月21日发布的MuPDF库源代码版本1.9a。
请查看MuPDF的网站,以了解其中包含的更改和增强功能。
版本1.9.1相比于版本1.8.0的变化如下:
新的方法 get_area() 适用于 fitz.Rect 和 fitz.IRect
现在可以使用新的构造函数 fitz.Pixmap(filename) 直接从文件创建图像。
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() 的别名。
新的位图方法 tobytes() 将返回格式化为 PNG 图像的字节数组。
新的位图方法 samplesRGB() 提供了一个去掉alpha字节的 samples 版本(仅限RGB颜色空间)。
新的位图方法 samplesAlpha() 只提供 samples 区域的alpha字节。
新的迭代器 fitz.Pages(doc) 用于文档的一组页面。
新矩阵方法 invert()(计算逆矩阵),concat()(计算矩阵乘积),pretranslate()(执行平移操作)。
新的 IRect 方法 intersect() (与另一个矩形的交集), translate() (执行移位操作)。
新的 Rect 方法 intersect() (与另一个矩形的交集)、 transform() (与矩阵的变换)、 include_point() (扩大矩形以包含一个点)、 include_rect() (扩大矩形以包含另一个矩形)。
文档 Point.transform() (用矩阵转换一个点).
矩阵、IRect、矩形 和 点 类现在支持紧凑的、代数形式来操作这些对象。
现在可以使用调用模式 doc.save(doc.name, incremental=True) 进行增量保存更改。
PDF的元数据现在可以通过文档方法 set_metadata() 删除、设置或更改。支持增量保存。
现在可以使用文档方法 set_toc(list) 删除、设置或更改 PDF 的书签(或目录)。支持增量保存。