reportlab: добавить фоновое изображение с помощью утконоса - PullRequest
3 голосов
/ 18 ноября 2011

это немного связано с этим постом

Я пытаюсь разместить изображение на заднем плане, и я хочу иметь возможность писать поверх него текст. использование canvas.drawImage помогает, но для меня это слишком низкоуровневый подход.
Моя программа использует утконоса, но canvas.drawImage является частью другой библиотеки. Я смог вставить изображения с platypus.Image, но не смог понять, как сделать его фоновым.
Любой совет был бы великолепен,

Спасибо D

1 Ответ

9 голосов
/ 18 ноября 2011

Когда вы создаете шаблон страницы в 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
...