ich stecke fest. Ich möchte gerne eine Rechnung mithilfe von ReportLab erzeugen. Dabei möchte ich gerne nach dem "PLATYPUS" (Page Layout and Typography Using Scripts) Verfahren arbeiten.
Siehe hier unter Kapitel 5: https://www.reportlab.com/docs/reportlab-userguide.pdf
Nun scheitert es bei mir leider schon daran, dass ich nicht mal eine Seite in mein Dokument bekomme.
Wenn ich diesen Quellcode ausführen will:
Code: Alles auswählen
from reportlab.platypus import BaseDocTemplate, PageTemplate
from reportlab.lib.units import mm
from reportlab.platypus import Paragraph, Frame
from reportlab.lib.pagesizes import letter, A4
class Document(BaseDocTemplate):
def __init__(self, filename, pagesize, pageTemplates=[]):
super().__init__(self)
def afterInit(self):
self.addPageTemplates(self.pageTemplates)
def main():
first_paragraph = Paragraph('this is a test')
flowables = [first_paragraph]
first_frame = Frame(10*mm, 10*mm, 50*mm, 50*mm, showBoundary=1)
frames = [first_frame]
first_page = PageTemplate(frames)
document = Document('test_document.pdf', A4, first_page)
document.build(flowables)
if __name__ == "__main__":
main()
Code: Alles auswählen
Traceback (most recent call last):
File "C:/Users/haeus/workspace/LoyaltyCustomer/platypus3.py", line 27, in <module>
main()
File "C:/Users/haeus/workspace/LoyaltyCustomer/platypus3.py", line 23, in main
document.build(flowables)
File "C:\Users\haeus\AppData\Local\Programs\Python\Python38-32\lib\site-packages\reportlab\platypus\doctemplate.py", line 1059, in build
self._startBuild(filename,canvasmaker)
File "C:\Users\haeus\AppData\Local\Programs\Python\Python38-32\lib\site-packages\reportlab\platypus\doctemplate.py", line 1030, in _startBuild
self.handle_documentBegin()
File "C:\Users\haeus\AppData\Local\Programs\Python\Python38-32\lib\site-packages\reportlab\platypus\doctemplate.py", line 607, in handle_documentBegin
self.pageTemplate = self.pageTemplates[self._firstPageTemplateIndex]
IndexError: list index out of range
Hier einmal der Code, auf den ich durchs debuggen aufmerksam geworden bin, dieser steckt in der BaseDocTemplate-Klasse des ReportLab Moduls (Wichtig ist hierbei zu erwähnen, dass die Variable "_firstPageTemplateIndex" weiter oben auf 0 gesetzt wird, es wird also nur das erste Listenelement aufgerufen):
Code: Alles auswählen
def handle_documentBegin(self):
'''implement actions at beginning of document'''
self._hanging = [PageBegin]
if isinstance(self._firstPageTemplateIndex,list):
self.handle_nextPageTemplate(self._firstPageTemplateIndex)
self._setPageTemplate()
else:
self.pageTemplate = self.pageTemplates[self._firstPageTemplateIndex]
self.page = 0
self.beforeDocument()

Code: Alles auswählen
first_page = PageTemplate(frames)
document = Document('test_document.pdf', A4, first_page)