19

私は次のReportLabコードを持っています:

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

私が達成したいのは、各文字(setCharSpace)の間に3(ピクセル?)のスペースを置き、結果の文字列をページの特定の領域の中央に揃えることです。

私が見つけた限りでは、テキストオブジェクトは文字間のスペースを指定できる唯一の方法です。

何か案は?

4

3 に答える 3

18

基本的には、文字列の幅、文字列を中央に配置する領域の幅を計算するだけで済みます。

Canvas.stringWidthを使用して、特定の文字列(フォントとサイズを含む)が占める幅を決定します。文字間隔は考慮されていませんが、修正できることを示唆するいくつかのテストを行いました。

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

オリジナルstringWidthを使用して文字列の幅を計算し、文字の間にスペースを追加するだけです。今はタイポグラフィの経験がないので、カーニングなどのフォント機能がこれを使用できなくする可能性があるかどうかはわかりません。

このようにx原点を調整すると、弦が中央に配置されます。

(area_width - string_width) / 2

http://pastebin.com/PQxzi1Kfを使用した小さなテストスクリプト(コードは美しさではありませんが、機能します)。

于 2011-02-11T18:13:30.233 に答える
3

ReportlabにはメソッドがありますdrawCentredString(英国式スペルを中心にしています)。これにより、指定されたx座標に沿ってテキストが中央に配置されます。

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

于 2015-08-09T18:50:36.553 に答える
-1

試してみてください:差出人:http <para alignment="center">//two.pairlist.net/pipermail/reportlab-users/2006-June/005092.html

于 2017-05-21T19:23:50.070 に答える