reportlab schnörkelige Ränder

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
heiliga horsd

Hallo,

ich habe eine kleine Frage zu reportlab, und zwar:

Ist es möglich, Ränder zu erstellen, die mehr sind als nur ein einfacher strich (sprich, ein wenig schnörkelig, ein dickerer Strich umgeben von zei dünneren würde auch schon reichen) und um die ganze Seite gehen?

Ein kleines Beispiel:
http://s1.bild.me/bilder/030611/9281582margin.png
(der innere Rand muss nicht sein)


Lg hh
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Vielleicht verstehe ich dein Problem nicht richtig, aber du kannst doch so viele Rechtecke auf dem Canvas malen, wie du willst? Erst ein äusseres mit einer dünnen Stärke, dann ein inneres mit einer dickeren Stärke, und dann wiederum eins mit einer dünneren Stärke. So kannst du doch problemlos dein Grafikbeispiel nachzeichnen?!
heiliga horsd

Code: Alles auswählen

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image


doc = SimpleDocTemplate("Urkunde.pdf",pagesize=A4,
                        rightMargin=1.5*cm,leftMargin=1.5*cm,
                        topMargin=0.5*cm,bottomMargin=1.5*cm)
content = []
styles=getSampleStyleSheet()
logo = 'logo.png'
im = Image(logo, 3*cm, 3*cm)
content.append(im)
content.append(Spacer(1, 12))
ptext = "Test Test Einszwei Einszwei"
content.append(Paragraph(ptext, styles["Normal"]))
content.append(Spacer(1, 12))
Bild = '1.jpg'
bi = Image(Bild, 12*1.5*cm, 12*cm)
content.append(bi)
doc.build(content)
Das ist mein Code, ich habe nur keine Ahnung wie ich mein Canvas mit dem Rahmen da rein bringe und richtig auf die Maße skaliere bzw. wie ich es überhaupt da drin erstelle, immerhin wird ein PDF gemacht und ich habe nichteinmal ein Canvas-Objekt erstellt, also muss das erstellen des Canvas ja irgendwie im Hintergrund ablaufen? Kannst du oder irgendwer anders mir genauer erläutern wie ich jetzt meine Striche da möglichst elegant rein bringe?


Lg HH

P.S.: Ja, ich weiß, die Variablennamen sind blöd aber das ist bloß mein kleines Testscript um ein meinen Vorstellungen entsprechendes PDF-Dokument zu bauen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst Platypus und Canvas Operation mischen. Wenn du also Rechtecke auf die komplette Seiten malen willst, dann definierst du dafür eine kleine Funktion:

Code: Alles auswählen

def mein_canvas_rechteck(canvas,doc):
    canvas.saveState()
    #Code für die Rechtecke hier
    ...
    canvas.restoreState()
Dann erweiterst du

Code: Alles auswählen

doc = SimpleTemplate(...)
noch um

Code: Alles auswählen

..., onPage = mein_canvas_rechteck
.

Jetzt sollte es funktionieren.

Gruß, noisefloor
heiliga horsd

Hat super funktioniert, vielen Dank!
Thema ist erledigt!
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das findet man übrigens auch in der offiziellen Doku. Dort wird auf diese Art und Weise eine Kopf- / Fusszeile pro Seite generiert. Dort findet man auch noch weiter Möglichkeiten wie onFirstPage, onLastPage (oder so ähnlich) etc.

Gruß, noisefloor
Antworten