2013-11-09 5 views
1

В настоящее время я пытаюсь создать PDF documents с reportlab в python. На каждой странице моего PDF, он будет иметь несколько вопросов, как это:Python Reportlab Параграф не пересекает следующую страницу

enter image description here

Посмотрев вокруг, я пытался добиться этого формата с помощью Platypus SimpleDocTemplate и Platypus Paragraph. Как это (FYI - это не полный код, но я думаю, что это даст вам примерное представление)

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.lib.units import inch 

doc = SimpleDocTemplate('myfile.pdf') 
Story = [Spacer(1,1.65*inch)] 
style = styles['Normal'] 

quetsionno = Paragraph('Questoin no goes here',style) 
myquestion = Paragraph('my question goes here',style) 
myanswer1 = Paragraph('my answer1 goes here',style) 
myanswer2 = Paragraph('my answer2 goes here',style) 
myanswer3 = Paragraph('my answer3 goes here',style) 

Story.append(quetsionno)  
Story.append(myquestion) 
Story.append(myanswer1) 
Story.append(myanswer2) 
Story.append(myanswer3) 
Story.append(Spacer(1,0.2*inch)) 

doc.build(Story) 

Это создать на вопросы так, как я хочу, но всякий раз, когда вопрос достигнет к концу страницы, он разделяет вопрос, и это ответы. Как это:

enter image description here

Я не хочу, чтобы это произошло, так что в соответствии с this SO answer, я попытался с помощью paragraph.keepWithNext = True, но это не имеет никакого значения.

Есть ли способ сохранить мой вопрос + ответы вместе на одной странице (если не хватает места)?

ответ

2

Держите ваши вопросы и ответы вместе в KeepTogether Например:

question = Paragraph('What color is the sky?', style) 
answer1 = Paragraph('Red', style) 
answer2 = Paragraph('Green', style) 
answer3 = Paragraph('Blue', style) 

Story.append(KeepTogether([question, answer1, answer2, answer3])) 

ReportLab будет пытаться держать все в списке на той же странице.

+0

'KeepTogether' является одним из ответов в ссылке, которую я представил в своем вопросе. Когда я его использую, я всегда получаю это сообщение об ошибке 'NameError: глобальное имя KeepTogether 'не определено' –

+0

@ChrisAung Вы должны импортировать его сначала в верхней части своего скрипта, например:' from reportlab.platypus import KeepTogether' – Nitzle

+0

спасибо, я попробую и обновить результат –

Смежные вопросы