Seite 1 von 1

reportlab schnörkelige Ränder

Verfasst: Montag 18. Juli 2011, 20:27
von 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

Re: reportlab schnörkelige Ränder

Verfasst: Dienstag 19. Juli 2011, 07:30
von frabron
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?!

Re: reportlab schnörkelige Ränder

Verfasst: Dienstag 19. Juli 2011, 20:50
von 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.

Re: reportlab schnörkelige Ränder

Verfasst: Mittwoch 20. Juli 2011, 20:37
von noisefloor
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

Re: reportlab schnörkelige Ränder

Verfasst: Donnerstag 21. Juli 2011, 19:58
von heiliga horsd
Hat super funktioniert, vielen Dank!
Thema ist erledigt!

Re: reportlab schnörkelige Ränder

Verfasst: Samstag 23. Juli 2011, 19:01
von noisefloor
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