Bilder zeichnen mit canvas und verwenden SimpleDocTemplate

Schreibe ich PDF-Dokumente mit reportlab innerhalb eines django view, Sie sind sehr einfach, die Kopfzeile, Inhalt und Fußzeile.

Ich bin mit SimpleDocTemplate wich, passt sehr gut zum zeichnen von Tabellen in den Inhalt, den footer und der header sind drwan mit:

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

Meine Frage ist, Wie kann ich zeichnen Sie ein Bild, wie mit der Leinwand.drawImage(...)? Ich brauche eine "schwimmende" Bild... Position über dem text, wo ich will, und mit SimpleDocTemplate ich nicht über ein Canvas-Objekt, dies zu tun.

Suche habe ich dies gefunden:

Das Schnabeltier layout-Sachen verwendet flowables. Packer in der Regel setzen die
Attribut canv auf jeder fließfähigen, wenn es ist, eingewickelt, split oder
gezeichnet, dh um die wrap -, split-und draw-Methoden. Innerhalb dieser Methoden
Sie haben Zugriff auf den canvas-Bereich mithilfe der canv Attribut self.

Wie können diese genutzt werden?

Hmmm, mehr Sachen zu testen:

flowables.Macro
flowables.CallerMacro
# -*- coding: utf-8 -*- 
from reportlab.lib.pagesizes import-A4, Querformat, Porträt 
from reportlab.lib.Stile importieren getSampleStyleSheet 
from reportlab.platypus import-Tabelle, Fließfähigen, SimpleDocTemplate -, Absatz -, Abstands -, Bild - 
from reportlab.lib import randomtext 
von reportlab import Schnabeltier 

import os,random 

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

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

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

Elemente = [] 

com = 'Leinwand.drawImage("'+Pfad+'/ujiPDF.jpg",100,100,57,57)' 
print com 
Elemente.append(Schnabeltier.flowables.Makro('Leinwand.saveState()')) 
drucken Schnabeltier.flowables.Makro(com) 
Elemente.append(Schnabeltier.flowables.Makro - (com -)) 
Elemente.append(Schnabeltier.flowables.Makro('Leinwand.restoreState()')) 

ABS = Absatz(randomtext.randomText(randomtext.PYTHON,20), styles["Normal"]) 
Elemente.append(ABS) 

doc.Aufbau(Elemente,onFirstPage=drawPageFrame, onLaterPages=drawPageFrame) 

Dies ist der Makro-Ansatz...sauber beenden, aber ohne das zweite Bild.

InformationsquelleAutor slothy | 2011-03-18
Schreibe einen Kommentar