Code: Alles auswählen
BaseDocTemplate.__init__(self, filename, **kw)
Edit: Code-Tags
Code: Alles auswählen
BaseDocTemplate.__init__(self, filename, **kw)
Code: Alles auswählen
def build_story(self, text):
#Frame definieren
b, h = self.breite, self.hoehe
f = Frame(1*cm, 2*cm, b - (2 * cm), h - (5.5 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='main')
#PageTemplate definieren
myPage = PageTemplate(id='allPages', frames=[f],
onPage=self.buildHeadFoot, pagesize=(self.breite, self.hoehe))
self.addPageTemplates(myPage)
#Inhalt generieren
widths=(1*cm, 1.25*cm, 2*cm, 1.7*cm, 2.3*cm, 5.5*cm, 2.3*cm, 2.3*cm)
c_style=[('GRID',(0,0),(-1,-1),0.5,'#BFBFBF'),
('FONTSIZE',(0,0),(-1,-1), 10),
]
data = list()
for i in text:
try:
# String
self.story.append(Paragraph(i, self.style['BodyText']))
except AttributeError:
# List, Tuple
line = list()
for o in i:
line.append(Paragraph(o, self.style['BodyText']))
data.append(line)
t=Table(data, colWidths=widths, style=c_style)
self.story.append([t])
return
def main():
filename = '/home/whtb/Scripte/officeplanet/firmware_officeplanet/reportlab/aaaa.pdf'
story = [['001', '50', 'STÜCK', '100000', 'TEST', '12345678901234567890123456789012345678901234567890 TEST ENTHÄLT TEXT', '0.75', '37.50'],
['002', '5000', 'STÜCK', '100000', '4711ABC', 'KARTOFFELCHIPS', '0.75', '3.75'],
['003', '50', 'STÜCK', '100000', '9999ABC', 'BLEISTIFT HB', '0.25', '12.50'],
['004', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00'],
['005', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00'],
['006', '1', 'PALETTE', '100000', '750089123', 'KOPIeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeERPAPIER A4', '700.00', '700.00']]
with open(filename, 'wb') as f:
pdf = myPDF(filename)
pdf.build_story(story)
pdf.multiBuild(pdf.story)
if __name__ == '__main__':
main()
Komme da leider zu keiner Lösung und könnte Eure Hilfe gebrauchen!Traceback (most recent call last):
File "def_reportlap_table.py", line 155, in <module>
main()
File "def_reportlap_table.py", line 151, in main
pdf.multiBuild(pdf.story)
File "/usr/lib/python2.7/dist-packages/reportlab/platypus/doctemplate.py", line 951, in multiBuild
if thing.isIndexing():
AttributeError: 'list' object has no attribute 'isIndexing'
Code: Alles auswählen
def build_story(self, text):
#Frame definieren
b, h = self.breite, self.hoehe
f = Frame(1*cm, 2*cm, b - (2 * cm), h - (5.5 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='main')
#PageTemplate definieren
myPage = PageTemplate(id='allPages', frames=[f],
onPage=self.buildHeadFoot, pagesize=(self.breite, self.hoehe))
self.addPageTemplates(myPage)
#Inhalt generieren
widths=(1*cm, 1.25*cm, 2*cm, 1.7*cm, 2.3*cm, 5.5*cm, 2.3*cm, 2.3*cm)
c_style=[('GRID',(0,0),(-1,-1),0.5,'#BFBFBF'),
('FONTSIZE',(0,0),(-1,-1), 10),
]
data = list()
for i in text:
try:
# String
self.story.append(Paragraph(i, self.style['BodyText']))
except AttributeError:
# List, Tuple
line = list()
for o in i:
line.append(Paragraph(o, self.style['BodyText']))
data.append(line)
if len(data) > 0:
self.story=[Table(data, colWidths=widths, style=c_style)]
return
Code: Alles auswählen
for i in text:
if isinstance(i, str):
self.story.append(Paragraph(i, self.style['BodyText']))
elif isinstance(i, list) or isinstance(i, tuple):
line = list()
for o in i:
line.append(Paragraph(o, self.style['BodyText']))
data.append(line)
else:
#z.B. Fehlermeldung in dern Terminal, Log etc.
Code: Alles auswählen
def build_story(self, data):
#Frame definieren
b, h = self.breite, self.hoehe
f = Frame(1.7*cm, 2*cm, b - (2 * cm), h - (5.5 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='main')
#PageTemplate definieren
myPage = PageTemplate(id='allPages', frames=[f],
onPage=self.buildHeadFoot, pagesize=(self.breite, self.hoehe))
self.addPageTemplates(myPage)
#Inhalt generieren
try:
for i in data:
if isinstance(i, str):
self.story.append(Paragraph(i, self.style['BodyText']))
elif isinstance(i, list) or isinstance(i, tuple):
pass
else:
print('Für Type: %s, gibt es keine Workline!' % type(i))
except TypeError:
# Tabelle
self.story.append(data)
return
def build_table(self, data, head, widths, style):
new_list = list()
new_list.append(head)
for x in data:
line = list()
for text in x:
line.append(Paragraph(text, self.style['BodyText']))
new_list.append(line)
return Table(new_list, colWidths=widths, style=style)
def main():
filename = '/home/whtb/Scripte/officeplanet/firmware_officeplanet/reportlab/aaaa.pdf'
story = [['001', '50', 'STÜCK', '100000', 'TEST', '12345678901234567890123456789012345678901234567890 TEST ENTHÄLT TEXT', '0.75', '37.50'],
['002', '5000', 'STÜCK', '100000', '4711ABC', 'KARTOFFELCHIPS', '0.75', '3.75'],
['003', '50', 'STÜCK', '100000', '9999ABC', 'BLEISTIFT HB', '0.25', '12.50'],
['004', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00'],
['005', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00']]
table_head = ['POS', 'ME', 'VE', 'INHALT', 'ARTIKEL',
'BENENNUNG, # ZEILENINFO', 'EP', 'GP']
widths=(1.05*cm, 1.25*cm, 2*cm, 1.7*cm, 2.3*cm, 5.5*cm, 2.3*cm, 2.3*cm)
style=[('GRID',(0,0),(-1,-1),0.5,'#BFBFBF'),
('LINEABOVE',(0,0),(7,0),1,'#BFBFBF'),
('LINEABOVE',(0,1),(7,1),1,'#BFBFBF'),
('VALIGN',(0,0),(-1,-1),'TOP'),
('ALIGN',(0,0),(1,-1),'CENTER'),
('ALIGN',(5,0),(5,-1),'CENTER'),
('ALIGN',(6,0),(6,-1),'CENTER'),
('ALIGN',(1,1),(1,-1),'RIGHT'),
('ALIGN',(6,1),(6,-1),'RIGHT'),
('ALIGN',(7,1),(7,-1),'RIGHT'),
('BACKGROUND',(0,0),(-1,0), '#EAEAEA'),
('FONTSIZE',(0,0),(-1,-1), 10),
]
with open(filename, 'wb') as f:
pdf = myPDF(filename)
table = pdf.build_table(story, table_head, widths, style)
pdf.build_story(table)
pdf.multiBuild(pdf.story)
if __name__ == '__main__':
main()
Code: Alles auswählen
# Postversand
if doc.page == 1:
# Absendeadresse
canvas.drawString(doc.breite-(19*cm), 24.7 *cm,
'{}, {}, {}'.format(doc.FIRMA, doc.STREET,
doc.PLZ + ' ' + doc.ORT))
# Zieladresse
canvas.setFont('Helvetica', 11)
name, name2, street, plz_ort = doc.adresse
canvas.drawString(doc.breite-(19*cm), 24 *cm, name)
canvas.drawString(doc.breite-(19*cm), 23.5 *cm, name2)
canvas.drawString(doc.breite-(19*cm), 22.8 *cm, street)
canvas.drawString(doc.breite-(19*cm), 22.3 *cm, plz_ort)
canvas.restoreState()
Code: Alles auswählen
def build_story(self, data):
#Frame definieren
b, h = self.breite, self.hoehe
# Page 1
f = Frame(1.7*cm, 2*cm, b - (2 * cm), h - (12.2 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='main')
# Next Pages
#f = Frame(1.7*cm, 2*cm, b - (2 * cm), h - (6.2 * cm),
# showBoundary=0, leftPadding=0, rightPadding=0, id='main')
#PageTemplate definieren
myPage = PageTemplate(id='allPages', frames=[f],
onPage=self.buildHeadFoot, pagesize=(self.breite, self.hoehe))
self.addPageTemplates(myPage)
Code: Alles auswählen
class myPDF(BaseDocTemplate):
def __init__(self, filename, invoice_head, data, adresse, table, **kw):
self.allowSplitting = 0
BaseDocTemplate.__init__(*(self, filename), **kw)
self.format = A4
self.breite, self.hoehe = self.format
self.author = 'noisefloor'
self.title = 'ReportLab Document'
self.subject = 'ReportLab Demo'
[self.NAME, self.NAME2, self.NAME_ADDITION, self.STREET,
self.PLZ, self.ORT, self.FIRMA, self.TELEFON, self.FAX,
self.EMAIL, self.INTERNET, self.BANK, self.BIC, self.IBAN,
self.UST_IDENT, self.RECHTSFORM] = IDENT
self.adresse = adresse
self.table_head, self.widths, self.t_style = table
self.invoice_head = invoice_head
self.data = data
self.encrypt = pdfencrypt.StandardEncryption('',
ownerPassword='noisefloor',
canPrint=1,
canModify=0,
canCopy=0,
canAnnotate=1,
strength=40)
self.style = getSampleStyleSheet()
self.story = []
@staticmethod
def buildHeadFoot(canvas, doc):
print('buildHeadFoot', doc.page)
canvas.saveState()
canvas.setFillColorRGB(0, 0, 0)
# Head
grafik = '{}{}'.format(Path('reportlab'), 'Firmenkopf.png')
canvas.drawImage(grafik, doc.breite-(7.8*cm), doc.hoehe-( 2.2*cm),
width=6.8* cm, height=1.7* cm)
# Foot
canvas.line(2*cm, 2.25 * cm, doc.breite-(0.5*cm), 2.25 * cm)
canvas.setStrokeColor('#BFBFBF')
canvas.setFont('Helvetica', 8.5)
# Spalte 1 Adresse
canvas.drawString(doc.breite-(19*cm), 1.75 *cm, doc.FIRMA)
canvas.drawString(doc.breite-(19*cm), 1.35 *cm, doc.NAME2)
canvas.drawString(doc.breite-(19*cm), 0.95 *cm, doc.STREET)
canvas.drawString(doc.breite-(19*cm), 0.55 *cm,
doc.PLZ + ' ' + doc.ORT)
# Spalte 2 Komunikation-Definition
canvas.drawString(doc.breite-(15.05*cm), 1.75 *cm, 'Telefon:')
canvas.drawString(doc.breite-(15.05*cm), 1.35 *cm, 'Fax:')
canvas.drawString(doc.breite-(15.05*cm), 0.95 *cm, 'E-Mail:')
canvas.drawString(doc.breite-(15.05*cm), 0.55 *cm, 'Internet:')
canvas.drawString(doc.breite-(13.8*cm), 1.75 *cm, doc.TELEFON)
canvas.drawString(doc.breite-(13.8*cm), 1.35 *cm, doc.FAX)
canvas.drawString(doc.breite-(13.8*cm), 0.95 *cm, doc.EMAIL)
canvas.drawString(doc.breite-(13.8*cm), 0.55 *cm, doc.INTERNET)
# Spalte 3 Bank-Definition
canvas.drawString(doc.breite-(10.6*cm), 1.75 *cm, doc.BANK)
canvas.drawString(doc.breite-(10.6*cm), 1.35 *cm, 'BIC:')
canvas.drawString(doc.breite-(10.6*cm), 0.95 *cm, 'IBAN:')
canvas.drawString(doc.breite-(9.7*cm), 1.35 *cm, doc.BIC)
canvas.drawString(doc.breite-(9.7*cm), 0.95 *cm, doc.IBAN)
# Spalte 5 Definition Inhaber, USt-Ident-Nr
canvas.drawString(doc.breite-(5*cm), 1.75 *cm, 'Inhaber:')
canvas.drawString(doc.breite-(5*cm), 1.35 *cm, 'Rechtsform:')
canvas.drawString(doc.breite-(5*cm), 0.95 *cm, 'USt-Ident-Nr.:')
canvas.drawString(doc.breite-(3*cm), 1.75 *cm, doc.NAME2)
canvas.drawString(doc.breite-(3*cm), 1.35 *cm, doc.RECHTSFORM)
canvas.drawString(doc.breite-(3*cm), 0.95 *cm, doc.UST_IDENT)
b, h = doc.breite, doc.hoehe
if doc.page == 1:
# Absendeadresse
canvas.drawString(doc.breite-(19*cm), 25.7 *cm,
'{}, {}, {}'.format(doc.FIRMA, doc.STREET,
doc.PLZ + ' ' + doc.ORT))
# Zieladresse
canvas.setFont('Helvetica', 11)
name, name2, street, plz_ort = doc.adresse
canvas.drawString(doc.breite-(19*cm), 25 *cm, name)
canvas.drawString(doc.breite-(19*cm), 24.5 *cm, name2)
canvas.drawString(doc.breite-(19*cm), 23.8 *cm, street)
canvas.drawString(doc.breite-(19*cm), 23.3 *cm, plz_ort)
f = Frame(1.7*cm, 2*cm, b - (2 * cm), h - (12.2 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='firstPage')
#PageTemplate definieren
doc.addPageTemplates(PageTemplate(id='firstPage',frames=[f],
onPage=doc.buildInvoiceFirst(canvas, doc)))
if doc.page > 1:
b, h = doc.breite, doc.hoehe
f = Frame(1.7*cm, 2*cm, b - (2 * cm), h - (7.2 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='nextPages')
#PageTemplate definieren
doc.addPageTemplates(PageTemplate(id='firstPage',frames=[f],
onPage=doc.buildInvoiceNext(canvas, doc)))
canvas.restoreState()
@staticmethod
def buildInvoiceFirst(canvas, doc):
print('buildInvoiceFirst', doc.page)
canvas.saveState()
canvas.setFillColorRGB(0, 0, 0)
# Rechnungkopf
canvas.setFont('Helvetica', 16)
canvas.drawString(doc.breite-(19*cm), doc.hoehe-(9.1 *cm), 'RECHNUNG')
canvas.setFont('Helvetica', 10)
new_list = doc.invoice_head
widths=(2.5*cm, 2.5*cm, 2.5*cm, 1.5*cm, 2.3*cm, 2.3*cm)
t0 = Table(new_list, colWidths=widths,
style=[('GRID',(0,0),(-1,-1),0.5,'#BFBFBF'),
('ALIGN',(2,0),(2,-1),'CENTER'),
('ALIGN',(3,0),(3,-1),'CENTER'),
('BACKGROUND',(0,0),(-1,0), '#EAEAEA'),
('FONTSIZE',(0,0),(-1,-1), 10)
])
t0.wrapOn(canvas, doc.breite, doc.hoehe)
t0.drawOn(canvas, *doc.coord(6.8, 9.5, cm))
canvas.setFont('Helvetica', 10)
# Tabellenkopf
new_list = [doc.table_head]
t1 = Table(new_list, colWidths=doc.widths, style=doc.t_style)
t1.wrapOn(canvas, doc.breite, doc.hoehe)
t1.drawOn(canvas, *doc.coord(2, 11.05, cm))
canvas.setFillColorRGB(0, 0, 0)
#canvas.setStrokeColorRGB(0, 0, 0)
canvas.setFont('Helvetica', 8)
text = 'LEISTUNGSZEITPUNKT IST IDENTISCH MIT DEM MONAT DES RECHNUNGDATUMS!'
canvas.drawString(doc.breite-(14.2*cm), doc.hoehe-(9.9 *cm), text)
# Tabelle
#t2 = Table(doc.data, colWidths=doc.widths, style=doc.t_style)
#t2.wrapOn(canvas, doc.breite, doc.hoehe)
# t2.drawOn(canvas, *doc.coord(2, 11.05, cm))
canvas.restoreState()
@staticmethod
def buildInvoiceNext(canvas, doc):
print('buildInvoiceNext', doc.page)
canvas.saveState()
canvas.setFillColorRGB(0, 0, 0)
# Rechnungkopf
canvas.setFont('Helvetica', 16)
canvas.drawString(doc.breite-(19*cm), doc.hoehe-(4.1 *cm), 'RECHNUNG')
canvas.setFont('Helvetica', 10)
new_list = doc.invoice_head
widths=(2.5*cm, 2.5*cm, 2.5*cm, 1.5*cm, 2.3*cm, 2.3*cm)
t0 = Table(new_list, colWidths=widths,
style=[('GRID',(0,0),(-1,-1),0.5,'#BFBFBF'),
('ALIGN',(2,0),(2,-1),'CENTER'),
('ALIGN',(3,0),(3,-1),'CENTER'),
('BACKGROUND',(0,0),(-1,0), '#EAEAEA'),
('FONTSIZE',(0,0),(-1,-1), 10)
])
t0.wrapOn(canvas, doc.breite, doc.hoehe)
t0.drawOn(canvas, *doc.coord(6.8, 4.5, cm))
canvas.setFont('Helvetica', 10)
# Tabellenkopf
new_list = [doc.table_head]
t1 = Table(new_list, colWidths=doc.widths, style=doc.t_style)
t1.wrapOn(canvas, doc.breite, doc.hoehe)
t1.drawOn(canvas, *doc.coord(2, 6.2, cm))
canvas.setFont('Helvetica', 8)
text = 'LEISTUNGSZEITPUNKT IST IDENTISCH MIT DEM MONAT DES RECHNUNGDATUMS!'
canvas.drawString(doc.breite-(14.2*cm), doc.hoehe-(4.9 *cm), text)
# Tabelle
#t2 = Table(doc.data, colWidths=doc.widths, style=doc.t_style)
#t2.wrapOn(canvas, doc.breite, doc.hoehe)
#t2.drawOn(canvas, *doc.coord(2, 6.2, cm))
canvas.restoreState()
def coord(self, x, y, unit=1):
x, y = x * unit, self.hoehe - y * unit
return x, y
def build_story(self, data):
#Frame definieren
b, h = self.breite, self.hoehe
# Page 1
f = Frame(1.7*cm, 2*cm, b - (2 * cm), h - (12.2 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='firstPage')
f1 = Frame(1.7*cm, 2*cm, b - (2 * cm), h - (7.2 * cm),
showBoundary=0, leftPadding=0, rightPadding=0, id='nextPages')
#PageTemplate definieren
self.addPageTemplates(PageTemplate(id='firstPage',frames=[f],
onPage=self.buildHeadFoot))
#Inhalt generieren
try:
for i in data:
if isinstance(i, str):
self.story.append(Paragraph(i, self.style['BodyText']))
elif isinstance(i, list) or isinstance(i, tuple):
pass
else:
print('Für Type: %s, gibt es keine Workline!' % type(i))
except TypeError:
# Tabelle
self.story.append(data)
return
def build_table(self):
new_list = list()
for x in self.data:
line = list()
for text in x:
line.append(Paragraph(text, self.style['BodyText']))
new_list.append(line)
return Table(new_list, colWidths=self.widths, style=self.t_style)
def main():
filename = '/home/pfad/zu/datei.pdf'
invoice_head = ['NUMMER', 'DATUM', 'SEITE', 'POS', 'REFERENZ', 'KUNDE']
invoice_data = ['12345678', '2015.04.09', '1 von 3', '12', 'REFERENZ', 'KUNDE']
story = [['001', '50', 'STÜCK', '100000', 'TEST', '12345678901234567890123456789012345678901234567890 TEST ENTHÄLT TEXT', '0.75', '37.50'],
['002', '5000', 'STÜCK', '100000', '4711ABC', 'KARTOFFELCHIPS', '0.75', '3.75'],
['003', '50', 'STÜCK', '100000', '9999ABC', 'BLEISTIFT HB', '0.25', '12.50'],
['004', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00'],
['005', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00'],
['006', '50', 'STÜCK', '100000', 'TEST', '12345678901234567890123456789012345678901234567890 TEST ENTHÄLT TEXT', '0.75', '37.50'],
['007', '5000', 'STÜCK', '100000', '4711ABC', 'KARTOFFELCHIPS', '0.75', '3.75'],
['008', '50', 'STÜCK', '100000', '9999ABC', 'BLEISTIFT HB', '0.25', '12.50'],
['009', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00'],
['010', '1', 'PALETTE', '100000', '750089123', 'KOPIERPAPIER A4', '700.00', '700.00'],]
table_head = ['POS', 'ME', 'VE', 'INHALT', 'ARTIKEL',
'BENENNUNG, # ZEILENINFO', 'EP', 'GP']
widths=(1.05*cm, 1.25*cm, 2*cm, 1.7*cm, 2.3*cm, 5.5*cm, 2.3*cm, 2.3*cm)
style=[('GRID',(0,0),(-1,-1),0.5,'#BFBFBF'),
('LINEABOVE',(0,0),(7,0),1,'#BFBFBF'),
('LINEABOVE',(0,1),(7,1),1,'#BFBFBF'),
('VALIGN',(0,0),(-1,-1),'TOP'),
('ALIGN',(0,0),(1,-1),'CENTER'),
('ALIGN',(5,0),(5,-1),'CENTER'),
('ALIGN',(6,0),(6,-1),'CENTER'),
('ALIGN',(1,1),(1,-1),'RIGHT'),
('ALIGN',(6,1),(6,-1),'RIGHT'),
('ALIGN',(7,1),(7,-1),'RIGHT'),
('BACKGROUND',(0,0),(-1,0), '#EAEAEA'),
('FONTSIZE',(0,0),(-1,-1), 10),
]
adresse = ['Müller AG', 'Maschinenteile', 'Teststr. 75', '12345 Piepshausen']
with open(filename, 'wb') as f:
pdf = myPDF(filename, [invoice_head, invoice_data], story,
adresse, (table_head, widths, style))
table = pdf.build_table()
pdf.build_story(table)
pdf.multiBuild(pdf.story)
if __name__ == '__main__':
main()