Dibuje imágenes con lienzo y use SimpleDocTemplate

Estoy escribiendo archivos PDF con reportlab dentro de una vista de django, son muy simples, el encabezado, el contenido y el pie de página.

Estoy usando SimpleDocTemplate que encaja muy bien, para dibujar tablas en el contenido, el pie de página y el encabezado se drwan usando:

build([data], onFirstPage=drawPageFrame, onLaterPages=drawPageFrame).

Mi pregunta es, ¿cómo puedo dibujar una imagen como usar Canvas.drawImage (...)? Necesito una imagen "flotante" ... colocada sobre el texto donde quiero, y con SimpleDocTemplate no tengo un objeto Canvas para hacer esto.

Searching He encontrado esto:

El material de diseño de ornitorrinco utiliza fluidos. Los empacadores normalmente establecen el atributo canv en cada fluido cuando se está envolviendo, dividiendo o dibujando, es decir, alrededor de los métodos de envolver, dividir y dibujar. Dentro de esos métodos, tiene acceso al lienzo utilizando el atributo canv de self.

¿Cómo se puede usar esto?

Ummmm, más cosas para probar:

flowables.Macro
flowables.CallerMacro
# -*- coding: utf-8 -*-
from reportlab.lib.pagesizes import A4, landscape, portrait
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Table, Flowable, SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib import randomtext
from reportlab import platypus

import os,random

styles = getSampleStyleSheet()
path = os.path.realpath(os.path.dirname(__file__))

def drawPageFrame(canvas, doc):
    canvas.saveState()
    canvas.drawImage(path+"/ujiPDF.jpg",50,50,57,57)
    canvas.restoreState()

doc = SimpleDocTemplate("salida.pdf",pagesize=A4)

elementos = []

com = 'canvas.drawImage("'+path+'/ujiPDF.jpg",100,100,57,57)'
print com
elementos.append(platypus.flowables.Macro('canvas.saveState()'))
print platypus.flowables.Macro(com)
elementos.append(platypus.flowables.Macro(com))
elementos.append(platypus.flowables.Macro('canvas.restoreState()'))

para = Paragraph(randomtext.randomText(randomtext.PYTHON,20), styles["Normal"])
elementos.append(para)

doc.build(elementos,onFirstPage=drawPageFrame, onLaterPages=drawPageFrame)

Este es el enfoque Macro ... salida limpia pero sin la segunda imagen.

Respuestas a la pregunta(3)

Su respuesta a la pregunta