【问题标题】:Reportlab Error after page break分页后的 Reportlab 错误
【发布时间】:2016-09-18 01:03:46
【问题描述】:

我正在设计一个双面打印的两页表单。添加分页符后,出现以下错误:

    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'

这是我的代码:

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)

我尝试修改 Reportlab 模块,但没有成功。有人有什么想法吗?

【问题讨论】:

    标签: python reportlab


    【解决方案1】:

    我试图理解错误,我猜有问题 doc = SimpleDocTemplate("key_card.pdf", pagesize=A4).问题可能是参数“key_card.pdf”。我不确定

    编辑:也许,BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker) 问题是关于连接到 doc.build(elements) 中的元素的“flowables”参数

    SOLUTION -> elements.append(PageBreak) 应该是 elements.append(PageBreak())

    【讨论】:

    • 我转换了创建 pageTemplate 和 Frame 的代码并使用了 BaseDocTemplate 并得到了完全相同的错误。当我注释掉分页符时,它全部打印没有错误(除了没有分页符)。
    • 我想我发现它elements.append(PageBreak) 应该是elements.append(PageBreak())。我用谷歌搜索“缺少 1 个必需的位置参数:'self'”,发现这些 link link 你应该小心类初始化;)
    • 你是绝对正确的。我不知道为什么我没有看到它。如果您将评论作为答案,我会接受。 - 谢谢!
    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多