Ist es möglich, mit Reportlab Toolkit (http://www.reportlab.org/rl_toolkit.html) Text innerhalb eines Bereiches automatisch vertikal auszurichten?
Horizontal ist das ja möglich (drawstring()), ein Textobject erlaubt die Steuerung des Cursors (moveCursor()) - aber eine automatische vertikale Ausrichtung?
PDF mit reportlab toolkit, Textausrichtung
Hoi,
also eine "automatisch vertikale Ausrichtung" gibt es nicht - Du mußt es reportlab schon sagen, bzw. das in einer Funktion verankern.
textobject.setTextTransform() stellt eine Möglichkeit dar. Hierbei beschreiben die ersten vier Argumente eine orthogonale 2x2 Rotationsmatrix. Zur Verdeutlichung. Es gilt:
Dann geht - die richtigen Imports wirst Du kennen:
100, 100 steht hierbei für eine willkürliche Position.
Alternativ kannst Du das canvas Objekt drehen, Text schreiben und zurückdrehen. Das ist aber im womöglich etwas langsamer. Wenn Du so etwas also häufiger durchführen willst, empfiehlt sich eine Funktion "verticaltext" oder so zu definieren, die einen String nimmt und ihn entsprechend setzt.
HTH
Christian
also eine "automatisch vertikale Ausrichtung" gibt es nicht - Du mußt es reportlab schon sagen, bzw. das in einer Funktion verankern.
textobject.setTextTransform() stellt eine Möglichkeit dar. Hierbei beschreiben die ersten vier Argumente eine orthogonale 2x2 Rotationsmatrix. Zur Verdeutlichung. Es gilt:
Code: Alles auswählen
sin(radians(90)) == 1
cos(radians(90)) == 0
Code: Alles auswählen
textobject.setTextTransform(0, -1, 1, 0, 100, 100)
textobject.textLines("bla bla bla")
canvas.drawText(textobject)
canvas.showPage()
canvas.save()
Alternativ kannst Du das canvas Objekt drehen, Text schreiben und zurückdrehen. Das ist aber im womöglich etwas langsamer. Wenn Du so etwas also häufiger durchführen willst, empfiehlt sich eine Funktion "verticaltext" oder so zu definieren, die einen String nimmt und ihn entsprechend setzt.
HTH
Christian
Hi Christian,
das ist zwar auch interessant, aber ich hatte nicht an eine Drehung gedacht, sondern an die vertikale Ausrichtung einer Zeile bezogen auf einen Bereich.
Z.B. möchte ich eine oder mehrere Zeilen vertikal mittig zentrieren, d.h.Ich probiere das gerade mit einem Versatz als Produkt aus Zeilenzahl und Schriftgröße, aber das funktioniert nicht so gut.
Man müsste die Zeilenhöhe bestimmen können. Anscheinend gibt es für die Breite die Methode (nicht getestet, was sie macht).
PS:
Die andere Möglichkeit ist die Verwendung von Tabellen, dort gibt es wohl eine VALIGN Option.
das ist zwar auch interessant, aber ich hatte nicht an eine Drehung gedacht, sondern an die vertikale Ausrichtung einer Zeile bezogen auf einen Bereich.
Z.B. möchte ich eine oder mehrere Zeilen vertikal mittig zentrieren, d.h.
Code: Alles auswählen
- eins
eins
- zwei
drei
Man müsste die Zeilenhöhe bestimmen können. Anscheinend gibt es für die Breite die Methode
Code: Alles auswählen
canvas.stringWidth(self, text, fontName, fontSize, encoding=None)
PS:
Die andere Möglichkeit ist die Verwendung von Tabellen, dort gibt es wohl eine VALIGN Option.
Ach so, dann habe ich Dich völlig falsch verstanden. Tut mir leid. Aber Du hast ja Lösungen gefunden.
Gruß,
Christian
Gruß,
Christian