Seite 1 von 1

PDF mit reportlab toolkit, Textausrichtung

Verfasst: Montag 9. März 2009, 18:17
von whaeva
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?

Verfasst: Montag 9. März 2009, 20:35
von CM
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:

Code: Alles auswählen

sin(radians(90)) == 1
cos(radians(90)) == 0
Dann geht - die richtigen Imports wirst Du kennen:

Code: Alles auswählen

textobject.setTextTransform(0, -1, 1, 0, 100, 100)
textobject.textLines("bla bla bla")
canvas.drawText(textobject)
canvas.showPage()
canvas.save()
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

Verfasst: Dienstag 10. März 2009, 10:18
von whaeva
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.

Code: Alles auswählen

- eins

  eins
- zwei
  drei
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

Code: Alles auswählen

canvas.stringWidth(self, text, fontName, fontSize, encoding=None)
(nicht getestet, was sie macht).

PS:
Die andere Möglichkeit ist die Verwendung von Tabellen, dort gibt es wohl eine VALIGN Option.

Verfasst: Dienstag 10. März 2009, 11:01
von CM
Ach so, dann habe ich Dich völlig falsch verstanden. Tut mir leid. Aber Du hast ja Lösungen gefunden.

Gruß,
Christian