jha*_*fen 8 python pdf-generation reportlab
我正在使用ReportLab使用python动态生成pdf.
我想在页面上居中一行文字.这是我目前的具体代码,但不知道如何水平居中文本.
header = p.beginText(190, 740)
header.textOut("Title of Page Here")
# I know i can use TextLine etc in place of textOut
p.drawText(header)
Run Code Online (Sandbox Code Playgroud)
文本显示,我可以手动移动左侧位置,使文本看起来居中,但我需要以编程方式居中,因为文本将是动态的,我不知道将有多少文本.
Jim*_*som 13
reportlab画布有一个drawCentredString方法.是的,他们就这样拼写.
我们是英国人,该死的,并为我们的拼写感到自豪!
编辑:至于文本对象,我恐怕你没有.不过,你可以沿着这些方向做点什么:
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.rl_config import defaultPageSize
PAGE_WIDTH = defaultPageSize[0]
PAGE_HEIGHT = defaultPageSize[1]
text = "foobar foobar foobar"
text_width = stringWidth(text)
y = 1050 # wherever you want your text to appear
pdf_text_object = canvas.beginText((PAGE_WIDTH - text_width) / 2.0, y)
pdf_text_object.textOut(text) # or: pdf_text_object.textLine(text) etc.
Run Code Online (Sandbox Code Playgroud)
显然,您可以使用其他页面大小.
我也只需要这个,写下这个:
def createTextObject(canv, x, y, text, style, centered=False):
font = (style.fontName, style.fontSize, style.leading)
lines = text.split("\n")
offsets = []
if centered:
maxwidth = 0
for line in lines:
offsets.append(canv.stringWidth(line, *font[:2]))
maxwidth = max(*offsets)
offsets = [(maxwidth - i)/2 for i in offsets]
else:
offsets = [0] * len(lines)
tx = canv.beginText(x, y)
tx.setFont(*font)
for offset, line in zip(offsets, lines):
tx.setXPos(offset)
tx.textLine(line)
tx.setXPos(-offset)
return tx
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14040 次 |
| 最近记录: |