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
我正在使用 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