Как нарисовать абзац сверху вниз на холсте?
Я пытался создать PDF, используя PyPDF2 и Reprortlab. Мне нужно нарисовать плавный абзац с огромным куском текста. Проблема в том, что размер абзаца может отличаться. Я хочу, чтобы верхний левый угол (начало абзаца) абзаца был зафиксирован для всех страниц. Проблема в том, что когда я рисую абзац в фиксированном месте (x,y на холсте), левый нижний угол остается в этом месте (x,y). Я думаю, что это ошибочное поведение ReportLab. Есть ли твик или обходной путь, чтобы начать абзац сверху слева, а не снизу слева, чтобы абзацы начинались с одного и того же места независимо от размера абзаца?
2 ответа
При использовании функции переноса абзаца он возвращает общую высоту переносимого текста. Это можно использовать в сочетании с желаемым местоположением для текста, чтобы создать видимость рисования текста от 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
образец: