形状#
该类允许在PDF页面上创建互联的图形元素。它的方法与对应的 Page 方法具有相同的含义和名称。
实际上,每个 Page 的绘制方法只是 (1) 一个形状绘制方法的便利封装,(2) Shape.finish() 方法,以及 (3) Shape.commit() 方法。对于页面文本插入,只调用 Shape.commit() 方法。如果对一个页面执行了许多绘制和文本操作,您应该始终考虑使用一个 Shape 对象。
可以连续执行几种绘制方法,每一种都会为一个绘图做出贡献。一旦绘图完成,就必须调用Shape.finish()方法来应用颜色、虚线、宽度、变形和其他属性。
绘制此类的方法(和 Shape.insert_textbox())正在记录它们所覆盖的矩形区域 (Shape.rect)。这个属性可以例如用于设置 Page.cropbox_position。
文本插入 Shape.insert_text() 和 Shape.insert_textbox() 隐式执行一个“完成”,因此只需要 Shape.commit() 才能生效。因此,两者都包括用于控制颜色等属性的参数。
方法 / 属性 |
描述 |
|---|---|
更新页面内容 |
|
绘制一条三次贝塞尔曲线 |
|
在一个点周围绘制一个圆 |
|
使用一个辅助点绘制立方贝塞尔曲线 |
|
绘制一条线 |
|
绘制一个椭圆 |
|
连接一系列点 |
|
绘制一个四边形 |
|
绘制一个矩形 |
|
绘制一个圆形扇形或一块派 |
|
绘制一条波浪线 |
|
画一个锯齿状的线 |
|
完成一组绘图命令 |
|
插入文本行 |
|
将文本适配到矩形中 |
|
存储页面的文档 |
|
自上次 |
|
存储页面的高度 |
|
存储当前点 |
|
存储拥有者页面 |
|
围绕图形的矩形 |
|
累积文本插入 |
|
要存储在 |
|
存储页面的宽度 |
类 API
- class Shape#
- __init__(self, page)#
创建一个新的绘图。在导入 PyMuPDF 时,pymupdf.Page 对象被赋予了便捷方法 new_shape() 来构造 Shape 对象。在实例化时,将检查我们是否确实有一个 PDF 页面。否则将引发一个异常。
- Parameters:
页面 (页面) – 已存在的PDF文档页面。
- draw_line(p1, p2)#
从
point_like对象p1绘制一条线到p2。- Parameters:
p1 (point_like) – 起始点
p2 (point_like) – 终点
- Return type:
- Returns:
终点,p2。
- draw_squiggle(p1, p2, breadth=2)#
从
point_like对象 p1 到 p2 绘制一条波浪线(曲线,起伏的线)。将始终绘制一个整数数量的完整波周期,一个周期的长度为 4 * breadth。宽度参数将根据需要进行调整以满足这一条件。绘制的线在离开 p1 时总是向“左”转,并始终从“右”侧连接 p2。- Parameters:
p1 (point_like) - 起始点
p2 (point_like) – 结束点
幅度 (浮点数) – 每个波浪的幅度。条件 2 * breadth < abs(p2 - p1) 必须为真,以便至少适合一个波浪。请参见下面的图片,它显示了两个点通过一个完整的周期连接。
- Return type:
- Returns:
终点,p2。
这是三个连接线的示例,形成一个闭合的填充三角形。小箭头指示了描边方向。
>>> import pymupdf >>> doc=pymupdf.open() >>> page=doc.new_page() >>> r = pymupdf.Rect(100, 100, 300, 200) >>> shape=page.new_shape() >>> shape.draw_squiggle(r.tl, r.tr) >>> shape.draw_squiggle(r.tr, r.br) >>> shape.draw_squiggle(r.br, r.tl) >>> shape.finish(color=(0, 0, 1), fill=(1, 1, 0)) >>> shape.commit() >>> doc.save("x.pdf")
注意
绘制的波浪不是三角函数(正弦/余弦)。如果您需要这个,请查看draw.py。
- draw_zigzag(p1, p2, breadth=2)#
从
point_like对象 p1 到 p2 绘制一条锯齿线。否则与Shape.draw_squiggle()的工作方式完全相同。- Parameters:
p1 (point_like) – 起始点
p2 (point_like) – 结束点
幅度 (浮点数) – 移动的幅度。条件 2 * breadth < abs(p2 - p1) 必须为真以适应至少一个周期。
- Return type:
- Returns:
终点,p2。
- draw_polyline(points)#
在序列points中绘制几条连接的线段。这可以通过将最后一个项目设置为第一个项目来创建任意多边形。
- Parameters:
points (sequence) – 一系列
point_like对象。其长度必须至少为 2(在这种情况下,它等同于 draw_line())。- Return type:
- Returns:
points[-1] – 参数序列中的最后一个点。
- draw_bezier(p1, p2, p3, p4)#
绘制一条标准的立方贝塞尔曲线,从 p1 到 p4,使用 p2 和 p3 作为控制点。
所有参数都是
point_like对象。- Return type:
- Returns:
终点,p4。
注意
这些点不需要不同 - 可以尝试让其中一些相等!
示例:
- draw_oval(tetra)#
在给定的四边形(四角形)内绘制一个“椭圆”。如果是正方形,则绘制一个规则的圆,一般的矩形则会产生一个椭圆。如果使用四边形,则可能会得到许多不同的形状。
绘图从线段的中间点开始并结束,
bottom-left -> top-left角以逆时针方向进行。- Parameters:
四面体 (矩形样式,四边形样式) –
在版本 1.14.5 中更改: 现在也支持四边形。
- Return type:
- Returns:
直线的中点
rect.bl -> rect.tl,或分别是quad.ll -> quad.ul。在这里看看几个例子,或者查看 PyMuPDF-Utilities 库中的 quad-show?.py 脚本。
- draw_circle(center, radius)#
给定其中心和半径画一个圆。绘制从点
center - (radius, 0)开始并结束,采用逆时针方向运动。这个点是包围正方形左侧的中点。这是一个快捷方式,用于
draw_sector(center, start, 360, fullSector=False)。要以 顺时针 方向绘制相同的圆,请使用-360作为角度。
- draw_curve(p1, p2, p3)#
draw_bezier()的一个特殊案例:从p1绘制到p3的三次贝塞尔曲线。在两条线上
p1 -> p2和p3 -> p2各生成一个控制点。因此,这两个控制点将位于p1 -> p3这条线的同一侧。这保证了曲线的曲率不会改变符号。如果到p2的线以90度角相交,那么得到的曲线就是一个四分之一椭圆(如果长度相同,则为四分之一圆)。所有参数都是
point_like。- Return type:
- Returns:
终点, p3。以下是一个填充的四分之一椭圆段。黄色区域的方向是 顺时针:
- draw_sector(center, point, angle, fullSector=True)#
绘制一个圆形扇形,可选择性地将弧连接到圆心(像一块派)。
- Parameters:
中心 (point_like) – 圆的中心。
点 (point_like) – 饼图弧段的两个端点之一。另一个是根据 角度 计算得出的。
角度 (浮点数) – 该扇形的角度,以度为单位。用于计算弧的另一个端点。根据其符号,弧是逆时针(正向)或顺时针绘制的。
fullSector (bool) – 是否从弧的两端绘制连接线到圆心。如果指定了填充颜色,则整个“饼”被着色,否则仅着色该扇区。
- Return type:
- Returns:
弧的另一端点。可以作为后续调用的起始点,以创建逻辑上连接的饼图。 示例:

