【问题标题】:Python with ReportLab. How to write a line with SimpleDocTemplate?Python 与 ReportLab。如何用 SimpleDocTemplate 写一行?
【发布时间】:2014-01-12 20:06:32
【问题描述】:

我正在使用 Python 2.7.6 和 Django 1.5.5。 如何在 SimpleDocTemplate 中写一行?

我正在尝试这个:

@login_required
def report(request):
    rep = Report(request.user.username + "_cities.pdf")

    # Title
    rep.add_header("Cities")

    line = Line(0, 100, 500, 100)
    rep.add(line)

    # Body
    columns = ("City")
    cities = [(p.name) for p in City.objects.all()]

    table = Table([columns] + cities, style=GRID_STYLE)
    table.hAlign = "LEFT"
    table.setStyle([('BACKGROUND', (1, 1), (-2, -2), colors.lightgrey)])

    rep.add(table)

    rep.build()
    return rep.response

Line()from reportlab.graphics.shapes import Line。 Report 类只是 SimpleDocTemplate 的包装类:

class Report:
    styles = None
    response = None
    document = None
    elements = []

    def __init__(self, report_file_name):
        self.styles = styles.getSampleStyleSheet()
        self.styles.add(ParagraphStyle(name='Title2',
                                       fontName="Helvetica",
                                       fontSize=12,
                                       leading=14,
                                       spaceBefore=12,
                                       spaceAfter=6,
                                       alignment=TA_CENTER),
                        alias='title2')

        self.response = HttpResponse(mimetype="application/pdf")
        self.response["Content-Disposition"] = "attachment; filename=" + report_file_name

        self.document = SimpleDocTemplate(self.response, topMargin=5, leftMargin=2, rightMargin=1, bottomMargin=1)
        self.document.pagesize = portrait(A4)

        return

    def add_header(self, header_text):
        p = Paragraph(header_text, self.styles['Title2'])
        self.elements.append(p)

    def add(self, paragraph):
        self.elements.append(paragraph)

    def build(self):
        self.document.build(self.elements)

当我调用报告函数时,我收到错误消息:

Line instance has no attribute 'getKeepWithNext'

当我删除/注释带有Line() 的行时,不会发生错误。

你能帮帮我吗? 那行怎么写?

【问题讨论】:

    标签: python django python-2.7 reportlab django-1.5


    【解决方案1】:

    仅将Line 添加到元素列表是行不通的:您只能将Flowables 传递给SimpleDocTemplate.build()。但是你可以把它包裹在一个Drawing中,也就是一个Flowable

    d = Drawing(100, 1)
    d.add(Line(0, 0, 100, 0))
    rep.add(d)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多