Reputation: 33
I am doing a report in python reportlab. And I want to align some text from the right side. But each line of text has a different length, and I have to set coordinates manually. How can I do it dynamically?
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")
That's how it looks like:
[]
I want all lines to be aligned from the right side for a beautiful view. I am using Canvas and drawing each string via drawString(). Any help will be appreciated)
Upvotes: 2
Views: 6165
Reputation: 4698
You can get canvas width using Canvas._pagesize[0]
, Canvas
object has drawRightString
method for right-aligning lines.
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()
Upvotes: 3