reportlab 中的自动换行

Word wrapping in reportlab

我正在使用 drawCentredString 在屏幕中央绘制一个字符串。但是如果字符串大于 Canvas 的宽度,它就会超出框架。如何处理,使其向下流动?

reportlab.platypus.Paragraph 自动将文本排到新行。您必须将它与居中对齐的样式一起使用。

如果由于某种原因您不能使用 Paragraph,您可以使用内置的 python 模块 textwrap 结合以下功能。

import textwrap

def draw_wrapped_line(canvas, text, length, x_pos, y_pos, y_offset):
    """
    :param canvas: reportlab canvas
    :param text: the raw text to wrap
    :param length: the max number of characters per line
    :param x_pos: starting x position
    :param y_pos: starting y position
    :param y_offset: the amount of space to leave between wrapped lines
    """
    if len(text) > length:
        wraps = textwrap.wrap(text, length)
        for x in range(len(wraps)):
            canvas.drawCenteredString(x_pos, y_pos, wraps[x])
            y_pos -= y_offset
        y_pos += y_offset  # add back offset after last wrapped line
    else:
        canvas.drawCenteredString(x_pos, y_pos, text)
    return y_pos