Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reportlab canvas.DrawImage resizing not working

I'd like to add a logo to to the canvas so that it repeats with each page of a report, but the problem is that the PNG image is quite large. I've tried resizing it inside the canvas.DrawImage command, but each time the image comes back in its original size.

Here is what I am trying, but it has no effect:

def on_page(canvas, doc, pagesize=A4):
    page_num = canvas.getPageNumber()
    image = Image('/opt/rspro/home/e8409/projects/CRAMM logo.png')
    image._restrictSize(1 * inch, 2 * inch)
    canvas.drawImage(image, 0,0)
    canvas.showPage()

from reportlab.platypus import PageTemplate

portrait_template = PageTemplate(
  id='portrait', 
  frames=portrait_frame,
  onPage=on_page, 
  pagesize=A4)


from reportlab.platypus import BaseDocTemplate

doc = BaseDocTemplate(
  'report.pdf',
  pageTemplates=[
    portrait_template
  ]
)


Appreciate any assistance -- I'd rather not have to write a bunch of separate code to resize the image separate from the reportlab command.

like image 591
vashts85 Avatar asked Dec 18 '25 15:12

vashts85


1 Answers

When using drawImage method, you need to provide width and height:

from reportlab.lib.utils import ImageReader

image_path = '/opt/rspro/home/e8409/projects/CRAMM logo.png'
img = ImageReader(image_path)
img_width, img_height = img.getSize()
canvas.drawImage(image_path, 0, 0, width=desired_width, height=desired_height, preserveAspectRatio=True)
like image 68
RCDevs Security Avatar answered Dec 21 '25 07:12

RCDevs Security



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!