TextWriter#

此类仅适用于 PDF。

  • v1.16.18 版本新增

此类表示一个 MuPDF 文本 对象。其基本思想是**将 (1) 文本准备与 (2) 将文本输出**到 PDF 页面**解耦**。

在**准备**过程中,文本写入器会存储任意数量的文本片段(“跨度”)及其位置和单独的字体信息。写入器准备好的内容可以多次**输出**到任何具有兼容页面大小的 PDF 页面。

文本写入器是方法 Page.insert_text() 及相关方法的优雅替代方案

  • **改进的文本定位:** 选择文本插入的任何起点。存储文本会返回跨度中*最后一个字符*之后的“光标位置”。

  • **自由选择字体:** 每个文本跨度都有自己的字体和 fontsize。这让您在排版较长的文本时可以轻松切换。

  • **自动备用字体:** 如果所选字体不支持某个字符,将自动搜索替代字体。这显著降低了在输出中看到不可打印符号(“豆腐块”——看起来像一个小矩形)的风险。PyMuPDF 现在还附带了**通用字体“Droid Sans Fallback Regular”**,它支持**所有拉丁**字符(包括西里尔和希腊)和**所有 CJK** 字符(中文、日文、韩文)。

  • **西里尔和希腊语支持:** PDF Base 14 字体 集成了对西里尔和希腊字符的支持,**无需指定编码。**您的文本可以是拉丁、希腊和西里尔字符的混合。

  • **透明度支持:** 支持参数 *opacity*。这提供了一种创建水印样式文本的便捷方法。

  • **两端对齐文本:** 支持任何字体——不仅仅是像 Page.insert_textbox() 中的简单字体。

  • **可重用性:** TextWriter 对象独立于 PDF 页面存在。它可以多次写入,无论是写入同一页面还是其他页面,无论是同一 PDF 还是不同的 PDF,都可以选择不同的颜色或透明度。

使用此对象包括三个步骤

  1. 在**创建**时,TextWriter 需要一个固定的**页面矩形**,它将以此为参照计算文本位置。文本写入器只能写入此大小的页面。

  2. 使用方法 TextWriter.append()TextWriter.appendv()TextWriter.fill_textbox() 根据需要多次将文本存储到 TextWriter 中。

  3. 将 TextWriter 对象输出到一个或多个 PDF 页面。

注意

  • 从版本 1.17.0 开始,TextWriter **支持** 通过 TextWriter.write_text() 的 *morph* 参数进行文本旋转。

  • 还存在 Page.write_text() 方法,它可以组合一个或多个 TextWriter 并将其联合写入给定的矩形和给定的旋转角度——非常类似于 Page.show_pdf_page()

方法 / 属性

简要描述

append()

以水平书写模式添加文本

appendv()

以垂直书写模式添加文本

fill_textbox()

填充矩形(水平书写模式)

write_text()

将 TextWriter 输出到 PDF 页面

color

文本颜色(可更改)

last_point

最后写入的字符在此结束

opacity

文本不透明度(可更改)

rect

此 TextWriter 使用的页面矩形

text_rect

目前已占用的区域

类 API

class TextWriter#
__init__(self, rect, opacity=1, color=None)#
参数:
  • rect (类似矩形) – 内部用于文本定位计算的矩形。

  • opacity (浮点数) – 设置此处存储文本的透明度。区间 [0, 1) 之外的值将被忽略。例如,值 0.5 表示 50% 透明度。

  • color (浮点数,序列) – 文本的颜色。所有颜色都指定为浮点数 0 <= color <= 1。单个浮点数表示某个灰度级别,序列通过其长度暗示颜色空间。

append(pos, text, font=None, fontsize=11, language=None, right_to_left=False, small_caps=0)#
  • 在 v1.18.9 中更改

  • 在 v1.18.15 中更改

以水平书写模式添加一些新文本。

