Seite 1 von 1
reportlab paragraph makeup
Verfasst: Donnerstag 12. November 2009, 13:44
von mathi
Hallo,
ich bin beim generieren einer pdf auf ein problem gestoßen:
ich möchte hochgestellte und tiefgestellte Zeichen in einen Text einfügen laut UserGuide gibt es dafür <super> und <sub>
Ich habe aber keine Ahnung wie ich Text in solchen Tags einfügen muß...
ich generiere Text mit
Code: Alles auswählen
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
c = canvas.Canvas("tmp.pdf")
c.drawString(3*cm, 26*cm, 'Hello World!')
c.showPage()
c.save()
Verfasst: Donnerstag 12. November 2009, 15:07
von Leonidas
Ich nehme an du hast
schon probiert, oder?
Verfasst: Donnerstag 12. November 2009, 16:11
von b.esser-wisser
...und es heißt "ma
rkup", nicht "makeup" - ein winziger Unterschied
scnr, Jörg
Verfasst: Donnerstag 12. November 2009, 16:15
von Hyperion
b.esser-wisser hat geschrieben:...und es heißt "ma
rkup", nicht "makeup" - ein winziger Unterschied
scnr, Jörg
Ein Stylesheet wie CSS wäre dann also makeup fürs markup

Verfasst: Donnerstag 12. November 2009, 16:31
von mathi
@Leonidas.
natürlich, im prinzip muß es schon so heißen. ich weiß nur nicht wie ich es einbetten kann
so funktioniert es jedenfalls nicht:
Code: Alles auswählen
c.drawString(3*cm, 26*cm, 'Hello <sub>unten</sub> World!')
Verfasst: Donnerstag 12. November 2009, 16:46
von BlackJack
Ich würde mal darauf tippen, dass der Betreff nicht umsonst "*paragraph* markup" heisst. Es gibt ja Absätze als Objekte in `reportlab` und *die* verstehen auch das Markup.
Verfasst: Donnerstag 12. November 2009, 18:30
von Nocta
b.esser-wisser hat geschrieben:...und es heißt "ma
rkup", nicht "makeup" - ein winziger Unterschied
Wobei etwas Makeup für so manchen Code durchaus praktisch wär

Verfasst: Donnerstag 12. November 2009, 19:27
von b.esser-wisser
Und damit ich meinem Namen nicht zuviel Ehre mache, habe dann doch noch ins Reportlab-manual geschaut, direkt nach "String drawing methods" (Bis wohin der TO anscheinend noch gekommen ist), kommt dieses:
Die Reportlab Dokumentation hat geschrieben:The text object methods
textobject = canvas.beginText(x, y)
canvas.drawText(textobject)
Text objects are used to format text in ways that are not supported directly by the canvas interface. A
program creates a text object from the canvas using beginText and then formats text by invoking
textobject methods. Finally the textobject is drawn onto the canvas using drawText.
D.h. alles, was mit Strings nicht geht, wird mit diesen Text-objekten gemacht.
hth, Jörg
Verfasst: Freitag 13. November 2009, 10:20
von mathi
ich habe nach langem Suchen nur folgende Lösung gefunden:
Code: Alles auswählen
stylesheet=getSampleStyleSheet()
style=stylesheet["Normal"]
E=Paragraph(('Text M<sub>Ed</sub> ') ,style)
E.wrapOn(c,10*cm,1*cm)
E.drawOn(c,4*cm,20.3*cm)
nur das für jede Zeile zu machen ist sicher nicht der beste Weg, oder????
Ich habe den Userguide schon durchgearbeitet.....
Verfasst: Freitag 13. November 2009, 13:30
von Dav1d
Jede Zeile in ne Liste und dann in ner for-schleife die Zeilen einfügen
Verfasst: Freitag 13. November 2009, 19:08
von mathi
ich habs jetzt über eine funktion gelöst:
Code: Alles auswählen
def _draw(x,y,text,style,c):
E=Paragraph(text ,style)
E.wrapOn(c,10*cm,1*cm)
E.drawOn(c,x*cm,y*cm)
_draw(4,15,'Text M<sub>Ed</sub> ' ,style,c)