Как добавить пробел между строками в одном абзаце с помощью Reportlab - PullRequest
2 голосов
/ 19 апреля 2011

У меня есть блок текста, который динамически извлекается из базы данных и помещается в PDF-файл перед отправкой пользователю. Текст помещается на подкладочный фон, очень похожий на бумагу для блокнота. Я хочу разместить текст так, чтобы между каждой фоновой линией находилась только одна строка текста.

Мне удалось использовать следующий код для создания вертикального интервала между абзацами (используется для создания другой части PDF).

    style = getSampleStyleSheet()['Normal']
    style.fontName = 'Helvetica'
    style.spaceAfter = 15
    style.alignment = TA_JUSTIFY

    story = [Paragraph(choice.value,style) for choice in chain(context['question1'].itervalues(),context['question2'].itervalues())]
    generated_file = StringIO()
    frame1 = Frame(50,100,245,240, showBoundary=0)
    frame2 = Frame(320,100,245,240, showBoundary=0)
    page_template = PageTemplate(frames=[frame1,frame2])
    doc = BaseDocTemplate(generated_file,pageTemplates=[page_template])
    doc.build(story)

Однако это не сработает, потому что у меня только один большой абзац.

Ответы [ 2 ]

11 голосов
/ 19 апреля 2011

Я уверен, что то, что ты хочешь изменить, является ведущим.Из руководства пользователя в главе 6.

Для получения текста с двойным интервалом используйте верхний пробел.Если вы установите autoLeading (по умолчанию «off») в «min» (используйте наблюдаемое опережение, даже если оно меньше указанного) или «max» (используйте большее из наблюдаемых и заданных), тогда делается попытка определить опережение в строке с помощьюЛинияЭто может быть полезно, если строки содержат разные размеры шрифта и т. Д.

Начало определяется ранее в главе 2:

Межстрочный интервал (Leading)

Вертикальное смещение между точкой, в которой начинается одна линия, и местом, где начинаются следующие, называется начальным смещением.

Так что попробуйте различные значения начальных значений, например:

style = getSampleStyleSheet()['Normal']
style.leading = 24
0 голосов
/ 24 февраля 2016

Добавить ведущий в ParagraphStyle

orden = ParagraphStyle('orden')
orden.leading = 14
orden.borderPadding = 10
orden.backColor=colors.gray
orden.fontSize = 14

Создать PDF

buffer = BytesIO()
p = canvas.Canvas(buffer, pagesize=letter)

text = Paragraph("TEXT Nro 0001", orden)
text.wrapOn(p,500,10)
text.drawOn(p, 45, 200)


p.showPage()
p.save()
pdf = buffer.getvalue()
buffer.close()

Результат enter image description here

...