Разбейте строку на естественный разрыв

При отображении заголовка (используя reportlab) я хотел бы разделить его на две строки, если он длиннее 45 символов. Пока у меня есть это:

if len(Title) < 45:
    drawString(200, 695, Title)
else:
    drawString(200, 705, Title[:45])
    drawString(200, 685, Title[45:])

Проблема в том, что я хочу разделить заголовок только при естественном разрыве, например, в месте пробела. Как мне сделать это?

4 ответа

Решение

Посмотрите этот пример кода:

import textwrap

print("\n".join(textwrap.wrap("This is my sooo long title", 10)))

Выход:

This is my
sooo long
title

Смотрите полный документ Python: http://docs.python.org/library/textwrap.html

Использование rfind(' ', 0, 45) чтобы найти последний пробел перед границей и сломать в этой позиции. Если пробела нет (rfind возвращает -1), используйте ваш код.

Не уверен насчет альтернатив. Я мог бы предложить нарисовать текстовое поле с фоновым цветом в качестве фоновой страницы с шириной = 45 и ShrinkToFit=1. Таким образом, текст более 45 будет сокращен в конце слов..

s = 'this is a long line with a bunch of text for sure and goes on and on ..'

brk = s.find(' ', 45)
if brk == -1:
    print s
else:
    print('{:s}\n{:s}'.format(s[:brk], s[brk+1:]))

Сверните свои и, возможно, не так элегантно..

this is a long line with a bunch of text for sure
and goes on and on ..
Другие вопросы по тегам