【问题标题】:Align text on the right side in reportlab python在reportlab python中对齐右侧的文本
【发布时间】:2021-05-18 13:26:51
【问题描述】:

我正在 python reportlab 中做报告。我想从右侧对齐一些文本。但是每一行文字的长度不同,我必须手动设置坐标。我怎样才能动态地做到这一点?

 pdf.setFont('Helvetica', 9)
    pdf.drawString(400,600,"Rechnungsdatum: "+today)
    pdf.drawString(390,590,"Leistungserbringung: "+master_data.loc[master_data['company']==company]['Leistungserbringung'][0]) #cus_specific
    pdf.drawString(343,580,"Leistungszeitraum: "+start+" - "+end)
    pdf.drawString(372,570,"Rechnungsnummer: "+master_data.loc[master_data['company']==company]['Rechnungsnummer'][0]) #cus_specific
    pdf.drawString(398,560,"Lieferantennummer: "+master_data.loc[master_data['company']==company]['Lieferantennummer'][0]) #cus_specific
    pdf.drawString(432,550,"Zahlungsziel: " +str((date.today().replace(day=1) - timedelta(days=1)).day)+ " Tage")

看起来是这样的:

[]

我希望所有线条从右侧对齐以获得美丽的景色。我正在使用 Canvas 并通过 drawString() 绘制每个字符串。任何帮助将不胜感激)

【问题讨论】:

  • 你需要得到文本的大小然后减去画布宽度
  • 我正在尝试找到获取画布宽度的方法。你能告诉我有什么功能或属性吗?

标签: python canvas reportlab


【解决方案1】:

您可以使用Canvas._pagesize[0] 获取画布宽度,Canvas 对象具有用于右对齐线条的drawRightString 方法。

from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.units import inch, mm, cm, pica
from datetime import date, timedelta

if __name__ == "__main__":
    pdf = Canvas("output.pdf")
    pdf.setFont('Helvetica', 9)

    master_data = ...
    start = ...
    end = ...
    company = ...
    today = ...

    lines = [
        "Rechnungsdatum: "+today,
        "Leistungserbringung: "+master_data.loc[master_data['company']==company]['Leistungserbringung'][0],
        "Leistungszeitraum: "+start+" - "+end,
        "Rechnungsnummer: "+master_data.loc[master_data['company']==company]['Rechnungsnummer'][0],
        "Lieferantennummer: "+master_data.loc[master_data['company']==company]['Lieferantennummer'][0],
        "Zahlungsziel: " +str((date.today().replace(day=1) - timedelta(days=1)).day)+ " Tage",
    ]
    ys = [600,590,580,570,560,550]
    width = pdf._pagesize[0]
    padding = 10 * mm
    for y, line in zip(ys, lines):
        pdf.drawRightString(width - padding, y, line)
    pdf.save()

【讨论】:

  • 太棒了!谢谢!真的很有帮助)
猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 2021-06-14
  • 2011-03-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多