ReportLab: comment aligner un textobject?

j'ai le texte suivant ReportLab code:

    t = c.beginText()
    t.setFont('Arial', 25)
    t.setCharSpace(3)
    t.setTextOrigin(159,782)
    t.textLine("Some string")
    c.drawText(t)

Ce que je veux réaliser est: 3 (pixels?) d'espace entre chaque caractère (setCharSpace), et d'aligner la chaîne résultante au centre d'une certaine zone de la page

le textobject est le seul moyen, pour autant que j'ai trouvé, que je puisse spécifier un espace entre les caractères.

des idées?

14
demandé sur Nicu Surdu 2011-02-11 18:36:55

3 réponses

Fondamentalement, vous n'avez qu'à calculer la largeur de la chaîne, la largeur de la zone où vous voulez le centre informatique, et vous avez terminé.

Utiliser Toile.stringWidth pour déterminer la largeur d'une chaîne donnée (avec une police de caractère et taille) occupe. Ça ne tient pas compte de l'espacement des caractères, mais j'ai fait des tests qui suggèrent qu'on peut arranger ça.

def stringWidth2(string, font, size, charspace):
    width = stringWidth(string, font, size)
    width += (len(string) - 1) * charspace
    return width

Tout ce qu'il fait est à l'aide de l' stringWidth pour calculer la largeur de la chaîne, et ajouter la espaces entre les personnages. Maintenant, je n'ai pas l'habitude de la typographie, donc je ne suis pas sûr que les traits de police comme kerning puissent rendre cela inutilisable.

si vous ajustez votre origine x comme ceci, votre chaîne sera centrée.

(area_width - string_width) / 2

petit script de test que j'ai utilisé http://pastebin.com/PQxzi1Kf (le code n'est pas une beauté, mais il fonctionne).

16
répondu Reiner Gerecke 2011-02-11 18:13:30

Reportlab a une méthode,drawCentredString (centré pour l'orthographe Britannique). Cela va centrer votre texte le long de la coordonnée x donnée.

http://www.reportlab.com/apis/reportlab/2.4/pdfgen.html

1
répondu strongriley 2015-08-09 18:50:36
0
répondu Santiago M. Quintero 2017-05-22 09:41:55