2016-09-17 9 views
2

Ich entwerfe ein zweiseitiges Formular zum Drucken Duplex. Nachdem ich einen Seitenumbruch hinzufügen, bekomme ich folgende Fehlermeldung:Reportlab Fehler nach Seitenumbruch

File "f:\Dropbox\pms\pms_reports.py", line 450, in <module> 
    a = Key_card1() 
File "f:\Dropbox\pms\pms_reports.py", line 441, in __init__ 
    doc.build(elements) 
File "c:\Python34\Lib\site-packages\reportlab\platypus\doctemplate.py", line 1171, in build 
    BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker) 
File "c:\Python34\Lib\site-packages\reportlab\platypus\doctemplate.py", line 927, in build 
    self.handle_flowable(flowables) 
File "c:\Python34\Lib\site-packages\reportlab\platypus\doctemplate.py", line 775, in handle_flowable 
    self.handle_keepWithNext(flowables) 
File "c:\Python34\Lib\site-packages\reportlab\platypus\doctemplate.py", line 742, in handle_keepWithNext 
    while i<n and flowables[i].getKeepWithNext(): i += 1 

builtins.TypeError: getKeepWithNext() missing 1 required positional argument: 'self' 

Hier ist mein Code:

from reportlab.lib.pagesizes import A4, landscape 
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, PageBreak 
from reportlab.lib.styles import getSampleStyleSheet 

    class Key_card1(): 
    def __init__(self, start_date=datetime.now(), room="1", 
      end_date=datetime.now()+timedelta(days=1), password = "999999"): 
     stylesheet = getSampleStyleSheet() 
     doc = SimpleDocTemplate("key_card.pdf", pagesize=A4) 

     if password == "999999": 
      password = str(random.randint(10000,99999)) 

     roomno = "Room" + room 
     w_text = [] 
     w_text.append(Paragraph("To use the wireless broadband…:",stylesheet["BodyText"])) 
     w_text.append(Paragraph("User id: <b>" + roomno + "</b>", stylesheet["BodyText"])) 
     w_text.append(Paragraph("Password: <b>" + password + "</b>", stylesheet["BodyText"])) 

     message_text = [] 
     message_text.append(Paragraph("Our current menus ...", stylesheet["BodyText"])) 
     message_text.append(Paragraph("Our restaurant can get very busy ...",stylesheet["BodyText"])) 
     message_text.append(Paragraph("Your shower has a safety device to...", stylesheet["BodyText"])) 
     message_text .append(Paragraph("Please do not hesitate to call...",stylesheet["BodyText"])) 


     elements=[] 
     table_data = [(w_text, message_text)] 
     the_table = Table(table_data) 
     the_table.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'MIDDLE')])) 
     elements.append(the_table) 
     elements.append(PageBreak) 

     #Cover page 
     logo= "y:\marketing\priory_master_logo bw.jpg" 
     im = Image(logo, 3*cm, 1.258*cm) 

     cover_data = [] 
     cover_data.append(im) 
     cover_data.append(Paragraph("Room number : " + room, stylesheet["BodyText"])) 
     left_cell =[] 
     left_cell.append(Paragraph(" ", stylesheet["BodyText"])) 


     table_data1 = [(left_cell, cover_data)] 
     the_table1 = Table(table_data1) 
     the_table1.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'MIDDLE')])) 
     elements.append(the_table1) 


     doc.build(elements) 

Ich versuchte, die Reportlab Module zu modifizieren, aber ich war nicht erfolgreich. Hat jemand Ideen?

Antwort

2

Ich habe versucht, den Fehler zu verstehen, und ich schätze, es gibt ein Problem in doc = SimpleDocTemplate("key_card.pdf", pagesize=A4). Das Problem kann das Argument "key_card.pdf" sein. Ich bin nicht sicher

Edit: Vielleicht, BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker) Problem ist über "Flowables" Argument, die Elementen in doc.build verbunden ist (Elemente)

LÖSUNG -> elements.append (Seitenumbruch) sollten Elemente sein. anhängen (PageBreak())

+0

Ich konvertierte den Code, der ein pageTemplate und einen Frame erzeugte, und verwendete BaseDocTemplate und bekam genau den gleichen Fehler. Wenn ich den Seitenumbruch auskommentiere, wird alles ohne Fehler ausgedruckt (außer keinem Seitenumbruch). – Dkellygb

+0

Ich glaube ich fand es 'elements.append (PageBreak)' sollte 'elements.append (PageBreak())' sein. Ich googelte "fehlende 1 erforderliche positional Argument: 'selbst'" und fand diese [link] (http://stackoverflow.com/questions/17534345/typeerror-missing-1-required-positional-argument-self) [link] (http://stackoverflow.com/questions/37289391/missing-1-required-positional-argumentself-when-assigning-a-method-to-a-varia) sollten Sie vorsichtig sein über die Klasseninitialisierung;) –

+0

Sie sind absolut richtig . Ich weiß nicht, warum ich es nicht gesehen habe. Wenn Sie Ihren Kommentar zu einer Antwort machen, werde ich es annehmen. - Vielen Dank! – Dkellygb