参数:
  • pos (类似点) – 文本的起始位置,即第一个字符的左下角点。

  • text (str) – 任意长度的字符串。它将从位置“pos”开始写入。

  • font – 一个 Font 对象。如果省略,将使用 pymupdf.Font("helv")

  • fontsize (浮点数) – fontsize,一个正数,默认为 11。

  • language (str) – 要使用的语言,例如表示英语的“en”。有意义的值应符合 ISO 639 标准 1、2、3 或 5。保留供将来使用:据我们所知,目前没有效果。

  • right_to_left (布尔值) – (v1.18.9 新增) 文本是否应从右向左书写。适用于阿拉伯语或希伯来语等语言。默认为 False。如果为 True,文本中的任何拉丁部分将自动转换。没有其他后果,即 TextWriter.last_point 仍将是最右边的字符,并且不会发生任何对齐。因此,您可能希望改用 TextWriter.fill_textbox()

  • small_caps (布尔值) –

    (v1.18.15 新增) 在字体中查找字符的小写大写版本。如果存在,则使用该值。否则将使用原始字符(此字体或备用字体)。备用字体绝不会返回小写大写。例如,此代码片段

    >>> doc = pymupdf.open()
    >>> page = doc.new_page()
    >>> text = "PyMuPDF: the Python bindings for MuPDF"
    >>> font = pymupdf.Font("figo")  # choose a font with small caps
    >>> tw = pymupdf.TextWriter(page.rect)
    >>> tw.append((50,100), text, font=font, small_caps=True)
    >>> tw.write_text(page)
    >>> doc.ez_save("x.pdf")
    

    将生成此 PDF 文本

    _images/img-smallcaps.jpg

返回:

text_rectlast_point(在 v1.18.0 中更改:) 如果字体不受支持,则会引发异常——通过 Font.is_writable 进行检查。

appendv(pos, text, font=None, fontsize=11, language=None, small_caps=0)#

在 v1.18.15 中更改

以垂直、从上到下书写模式添加一些新文本。

参数:
  • pos (类似点) – 文本的起始位置,即第一个字符的左下角点。

  • text (str) – 字符串。它将从位置“pos”开始写入。

  • font – 一个 Font 对象。如果省略,将使用 pymupdf.Font("helv")

  • fontsize (浮点数) – fontsize,一个正浮点数,默认为 11。

  • language (str) – 要使用的语言,例如表示英语的“en”。有意义的值应符合 ISO 639 标准 1、2、3 或 5。保留供将来使用:据我们所知,目前没有效果。

  • small_caps (布尔值) – (v1.18.15 新增) 参见 append()

返回:

text_rectlast_point(在 v1.18.0 中更改:) 如果字体不受支持,则会引发异常——通过 Font.is_writable 进行检查。

fill_textbox(rect, text, *, pos=None, font=None, fontsize=11, align=0, right_to_left=False, warn=None, small_caps=0)#
  • 在 1.17.3 中更改:新增参数 pos,用于指定在矩形内的书写起始位置。

  • 在 v1.18.9 中更改:返回不适合矩形的行列表。支持从右向左书写(例如阿拉伯语、希伯来语)。

  • 在 v1.18.15 中更改:如果字体支持,则优先使用小写大写。

以水平书写模式用文本填充给定矩形。这是一个方便的方法,可作为 append() 的替代方案。

参数:
  • rect (类似矩形) – 要填充的区域。文本的任何部分都不会出现在此区域之外。

  • text (str,序列) – 文本。可以指定为 (UTF-8) 字符串或字符串列表 / 元组。字符串将首先使用 splitlines() 转换为列表。列表中的每个项目都将在新行开始(强制换行)。

  • pos (类似点) – (v1.17.3 新增) 从此点开始存储。默认为靠近矩形左上角的点。

  • fontFont 对象,默认为 pymupdf.Font("helv")

  • fontsize (浮点数) – fontsize

  • align (int) – 文本对齐方式。使用 TEXT_ALIGN_LEFT、TEXT_ALIGN_CENTER、TEXT_ALIGN_RIGHT 或 TEXT_ALIGN_JUSTIFY 之一。

  • right_to_left (布尔值) – (v1.18.9 新增) 文本是否应从右向左书写。适用于阿拉伯语或希伯来语等语言。默认为 False。如果为 True,任何拉丁部分会自动反转。您仍然需要设置对齐方式(如果您想要右对齐),这不会自动发生——其他对齐选项也仍然可用。

  • warn (布尔值) –

    文本溢出时不做任何操作、警告或引发异常。溢出的文本绝不会被写入。在 v1.18.9 中更改:

    • 默认为 None

    • 将返回溢出行列表。

  • small_caps (布尔值) – (v1.18.15 新增) 参见 append()

