reportlab paragraph makeup

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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()
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich nehme an du hast

Code: Alles auswählen

<sub>mu</sub>C<super>3</super>
schon probiert, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

...und es heißt "markup", nicht "makeup" - ein winziger Unterschied :lol:

scnr, Jörg
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

b.esser-wisser hat geschrieben:...und es heißt "markup", nicht "makeup" - ein winziger Unterschied :lol:

scnr, Jörg
Ein Stylesheet wie CSS wäre dann also makeup fürs markup :-D
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

@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!')
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.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

b.esser-wisser hat geschrieben:...und es heißt "markup", nicht "makeup" - ein winziger Unterschied :lol:
Wobei etwas Makeup für so manchen Code durchaus praktisch wär ;)
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

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
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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.....
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Jede Zeile in ne Liste und dann in ner for-schleife die Zeilen einfügen
the more they change the more they stay the same
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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) 
Antworten