Reportlab canvas.DrawImage无法调整图片大小问题求助
在ReportLab Canvas中重复显示缩小后的Logo
我希望在canvas中添加一个logo,使其在报表的每一页重复显示,但问题是该PNG图片尺寸过大。我尝试在canvas.DrawImage命令内调整其大小,但每次图片都以原始尺寸显示。
以下是我尝试的代码,但没有效果:
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 ] )
希望能得到帮助——我不想编写大量独立于reportlab命令的代码来调整图片大小。
解决方案
问题出在你使用了_restrictSize这个私有方法,它不会直接作用于图片的绘制尺寸。ReportLab的canvas.drawImage本身就支持直接指定目标宽度和高度,无需额外调用其他方法。
修改你的on_page函数,直接在drawImage中传入width和height参数即可实现缩放:
def on_page(canvas, doc, pagesize=A4): page_num = canvas.getPageNumber() # 直接指定缩放后的宽高 canvas.drawImage('/opt/rspro/home/e8409/projects/CRAMM logo.png', 0, 0, width=1*inch, height=2*inch) canvas.showPage()
如果需要保持图片的宽高比,可以只传入其中一个维度,ReportLab会自动计算对应的另一个维度:
# 保持宽高比,仅设置宽度 canvas.drawImage('/opt/rspro/home/e8409/projects/CRAMM logo.png', 0, 0, width=1*inch)
另外需要注意,_restrictSize是ReportLab内部的私有方法,不建议在业务代码中使用,后续版本可能会发生变更。
内容的提问来源于stack exchange,提问作者vashts85