返回类型:

list

返回:

v1.18.9 新增 – 不适合矩形的行列表。每个项目都是一个元组 (text, length),包含一个字符串及其(在页面上的)长度。

注意

根据需要多次使用这些方法——没有技术限制(除了系统的内存限制)。您也可以混合使用 append() 和文本框,并且可以使用多个。文本定位完全由插入点控制。因此,无需遵守任何顺序。(在 v1.18.0 中更改:) 如果字体不受支持,则会引发异常——通过 Font.is_writable 进行检查。

write_text(page, opacity=None, color=None, morph=None, overlay=True, oc=0, render_mode=0)#

将 TextWriter 文本写入页面,这是唯一必需的参数。其他参数可用于临时覆盖创建 TextWriter 时使用的值。

参数:
  • page – 写入此 Page

  • opacity (浮点数) – 覆盖此输出的 TextWriter 值。

  • color (序列) – 覆盖此输出的 TextWriter 值。

  • morph (序列) – 通过应用矩阵修改文本外观。如果提供,这必须是一个序列 (fixpoint, matrix),其中 fixpoint 类似点,matrix 类似矩阵。一个典型示例是围绕 fixpoint 旋转文本。

  • overlay (布尔值) – 放在前景(默认)或背景。

  • oc (int) – (v1.18.4 新增) xrefOCGOCMD

  • render_mode (int) –

    PDF Tr 操作符值。值:0(默认)、1、2、3(不可见)。

    _images/img-rendermode.jpg

text_rect#

当前占用的区域。

返回类型:

Rect

last_point#

“光标位置”——一个 Point 对象——在最后写入的字符之后(其右下角)。

返回类型:

Point

opacity#

文本不透明度(可修改)。

返回类型:

float

color#

文本颜色(可修改)。

返回类型:

float,tuple

rect#

创建此 TextWriter 所用的页面矩形。不得修改。

返回类型:

Rect

注意

要查看一些处理 TextWriter 的演示脚本,请查看 TextWriter 演示脚本

  1. 不透明度和颜色适用于此对象中的**所有文本**。

  2. 如果您需要不同的颜色/透明度,则必须创建单独的 TextWriter。每当您确定颜色应该更改时,只需使用之前返回的 last_point 作为新文本跨度的位置,将文本附加到相应的 TextWriter。

  3. 附加项目或文本框可以按任意顺序进行:只有位置参数控制文本出现的位置。

  4. 字体和 fontsize 可以在同一 TextWriter 中自由变化。这可以用来让具有不同属性的文本出现在同一显示行上:只需相应地指定 pos,例如将其设置为之前添加项的 last_point

  5. 您可以使用 TextWriter.fill_textbox()pos 参数来设置第一个文本字符的位置。这允许使用来自不同 TextWriter 对象的内填充同一个文本框,从而允许使用多种颜色、不透明度等。

  6. MuPDF 不支持所有字体具有此特性,例如不支持 Type3 字体。从 v1.18.0 开始,可以通过字体属性 Font.is_writable 进行检查。在使用 TextWriter 方法时也会检查此属性。


本软件按“原样”提供,不附带任何明示或暗示的保证。本软件按许可协议分发,除非根据该许可协议明确授权,否则不得复制、修改或分发。有关许可信息,请参阅 artifex.com 或联系 Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States 获取更多信息。