ReportLab:如何对齐文本对象?

发布于 2024-10-17 03:49:50 字数 340 浏览 1 评论 0 原文

我有以下 ReportLab 代码:

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

我想要实现的是:每个字符之间有 3 个(像素?)间距 (setCharSpace),并将生成的字符串对齐在特定区域的中心 。

据我所知,textobject 是唯一可以指定字符之间空格的方法

有什么想法吗?

I have the following ReportLab code:

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

What I want to achieve is: have a 3 (pixels?) space between each character (setCharSpace), and align the resulting string in the center of a certain area in the page

The textobject is the only way, as far as I found, that I can specify a space between characters.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

牵强ㄟ 2024-10-24 03:49:50

基本上你只需要计算字符串的宽度,你想要将其居中的区域的宽度,然后你就完成了。

使用 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 (代码并不美观,但它有效) 。

Basically you only have to calculate the width of the string, the width of the area where you want to center it, and you're done.

Use Canvas.stringWidth to determine the width a given string (with a font and size) occupies. It doesn't take char spacing into account, but I did some tests that suggests one can fix that.

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

All it does is using the original stringWidth to calculate the width of the string, and add the additional spaces between the characters. Now I'm not experienced with typography, so I'm not sure if font features like kerning may render this unusable.

If you adjust your x origin like this, your string will be centered.

(area_width - string_width) / 2

Small test script I used http://pastebin.com/PQxzi1Kf (code is not a beauty, but it works).

动次打次papapa 2024-10-24 03:49:50

Reportlab 有一个方法,drawCentredString(以英式拼写为中心)。这将使您的文本沿着给定的 x 坐标居中。

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

Reportlab has a method, drawCentredString (centred for British spelling). This will center your text along the given x coordinate.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文