如何在canvas上从上到下画一段?
How to draw a paragraph from top to bottom on canvas?
我一直在尝试使用 PyPDF2 和 Reprortlab 创建 pdf。我需要绘制一个带有大量文本的可流动段落。问题是段落的大小可能会有所不同。我想为所有页面保留段落的左上角(段落的开头)。问题是当我在固定位置(Canvas 上的 x,y)绘制段落时,左下角停留在该位置(x,y)。我想这是 ReportLab 的默认行为。是否有调整或变通方法从左上角而不是左下角开始段落,以便无论段落大小如何,段落都从相同位置开始?
当使用段落的换行功能时,它会return换行文本的总高度。这可以与文本所需的位置结合使用,以创建从 0,0 开始绘制文本的外观,即左上而不是左下。
def draw_paragraph(canvas, msg, x, y, max_width, max_height):
message_style = ParagraphStyle('Normal')
message = msg.replace('\n', '<br />')
message = Paragraph(message, style=message_style)
w, h = message.wrap(max_width, max_height)
message.drawOn(canvas, x, y - h)
#can canvas
#openbd is just font opensas it is custom font
# you can remove fontname parameter
def draw_paragraphcontent(self, can, msg, x, y, max_width, max_height, color, fontsize, text_align=TA_CENTER,
fontname='openbd'):
message_style = ParagraphStyle('Normal', fontName=fontname, textColor=color, fontSize=fontsize,
alignment=text_align)
message = msg.replace('\n', '<br />')
message = Paragraph(message, style=message_style)
w, h = message.wrap(max_width, max_height)
message.drawOn(can, x, y - h)
pass
示例:
段落样式中可用的样式属性如此之多
我一直在尝试使用 PyPDF2 和 Reprortlab 创建 pdf。我需要绘制一个带有大量文本的可流动段落。问题是段落的大小可能会有所不同。我想为所有页面保留段落的左上角(段落的开头)。问题是当我在固定位置(Canvas 上的 x,y)绘制段落时,左下角停留在该位置(x,y)。我想这是 ReportLab 的默认行为。是否有调整或变通方法从左上角而不是左下角开始段落,以便无论段落大小如何,段落都从相同位置开始?
当使用段落的换行功能时,它会return换行文本的总高度。这可以与文本所需的位置结合使用,以创建从 0,0 开始绘制文本的外观,即左上而不是左下。
def draw_paragraph(canvas, msg, x, y, max_width, max_height):
message_style = ParagraphStyle('Normal')
message = msg.replace('\n', '<br />')
message = Paragraph(message, style=message_style)
w, h = message.wrap(max_width, max_height)
message.drawOn(canvas, x, y - h)
#can canvas
#openbd is just font opensas it is custom font
# you can remove fontname parameter
def draw_paragraphcontent(self, can, msg, x, y, max_width, max_height, color, fontsize, text_align=TA_CENTER,
fontname='openbd'):
message_style = ParagraphStyle('Normal', fontName=fontname, textColor=color, fontSize=fontsize,
alignment=text_align)
message = msg.replace('\n', '<br />')
message = Paragraph(message, style=message_style)
w, h = message.wrap(max_width, max_height)
message.drawOn(can, x, y - h)
pass
示例:
段落样式中可用的样式属性如此之多