- draw_rect(rect, *, radius=None)#
在 v1.22.0 中更改:添加了参数 radius。
绘制一个矩形。绘图从左上角开始并结束,以逆时针方向移动。
- Parameters:
rect (rect_like) – 矩形在页面上的位置。
radius (multiple) – 绘制圆角矩形。如果不是
None,则指定曲率的半径作为矩形边长的百分比。这个值必须是一个或(一个元组的)两个浮点数0 < radius <= 0.5,其中 0.5 对应于各自边的 50%。如果是一个浮点数,则曲率的半径计算为radius * min(width, height),将角的周长绘制为四分之一的圆。如果给定一个元组(rx, ry),那么曲率在水平和垂直方向上是非对称的。值为radius=(0.5, 0.5)将绘制一个椭圆。
- Return type:
- Returns:
矩形的左上角。
- draw_quad(quad)#
绘制一个四边形。绘图从左上角 (
Quad.ul) 开始并结束,采用逆时针方向移动。这是Shape.draw_polyline()的一个快捷方式,参数为(ul, ll, lr, ur, ul)。
- finish(width=1, color=(0,), fill=None, lineCap=0, lineJoin=0, dashes=None, closePath=True, even_odd=False, morph=(fixpoint, matrix), stroke_opacity=1, fill_opacity=1, oc=0)#
通过将 共通参数 应用到所有的 draw*() 方法,完成一组方法。
它对 没有影响
Shape.insert_text()和Shape.insert_textbox()。该方法还支持使用 Point fixpoint 和 Matrix matrix 变换复合图形。
- Parameters:
morph (sequence) – 在某个任意的 Point fixpoint 周围对文本或复合图形进行变形,通过应用 Matrix matrix。这意味着 fixpoint 是此操作的 固定点:它的位置不会改变。默认情况下不进行变形 (None)。矩阵的前 4 个分量可以包含任何值,然而 matrix.e == matrix.f == 0 必须为真。这意味着可以进行缩放、剪切、旋转、翻转等任何组合,但不允许平移。
stroke_opacity (float) – (在v1.18.1中新增加) 设置描边颜色的透明度。值 < 0 或 > 1 将被忽略。默认值为 1(不透明)。
fill_opacity (float) – (在 v1.18.1 新增) 设置填充颜色的透明度。默认值为 1(不透明)。
even_odd (bool) – 请求 “奇偶规则” 用于填充操作。默认值为 False,因此使用 “非零绕行数规则”。这些规则是应用填充颜色的替代方法,当区域重叠时会生效。只有在形状相当复杂的情况下,才会预期这些规则会有不同的行为。有关详细解释,请参见 Adobe PDF References,第 137 页及以下。这里是一个示例来演示这种差异。
oc (int) – (在 v1.18.4 中新增) 一个
xref的编号,一个OCG或OCMD使该图形能够根据条件显示。
注意
对于形状中的每个像素,将发生以下情况:
规则 “奇偶” 计数,多少区域包含该像素。如果这个计数是 奇数, 这个像素被视为 在形状内,如果是 偶数,这个像素是 在形状外。
默认规则 “非零缠绕” 还考虑了包含该像素的每个区域的 “方向”:如果一个区域是逆时针绘制则 加1,如果是顺时针区域则 减1。如果结果为零,则该像素被视为 外部, 非零计数的像素被视为 内部 形状。
在上图的四个形状中,上面的两个每个显示了以标准方式绘制的三个圆(逆时针,看看箭头)。下面的两个形状包含一个(左上方)顺时针绘制的圆。可以看出,对于右侧列,区域方向是无关紧要的(奇偶规则)。
- insert_text(point, text, *, fontsize=11, fontname='helv', fontfile=None, set_simple=False, encoding=TEXT_ENCODING_LATIN, color=None, lineheight=None, fill=None, render_mode=0, border_width=1, rotate=0, morph=None, stroke_opacity=1, fill_opacity=1, oc=0)#
插入文本行从
point开始。- Parameters:
point (point_like) –
文本中第一个字符的左下角位置(以像素为单位)。理解rotate参数如何与此一起工作非常重要。请查看下面的图片。小红点表示在四种可能情况下point的位置。

