вы можете получить ширину страницы, используя рамку этой страницы. Когда вы используете colWidths ключевого слово, вы должны знать, сколько места у вас есть в наличие:
table = ar.Table(data, colWidths=columnWidths)#there is also rowHeights=
table.setStyle(tableStyle)
Как видно из таблицы рисует себя в сборке, вы должны настроить таблицу так, что он использует доступную ширину фрейма будет нарисован.
Эти colWidth могут быть рассчитаны так, чтобы они использовали доступное пространство. Чтобы показать это, я должен был бы использовать расширенный пример, я буду стараться без:
Сначала вы должны определить свой собственный класс документа, который наследуется от BaseDocTemplate:
class MyDocTemplate(BaseDocTemplate):
def __init__(self, filename):
BaseDocTemplate.__init__(self, filename)
#there are more keyword
#arguments you can pass
#pagesize=A4,
#leftMargin=leftMargin,
#rightMargin=rightMargin,
#topMargin=topMargin,
#bottomMargin=bottomMargin,
#title=title,
#author=author,
#subject=subject,
#creator=creator)
затем, если вы создаете документ :
doc = MyDocTemplate(fileName)
вы можете получить ширину кадра с помощью собственной функции, определенной внутри вашего класса документа:
frame = doc.getFrame('FirstL')
width = frame._aW
эта функция может выглядеть следующим образом:
def getFrame(self,framename,orientation="Portrait"):
"""
returns frame
frame._x1,frame._y1
frame._width,frame._height
frame._leftPadding,frame._bottomPadding
frame._rightPadding,frame._topPadding
"""
f = attrgetter("id")
frame = None
for temp in self.pageTemplates[::-1]:
if f(temp) == framename:
#print(temp.id)
for frame in temp.frames:
print(frame.id)
if f(frame) == orientation:
return frame
ReportLab является довольно сложным, я попытался объяснить, не давая подробное объяснение того, как зарегистрировать шаблоны страниц в виде списка на классе документа
pageTemplates список вы можете добавить шаблоны страниц для:
templates.append(PageTemplate(id='FirstL',frames=frameL,onPage=onFirstPage,pagesize=pagesize))
onFirstPage является функцией, которая использует следующую схему:
def drawFirstPage(canv,doc):
"""
This is the Title Page Template (Portrait Oriented)
"""
canv.saveState()
#set Page Size or do some other things on the canvas
frame = doc.getFrame('FirstP')
canv.setPageSize(frame.pagesize)
canv.setFont(_baseFontName,doc.fontSize)
canv.restoreState()
При добавлении шаблонов страниц, как это, предлагаемая функция должна работать:
doc.addPageTemplates(templates)