PyMuPDF 1.24.4 中文文档(十三)(3)https://developer.aliyun.com/article/1559482
版本 1.21.1 中的更改(2022-12-13)
- 本版本使用了
MuPDF-1.21.1
。 - 错误修复:
- 修复 #2110: 如果占用多个对象,完全嵌入的字体仅部分提取
- 修复 #2094: 矩形检测逻辑
- 修复 #2088: 目标点未在 toc 中的命名链接中设置
- 修复 #2087: 提取带有过滤器“[/FlateDecode/JPXDecode]”的图像
- 修复 #2086:
Document.save()
的owner_pw
和user_pw
存在缓冲区溢出漏洞 - 修复 #2076:
fitz.py
中的段错误 - 修复 #2057:
PyMuPDF 1.21.0
中Document.save
的垃圾参数不起作用 - 修复 #2051: 缺少 DPI 参数
- 修复 #2048: TextPage 和 bbox 在最新版本
1.21.0
中的无效大小 - 修复 #2045:
SystemError:
返回带有错误设置的结果。 - 修复 #2039:
1.21.0
无法构建到系统libmupdf
的问题 - 修复 #2036:
Archive::Archive
定义两次
- 其他
- 在链接的 URI 字符串中忽略“&zoom=nan”。
- 添加了新的页面工具方法
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 添加了 wheels。
- 错误修复:
- 修复 #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:在
get_text()
文档中,block_no
和block_type
被错误地交换。 - 修复 #2013:在删除小部件时出现 AttributeError: ‘Widget’ object has no attribute ‘_annot’。
- 核心代码的其他更改:
- 修复了各种编译器警告和序列点错误。
- 增加了对 Memento 构建的支持。
- 修复了 Memento 在测试套件中检测到的内存泄漏问题。
- 修复了在
set_name()
和set_rect()
中处理异常的问题。 - 允许使用最新的 MuPDF 进行构建,用于 PyMuPDF 主分支的定期测试。
- 适应了设置某些注释类型的矩形时出现新的 MuPDF 异常。
- 减少了 MuPDF 的 config.h 与 PyMuPDF 的 _config.h 之间的外观差异。
- 适应了 MuPDF API 的各种更改。
- 其他:
- 修复了文档中各种失效链接和拼写错误。
- 提到在 MacOS 上安装
swig-python
以解决#875。 - 增加了(未经测试的)macos-arm64 的 wheel。
版本 1.20.2 中的变更
- 此版本使用了
MuPDF-1.20.3
。 - 修复 #1787。修复了 Unix 系统上的链接问题。
- 修复 #1824。在应用重叠透明图像的修正时导致 SegFault。(在
MuPDF-1.20.3
中已修复。) - 文档改进:
- 在
docs/installation.rst
中改进了有关从源代码构建的信息。 - 澄清了内存分配设置
pyJM_MEMORY` in ``docs/tools.rst
。 - 修复了在
docs/app3.rst
中对 PDF 参考手册的链接。 - 在 OpenBSD 上修复了 HTML 文档的构建问题。
- 将旧的
docs/faq.rst
移动到单独的docs/recipes-*
文件中。
- 移除了一些未使用的文件和目录。
installation/
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
泄漏问题。还修复了一个由于不正确释放底层 fz_document 而导致的 SEGV 问题。 - 修复 #1733。修复了
Annotation.get_pixmap()
的所有权。
构建/发布流程的变更:
- 如果 pip 从源代码构建,因为没有合适的轮子可用,我们不再要求预先安装 MuPDF。相反,所需的 MuPDF 源代码已嵌入 sdist,并自动构建为 PyMuPDF。
- 对
setup.py
进行了各种更改,以根据需要下载所需的 MuPDF 发布版。有关详细信息,请参阅 setup.py 开头的注释。 - 添加了
.github/workflows/build_wheels.yml
来控制在 Github 上构建轮子。
1.19.6 版本变更
- 修复 #1620。由
Page.get_textpage()
创建的 TextPage 现在将正确释放(去除内存泄漏)。 - 修复 #1601。现在应更简洁和易于解释地报告文档打开错误。在此过程中,添加了两个 PyMuPDF 特定的 Python 异常:
EmptyFileError
- 当尝试从空文件或零长度内存创建文档 (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 内联”),而不是 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()
返回的字典项:orientation
和transform
报告自然图像方向(EXIF 数据)。 - 新增 方法
Document.xref_copy()
。它可以使目标 PDF 对象成为源对象的精确副本。
版本 1.19.4 变更
- 修复 #1505。免疫循环轮廓项。
- 修复 #1484。现在在所有情况下正确返回 CropBox 坐标。
- 修复 #1479。
- 修复 #1474。现在正确删除 TextPage 对象。
- 新增 Page 方法和属性用于 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)
时也返回正确的跨度和字符边界框。
版本 1.19.2 变更
此补丁版本对 Page.get_drawings()
进行了轻微改进,同时修复了一些重要问题。
- 修复 #1388。修复了插入或更新注释时的间歇性内存损坏问题。
- 修复 #1375。修正了由
Page.get_text()
的 “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()
以确定位图中唯一颜色的数量。 - 新增 PDF 文档方法
Document.update_stream()
的布尔参数"compress"
。解决了 #1408 的问题。
版本 1.19.1 变更
这是支持 MuPDF v1.19.0 的第一个补丁版本。除了一个 bug 修复外,还包括 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 版本无关)包括检测页面对象何时覆盖或隐藏彼此。例如,现在可以看到文本被绘图或图像覆盖。
- 修改了重要几何概念的术语和含义:矩形现在被描述为有限、有效或空,同时这些术语的定义也有所变化。具体而言,矩形现在被视为“开放”:并非所有的角和边都被认为是矩形的一部分。请参阅矩形章节了解详情。
- 新增了一个名为
"no_new_id"
的参数到Document.save()
/Document.tobytes()
方法中。使用它来抑制更新 PDF 文档的第二项/ID
,在 PDF 中表示原始文件已被更新。如果 PDF 中还没有/ID
,则也不会创建新的/ID
。 - 新增了用于 PDF 更新的日志记录功能。这允许记录更改、撤销或重做操作,并将日志保存以供以后使用。请参阅
Document.journal_enable()
及相关方法。 - 新增了新的 Pixmap 方法
Pixmap.pdfocr_save()
和Pixmap.pdfocr_tobytes()
,生成包含 OCR 文本层的 PNG 图像的单页 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
,像素图像素区域的memoryview。不会复制,因此始终访问该区域的当前状态。 - 添加
Pixmap.samples_ptr
,Python 中一个指向像素图像素区域的“指针”。可以大大加快创建(速度提高 800+倍)Qt 图像的速度。
1.18.16 版本变更
- 修复问题 #1184。PDF 中现有的小部件字体现在被接受(即不强制更改为 Base-14 字体)。
- 修复问题 #1154。当指定
clip
时,文本搜索结果现在应该是正确的。 - 修复问题 #1152。
- 修复问题 #1146。
- 添加
Link.flags
和Link.set_flags()
到 Link 类。实现增强请求 #1187。 - 添加选项,用于模拟
TextWriter.fill_textbox()
的输出,以预测给定文本在文本框中占据的行数。 - 添加对
fitz
CLI 模块的子命令gettext
的文本输出支持。最重要的是,现在支持原始物理文本布局的再现。
1.18.15 版本变更
- 修复问题 #1088。现在应该可以正确地移除注释的填充颜色,使用
Annot.update()
中的fill_color=[]
参数以及Annot.set_colors()
中的fill=[]
。 - 修复问题 #1081。
Document.subset_fonts()
:修复了某些字体的字符宽度错误的问题。 - 修复问题 #1078。
Page.get_text()
和其他与文本提取相关的方法:更改了 TextPageflags
参数的默认值。现在保留所有空白和连字。 - 修复问题 #1085。旧的snake_cased别名
fitz.detTextlength
现在已正确定义。 - 更改
Document.subset_fonts()
现在将正确地前缀字体子集,符合 PDF 规范的六个大写字母标签。 - 新增新方法
Widget.button_states()
,返回按钮类型字段在设置为“on”或“off”时可能具有的值。 - 新增为 Font 和 TextWriter 类支持具有小型大写字母的文本。这在它们的多个方法中通过额外的布尔参数
small_caps
反映出来。
版本 1.18.14 变更
- 完成实现了新的“snake_cased”方法和属性名称,这些名称以前是“camelCased”并且在许多方面都很尴尬。文档末尾有一个名为 Deprecated Names 的部分,提供了更多背景信息和从旧名称到新名称的映射。
- 修复问题 #1053。
Page.insert_image()
:如给定,则在哈希计算中包括图像掩码。 - 修复问题 #1043。将
Pixmap.getPNGdata
添加到Pixmap.tobytes()
的别名中。 - 修复计算绘制路径的包围矩形时出现的内部错误,该错误由
Page.get_drawings()
返回。 - 修复通过
TextWriter.fill_textbox()
输出文本时偶尔导致循环的内部错误。 - 新增
Font.char_lengths()
,返回字符串的字符宽度元组。 - 新增更多指定页面的方法
Document.delete_pages()
。现在可以指定序列(列表、元组或范围),并且可以使用 Python 的del
语句。在后一种情况下,也接受 Python 的切片。 - 更改
Document.del_toc_item()
,禁用 TOC 中的单个项目:以前是移除标题文本,现在支持视图器显示整个项目为灰色。
版本 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()
还接受文件中现有图像的交叉引用。这允许在页面之间“复制”图像,并且支持极快的多次插入。 - 更改
Page.insert_image()
还接受整数参数alpha
。用于性能改进。 - 更改
Pixmap.set_alpha()
以支持使用其 alpha 值预乘颜色和设置特定颜色为完全透明(例如白色)。 - 更改
Document.embfile_add()
自动设置创建和修改日期时间。对应地,Document.embfile_upd()
自动维护修改日期时间(PDF 键/ModDate
),并且Document.embfile_info()
相应地报告这些数据。此外,通过其xref
,还包括了嵌入文件的相关“集合项”,这支持开发 PDF 组合应用。
版本 1.18.11 / 1.18.12 中的更改
- 修复 问题 #972。改进了源分发材料的布局。
- 修复 问题 #962。稳定了 Linux 发行版检测以生成来自源代码的 PyMuPDF。
- 添加:
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 尾部字典。可以通过将 xref 编号参数设置为-1
来实现。 - 添加了一些用于重建由
Page.get_text()
选项“dict”和“rawdict”提取的文本行、跨度和字符的四边形函数。参见recover_quad()
及相关函数。 - 添加
Tools.unset_quad_corrections()
以抑制字符四边形校正(偶尔对错误字体需要)。
1.18.9 版本更改
- 修复问题#888。删除了关于 PyMuPDF 许可证的歧义声明,现在明确说明为 GNU AGPL V3。
- 修复问题#895。
- 修复问题#896。自 v1.17.6 以来,PyMuPDF 抑制字体子集标记,仅在文本提取输出“dict”/“json”/“rawdict”/“rawjson”中报告基本字体名称。现在,新的全局参数可以请求旧行为,
Tools.set_subset_fontnames()
。 - 修复问题#885。现在,使用
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 版本变更
这只是一个修复 bug 的版本。我们提前发布是因为这些功能可能被广泛使用。
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。
- Fixed 问题#814。
- Added
Document.get_page_labels()
返回 PDF 的页面标签定义列表。 - Added
Document.has_annots()
和Document.has_links()
用于检查 PDF 中是否存在这些对象类型。 - Added 专家级低级功能以简化 PDF 对象源的查询和修改:
Document.xref_get_keys()
列出对象xref
的键,Document.xref_get_key()
返回键的类型和内容,以及Document.xref_set_key()
修改键的值。 - Added 参数
thumbnails
到Document.scrub()
,以允许删除页面缩略图图像。 - Improved 文档如何为非水平文本添加有效文本标记注释的文档已更新。
我们继续将方法和属性从*“mixedCase”重命名为“snake_case”*的过程。文档通常仅提及新名称,但旧的弃用名称在一段时间内仍然可用。
版本 1.18.6 中的更改
- Fixed 问题#812。
- Fixed 问题#793。之前无效的文档元数据导致某些文档根本无法打开。已修复此错误。
- Fixed 问题#792。如果使用默认的
clip=None
,则文本搜索和文本提取将完全不进行矩形包含检查。 - Fixed 问题#785。
- Fixed 问题#780。修正了参数检查错误。
- Fixed 问题#779。修正了拼写错误。
- Added 选项以设置文本框的期望行高。实现了#804。
- Changed 文本位置检索已优化以更好地处理 Tesseract 的无字体字符。实现了#803。
- Added 选项以选择提供唯一注释 ID 的新注释、字段和链接的前缀。实现了请求#807。
- Added 获取和设置 PDF 目录项目的颜色和文本属性。实现了#779。
- 新增PDF 页面标签处理:
Page.get_label()
返回页面标签,Document.get_page_numbers()
返回具有指定标签的所有页面编号,Document.set_page_labels()
添加或更新 PDF 的页面标签定义。
注意
此版本引入了Python 类型提示。目标是为所有函数和方法的每个参数和返回值提供类型信息。尽管大部分函数已经处理,但仍在进行中。
版本 1.18.5 的变更
除了几个修复外,此版本还专注于几个次要但重要的功能改进。其中之一是更精确地计算适合文本书写/插入的适当行高和插入点。与使用字体无关的常量不同,现在这些值来自于字体的属性。
还请注意,这是不再为 Python 版本低于 3.6 提供预生成轮子的第一个版本。PIP 也将在 2020 年底停止对这些版本的支持。
- 修复问题#771。通过使用“小字形高度”选项,可以提取完整页面文本。
- 修复问题#768。
- 修复问题#750。
- 修复问题#739。 “dict”、"rawdict"及其对应的 JSON 输出变体现在具有两个新的span键:“ascender"和"descender”。这些浮点数表示特殊的字体属性,可用于计算与默认行高不同但与字体大小相同的边界框的 span 或字符。在“Span Dictionary”章节这里中展示了一个示例算法。还改进了检测和修正某些字体中遇到的未明确定义的 ascender/descender 值。
- 新增了一个新的实验性方法
Tools.set_small_glyph_heights()
– 同时响应问题#739。此方法设置或取消一个全局参数,以始终使用字体大小计算边界框。如果“开启”,则文本搜索和所有文本提取都将返回高度较小的矩形、边界框和四边形。 - 修复问题#728。
- 更改“Polyline”注释的填充颜色逻辑:此参数现在仅适用于线条末端符号 – 注释本身不再能有填充颜色。还解决了问题#727。
- 修改了
Page.getImageBbox()
,以便在图像包含在 XObject 中时也计算其 bbox。 - 修改了
Shape.insertTextbox()
、Page.insertTextbox()
和TextWriter.fillTextbox()
方法,以在计算行高和插入点时尊重字体的“上升部分”和“下降部分”。这不再导致多行输出的行重叠。这些方法以前忽略了字体的特定信息,而是使用固定值。
1.18.4 版本变更
该版本添加了多项功能以支持 PDF 可选内容。其中包括具有全面*“可见性表达式”*(PDF 键/VE
)的 OCMDs(可选内容成员字典)、文本插入(包括 TextWriter 类)和绘图。
- 修复了问题#727。现在,自由文本注释在
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()
方法,用于处理 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 可选内容的支持。这包括几种新的 Document 方法,用于查询和设置可选内容状态,以及添加可选内容配置和组。此外,现在可以将图像、表单 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.search()
现在尊重TextPage.rect
属性。 - 更改了
Page.searchFor()
和TextPage.search()
中的参数hit_max
现在已经过时:这些方法将返回所有命中结果。 - 更改
Page.getText()
中的字符选择标准:如果其包围框完全包含,则现在将字符视为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_opacity 和 fill_opacity。 - 向
Page.insertImage()
添加了新参数mask
,用于可选地提供外部图像掩码。解决了问题 #685。 - 添加
Annot.soundGet()
用于提取音频注释的声音。
1.18.0 版本的变更
这是第一个支持 MuPDF v1.18 的 PyMuPDF 版本。重点在于扩展 PyMuPDF 的功能——除了修复错误之外。随后的 PyMuPDF 补丁可能会解决 MuPDF 中新增的功能。
- 不成功的存储分配现在应该始终引发异常(规避了一个时而导致解释器崩溃的上游错误)。
- Pixmap 的大小现在基于
size_t
而不是int
在 C 中,应该可以正确处理非常大的像素图。
- 修复问题 #668。PDF 绘图插入中划线的规范应该现在正确反映 PDF 规范。
- 修复问题 #669。已删除
Page.insert_pdf()
中的一个主要内存泄漏源。 - 在
Page.apply_redactions()
中添加了关键字 “images”,以精细控制图像的处理方式。 - 添加了
Annot.getText()
和Annot.getTextbox()
,提供与 Page 版本相同的功能。 - 新增 在
Page.getText()
/Annot.getText()
的块字典中添加了键 “number”,用于选项“dict”和“rawdict”。 - 新增
glyph_name_to_unicode()
和unicode_to_glyph_name()
。这两个函数不再依赖于特定的字体,现在也可以独立使用。数据现在基于Adobe Glyph List。 - 新增便利函数
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.set_origin()
再次设置。 - 修复问题 #622,
Page.insertImage()
再次接受rect_like
参数。 - 新增多个新方法,以改进和加速目录(TOC)处理。在其他功能中,现在可以单独更改或删除 TOC 项,而无需总是替换整个 TOC。此外,现在可以在不先加载页面的情况下访问某些 PDF 页面属性。这对于 TOC 操作的性能有显著影响。
- 新增
Document.insert_pdf()
的选项,允许显示进度消息。解决了问题 #640。 - 新增
Page.getTextbox()
,它可以提取矩形框中包含的文本。在许多情况下,这应该可以替代编写自己的脚本来完成这种任务。 - 新增
clip
参数到Page.getText()
,以简化和加速页面子区域的文本提取。 - 新增
TextWriter.appendv()
以垂直写入模式添加文本。解决了问题 #653
1.17.6 版本变更
- 修复问题 #605
- 修复问题 #600 – 现在文本应该对于裁剪框小于媒体框的页面位置正确。
- 新增文本跨度字典键
origin
,包含该跨度中第一个字符的左下角坐标。 - 新增属性
Font.buffer
,一个字体文件的 bytes 复制。 - 新增参数 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 版本变更
- 修复问题 #561。现在一页上超过 10 个 Font 对象的处理应该正常工作。
- 修复问题 #562。注释的像素图不再从页面像素图派生,从而避免意外包含页面内容。
- 修复问题 #559。这是对 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。以下是新功能和更改的亮点:
- 新增 扩展语言支持以用于注释和小部件:拉丁文、希腊文、俄文、中文、日文和韩文字符的混合现在可以在"FreeText"注释和文本小部件中使用。无需特殊安排即可使用。
- 为支持“章节”结构的文档实现了更快的页面访问。目前适用于 EPUB 文档。这带来了多个新的 Document 方法和
Document.loadPage()
的变更,以及“索引”页面访问 doc[n] 的变更:除了以前指定页面编号外,现在还可以指定元组 (章节, 页码) 来标识所需的页面。 - 已更改: 改进了对删除注释的支持:被删除区域覆盖的图像被 永久修改,重叠区域被擦除。同时,如果链接被删除区域覆盖,链接也会被移除。这现在完全符合 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
替代。
PyMuPDF 1.24.4 中文文档(十三)(5)https://developer.aliyun.com/article/1559484