文本 (字符串/序列) – 要插入的文本。可以指定为字符串类型或序列类型。对于序列或包含换行符
\n的字符串,将会插入多行。如果行宽过大,将不予处理,但插入行的数量将受限于页面上的“垂直”空间(根据rotate参数所确定的阅读方向)。任何剩余的文本都将被丢弃 – 返回代码将包含插入行的数量。lineheight (float) – 一个因子,用于覆盖从字体属性计算的行高。如果不是
None,将使用fontsize * lineheight的行高。stroke_opacity (浮点数) – (在 v1.18.1 中新增加) 设置描边颜色的透明度(字符的边框线)。只有
0 <= value <= 1会被考虑。默认值是 1(不透明)。fill_opacity (float) – (在 v1.18.1 中新增) 设置填充颜色的透明度。默认值为 1(不透明)。使用此值来控制文本颜色的透明度。描边透明度 仅 影响字符的边框线。
rotate (int) – 决定是否旋转文本。可接受的值为90度的倍数。默认值为0(不旋转),意味着文本行水平从左到右排列。180意味着文本从右到左倒置显示。90意味着逆时针旋转,文本朝上方排列。270(或-90)意味着顺时针旋转,文本朝下方排列。在任何情况下,point指明第一个字符矩形的左下角坐标。如果存在多行,总是遵循此参数确定的阅读方向。因此在
rotate = 180的情况下,第二行位于第一行上方等。oc (int) – (在v1.18.4中新增加) 一个
xref数字,用于一个OCG或OCMD以使此文本可有条件地显示。
- Return type:
整型
- Returns:
插入的行数。
有关其他参数的描述,请参见 常见参数。
- insert_textbox(rect, buffer, *, fontsize=11, fontname='helv', fontfile=None, set_simple=False, encoding=TEXT_ENCODING_LATIN, color=None, fill=None, render_mode=0, border_width=1, expandtabs=8, align=TEXT_ALIGN_LEFT, rotate=0, lineheight=None, morph=None, stroke_opacity=1, fill_opacity=1, oc=0)#
仅限PDF:将文本插入到指定的矩形中。文本将被分割成行和单词,然后填充到可用空间中,起始位置取决于
rotate的四个矩形角之一。换行符和多重空格将被保留。- Parameters:
rect (rect_like) – 使用的区域。它必须是有限的并且不能为空。
缓冲区 (字符串/序列) – 要插入的文本。必须指定为字符串或字符串序列。当在序列条目中出现换行符时,也会被尊重。
align (int) – 对每一行文本进行对齐。默认值为 0(左对齐)。支持的其他选项包括居中、右对齐和两端对齐,参见 文本对齐。请注意,参数值 TEXT_ALIGN_JUSTIFY 的效果仅在使用“简单”(单字节)字体时可实现(包括 PDF 基础 14 字体)。
lineheight (浮点数) –
一个因子,用于覆盖从字体属性计算出的行高。如果不是
None,将使用fontsize * lineheight的行高。- arg int expandtabs:
控制在每一行使用
\t的string.expandtabs()方法的制表符处理 每一行。
stroke_opacity (float) – (v1.18.1 中新增) 设置描边颜色的透明度。负值和大于 1 的值将被忽略。默认值为 1(不透明)。
fill_opacity (float) – (在 v1.18.1 中新增) 设置填充颜色的透明度。默认值为 1(不透明)。使用此值来控制文本颜色的透明度。描边透明度 仅 影响字符的边框线。
rotate (int) – 请求在矩形中旋转文本。该值必须是90度的倍数。默认值为0(不旋转)。实际上,四个值
0、90、180和270(=-90) 被处理,每个值使文本从不同的矩形角落开始。左下角为90,右下角为180,-90 / 270为右上角。请参阅示例了解文本如何填充在矩形中。此参数优先于变形。请参阅第二个示例,该示例显示文本首先向左旋转90度,然后整个矩形围绕左下角顺时针旋转。oc (int) – (在v1.18.4中新增加) 一个
xref数字,用于一个OCG或OCMD以使此文本可有条件地显示。
- Return type:
浮点数
- Returns:
如果是正数或零:成功执行。返回的值是未使用的矩形线条空间(以像素为单位)。这个值可以安全地忽略——或者用来优化矩形,定位后续项目等。
如果是负数:未执行。返回的值是存储文本行的空间不足。增大矩形,减小 fontsize,减少文本量等。
有关其他参数的描述,请参见 常见参数。
- commit(overlay=True)#
用累积的图纸更新页面的
contents,后面跟随任何文本插入。如果文本与图纸重叠,它将覆盖在图纸上。警告
不要忘记执行此方法:
如果形状未被提交,它将被忽略,页面将不会更改!
该方法将重置属性
Shape.rect,lastPoint,draw_cont,text_cont和totalcont。之后,该形状对象可以在 同一页面 中重复使用。- Parameters:
overlay (bool) – 确定内容是放置在前景(默认)还是背景中。仅在页面已经有一个非空
contents对象时相关。
———- 属性 ———-
- height#
页面高度的复制
- Type:
浮点数
- width#
页面宽度的副本。
- Type:
浮点数
- draw_cont#
自上次完成以来,绘制方法的累计命令缓冲区。每个完成方法将其命令追加到
Shape.totalcont。- Type:
字符串
- text_cont#
累积文本缓冲区。所有文本插入都会放在这里。此缓冲区将附加到
totalcontShape.commit(),以便文本永远不会被同一形状中的图形覆盖。- Type:
字符串
- rect#
围绕绘图的矩形。这个属性在您使用时可以随时更改。当创建或提交形状时,它的值设置为 无。每个 draw* 方法和
Shape.insert_textbox()更新该属性(即 根据需要扩大 矩形)。然而,变形 操作(Shape.finish(),Shape.insert_textbox())则被忽略。这个属性的典型用法是在创建形状以供后续或外部使用时,将
Page.cropbox_position设置为这个值。如果你自己没有操作过这个属性,它应该反映出一个包含到目前为止所有绘图的矩形。如果您使用了变形并且需要一个包含变形对象的矩形,请使用以下代码:
>>> # assuming ... >>> morph = (point, matrix) >>> # ... recalculate the shape rectangle like so: >>> shape.rect = (shape.rect - pymupdf.Rect(point, point)) * ~matrix + pymupdf.Rect(point, point)
- Type:
- totalcont#
用于绘制和文本插入的总累积命令缓冲区。此缓冲区将由
Shape.commit()使用。- Type:
字符串
用法#
绘图对象由 shape = page.new_shape() 构造。之后,可以根据需要跟随任意数量的绘制、完成和文本插入方法。每个绘制序列必须在提交绘图之前完成。整体编码模式如下:
>>> shape = page.new_shape()
>>> shape.draw1(...)
>>> shape.draw2(...)
>>> ...
>>> shape.finish(width=..., color=..., fill=..., morph=...)
>>> shape.draw3(...)
>>> shape.draw4(...)
>>> ...
>>> shape.finish(width=..., color=..., fill=..., morph=...)
>>> ...
>>> shape.insert_text*
>>> ...
>>> shape.commit()
>>> ....
注意
每个 finish() 将之前的绘制结合成一个逻辑形状,赋予它通用的颜色、线宽、变形等。如果指定了 closePath,它还会将最后一次绘制的结束点与第一次绘制的起始点连接起来。
要成功创建复合图形,让每个绘制方法使用上一个绘制方法的结束点作为起始点。在上面的伪代码中,draw2 应该因此使用 draw1 返回的 Point 作为起始点。如果不这样做,将自动开始一个新路径,而 finish() 可能无法按预期工作(但也不会报错)。
文本插入可以在提交之前的任何地方发生(它们既不触及
Shape.draw_cont也不触及Shape.lastPoint)。它们被直接附加到 Shape.totalcont,而绘制将由 Shape.finish 附加。每个 commit 将所有文本插入和形状放置在页面的前景或背景中 - 从而提供了一种控制图形层的方法。
只有 提交 会更新 页面内容,其他方法基本上是字符串操作。
示例#
创建一个由不同颜色的圆形饼图组成的完整圆圈:
shape = page.new_shape() # start a new shape cols = (...) # a sequence of RGB color triples pieces = len(cols) # number of pieces to draw beta = 360. / pieces # angle of each piece of pie center = pymupdf.Point(...) # center of the pie p0 = pymupdf.Point(...) # starting point for i in range(pieces): p0 = shape.draw_sector(center, p0, beta, fullSector=True) # draw piece # now fill it but do not connect ends of the arc shape.finish(fill=cols[i], closePath=False) shape.commit() # update the page
这是一个5种颜色的示例:
创建一个规则的n边形(填充黄色,红色边框)。我们仅使用 draw_sector() 来计算周长上的点,并在绘制多边形之前再次清空绘制命令缓冲区:
shape = page.new_shape() # start a new shape beta = -360.0 / n # our angle, drawn clockwise center = pymupdf.Point(...) # center of circle p0 = pymupdf.Point(...) # start here (1st edge) points = [p0] # store polygon edges for i in range(n): # calculate the edges p0 = shape.draw_sector(center, p0, beta) points.append(p0) shape.draw_cont = "" # do not draw the circle sectors shape.draw_polyline(points) # draw the polygon shape.finish(color=(1,0,0), fill=(1,1,0), closePath=False) shape.commit()
这是n = 7的多边形:
常见参数#
字体名称 (字符串)
一般来说,有三个选项:
使用标准的 PDF 基础 14 字体。在这种情况下, fontfile 不得 被指定,如果此参数被省略,则使用 “Helvetica”。
选择页面中已在使用的字体。然后指定其引用名称,前面加上一个斜杠“/”,见下面示例。
指定您系统上存在的字体文件。在这种情况下,为此参数选择一个任意的但新的名称(无“/”前缀)。
如果插入的文本应该重用页面的某个字体,请使用其在
Page.get_fonts()中出现的引用名称,如下所示:假设字体列表包含项目 [1024, 0, ‘Type1’, ‘NimbusMonL-Bold’, ‘R366’],然后指定 fontname = “/R366”, fontfile = None 来使用字体 NimbusMonL-Bold。
字体文件 (字符串)
您计算机上存在的字体的文件路径。如果您指定fontfile,请确保使用上面列表中不存在的fontname。此新字体将在doc.save()时嵌入PDF中。与新图像类似,字体文件只会嵌入一次。使用二进制字体内容的MD5代码表来确保这一点。
set_simple (布尔值)
从文件安装的字体默认安装为 Type0 字体。如果您只想使用1字节字符,请将其设置为true。此设置无法恢复。后续更改将被忽略。
字体大小 (浮动)
文本的字体大小,请参见:
fontsize.
破折号 (str)
导致线条变为虚线。一般格式为
"[n m] p",其中包含(最多)3个浮点数表示像素长度。n是虚线的长度,m(可选)是后续的间隔长度,p(“相位” - 必填,即使为0也必须填写!)指定在虚线开始之前应跳过多少个像素。如果省略m,则默认为n。绘制连续线(没有虚线)使用
"[] 0"或 None 或""。示例:
指定
"[3 4] 0"意味着相邻的3个破折号和4个像素的间隙。
"[3 3] 0"和"[3] 0"做的是同样的事情。有关如何实现复杂的虚线效果的详细信息,请参见 Adobe PDF References,第217页。
颜色 / 填充 (列表, 元组)
描边和填充颜色可以指定为从 0 到 1 的元组或浮点数列表。这些序列的长度必须为 1(灰度),3(RGB)或 4(CMYK)。对于灰度颜色空间,可以接受单个浮点数,而不是笨拙的 (float,) 或 [float]。接受(默认)或使用
None来不使用该参数。为了简化颜色的指定,可以使用pymupdf.utils中的方法getColor()通过名称获取预定义的RGB颜色三元组。它接受一个字符串作为颜色的名称,并返回相应的三元组。该方法知道超过540种颜色名称 - 请参见颜色数据库部分。
请注意,术语 color 通常指“描边”颜色,当与填充颜色一起使用时。
如果将默认颜色参数设置为
None,那么将不会生成相应的颜色选择命令。如果 fill 和 color 都是None,那么绘图将不包含任何颜色规范。但是它仍然会被“描边”,这会导致 Adobe Acrobat 和所有其他查看器使用 PDF 的默认颜色“黑色”。
宽度 (浮点数)
形状中元素的边框宽度(如果适用)。默认值为1。宽度、颜色和填充之间有以下关系 / 依赖:
如果
fill=None形状元素将始终带有边框 - 即使color=None(在这种情况下采用黑色)或width=0(在这种情况下采用1)。没有边框的形状只能在指定填充颜色的情况下实现(当然可以是白色)。要实现这一点,请指定
width=0。在这种情况下,将忽略color参数。
描边不透明度 / 填充不透明度 (浮点数)
这两个值都是在 [0, 1] 范围内的浮点数。负值或大于 1 的值将被忽略(在大多数情况下)。这两个值设置透明度,值 0.5 对应于 50% 的透明度,0 表示不可见,1 表示不透明。举例来说,一个矩形的边框透明度应用于其边界,而填充透明度应用于其内部。
对于文本插入(
Shape.insert_text()和Shape.insert_textbox()),使用 fill_opacity 来设置文本的透明度。乍一看这似乎让人感到惊讶,但当你进一步查看 render_mode 时就会显而易见:fill_opacity 适用于黄色,而 stroke_opacity 适用于蓝色。
边框宽度 (浮动)
设置文本插入的边框宽度。v1.14.9 中新增。仅在 render mode 参数的值大于零时相关。
渲染模式 (整型)
在 1.14.9 版本中的新特性:
range(8)中的整数控制文本外观 (Shape.insert_text()和Shape.insert_textbox())。请参见 Adobe PDF 参考文献 第 246 页。在 v1.14.9 中新增。这些方法现在还区分填充和描边颜色。
对于默认值0,仅使用文本填充颜色来绘制文本。为了向后兼容,使用color参数也有效。
对于渲染模式1,只绘制每个字形(即文本字符)的边框,厚度由参数 border_width 设置。选择的颜色在 color 参数中取用,fill 参数被忽略。
对于渲染模式2,字形被填充和描边,使用颜色参数和指定的边框宽度。您可以使用这个值来模拟 粗体文本而不使用其他字体:为 填充 和 颜色 选择相同的值,并为 边框宽度 选择合适的值。
对于渲染模式3,字形既没有轮廓也没有填充:文本变得不可见。
以下示例使用 border_width=0.3,字体大小为 15。边框颜色为蓝色,填充颜色为黄色。
![]()
覆盖 (布尔值)
使项目出现在前景(默认)或背景中。
morph (序列)
导致由 draw*() 方法创建的形状或通过页面方法 insert_textbox() / insert_text() 插入的文本“变形”。如果不是 None,它必须是一个对 (fixpoint, matrix),其中 fixpoint 是一个 Point,而 matrix 是一个 Matrix。矩阵可以是除了平移以外的任何东西,即 matrix.e == matrix.f == 0 必须为真。该点用作矩阵运算的固定点。例如,如果 matrix 是旋转或缩放,则 fixpoint 是其中心。同样,如果 matrix 是左右或上下翻转,则镜像轴将是通过 fixpoint 的垂直线,分别是水平线,等等。
注意
几种方法包含检查要插入的项目是否真的适合页面(例如
Shape.insert_text(),或Shape.draw_rect())。然而,对于变形操作的结果,没有这样的保证:这完全是程序员的责任。
线帽 (已弃用:“圆形线帽”) (整数)
控制线段端点的外观。默认值0使每条线段在给定坐标处精确结束,呈现出锋利的边缘。值为1时,在端点处添加一个半圆,中心是端点,直径为线宽。值为2时,添加一个半正方形,边长为线宽,中心为线段端点。
在版本 1.14.15 中更改
lineJoin (int)
在版本 1.14.15 中的新功能: 控制线条连接的外观。可以是锐利的边缘 (0),圆角连接 (1),或切断的边缘 (2,“平头”)。
closePath (bool)
导致绘图的终点自动与起点连接(通过一条直线)。
