reportlab:通过platypus添加背景图像

4 投票
1 回答
7047 浏览
提问于 2025-04-17 06:36

这跟这个帖子有点关系。

我想在背景上放一张图片,并且希望能够在上面写文字。使用canvas.drawImage可以做到,但对我来说这个方法太底层了。
我的程序使用的是platypus,但canvas.drawImage是另一个库里的东西。我已经能用platypus.Image插入图片了,但不知道怎么把它设置成背景。
如果有建议就太好了。

谢谢,D

1 个回答

12

在Platypus中创建页面模板时,你可以通过一个叫onPage的参数传递一个函数。在这个函数里,你可以设置页面的基本格式,比如页眉、页脚、水印和背景图片。

下面是一个例子:

def AllPageSetup(canvas, doc):

    canvas.saveState()

    #header
    canvas.drawString(0.5 * inch, 8 * inch, doc.fund.name)
    canvas.drawRightString(10.5 * inch, 8 * inch, doc.report_info)

    #footers
    canvas.drawString(0.5 * inch, 0.5 * inch, 'Larry Co.')
    canvas.drawRightString(10.5 * inch, 0.5 * inch, 'Page %d' % (doc.page))

    canvas.setFont("Helvetica", 240)
    canvas.setStrokeGray(0.90)
    canvas.setFillGray(0.90)
    canvas.drawCentredString(5.5 * inch, 3.25 * inch, doc.watermark)

    canvas.restoreState()

doc = BaseDocTemplate(file_name)

doc.fund = fund # stores my fund object into the document for reference
doc.report_info = "%s %s" % (fund.current_report.date.isoformat(), version)
doc.watermark = 'DRAFT'

page_template = PageTemplate(id="fund_notes", onPage=AllPageSetup, pagesize=page_size)

#Now, every page will have headers, footers, and a watermark

撰写回答