如何使用Report Lab的canvas drawImage()插入图像?
我想扩展一个工具的功能,这个工具目前只用 report lab 的 pdfgen 来绘制字符串,代码是这样的:
if json_data[definition["field"]] != "":
c.drawString(
definition["x"] * cm,
definition["y"] * cm,
json_data[definition["field"]]
)
还有这个 json:
{
"field":"name",
"x":1.8,
"y":10
},
为了绘制图片而不是字符串,我做了以下修改:
if json_data[definition["field"]] != "":
if definition.has_key("image"):
c.drawImage(
os.path.join(os.getcwd(), "images", "successIcon.gif"),
definition["x"] * cm,
definition["y"] * cm,
width=16, height=16,
)
else:
c.drawString(
definition["x"] * cm,
definition["y"] * cm,
json_data[definition["field"]]
)
同时更新了 json 为:
{
"field":"name",
"x":1.8,
"y":10,
"image":"name"
},
我调用 drawImage
的时候是不是有什么问题?根据文档看起来是对的,但我发现它没有进入 drawImage
,我尝试记录传给这个函数的参数,但什么都没有得到。
1 个回答
4
我之前用的 drawImage
方法没有问题,下面的代码现在也能正常使用;
# If we have an image attribute
if definition.has_key("image"):
if str(json_data[definition["field"]]) == 'True':
# need to replace this with url on attribute
filename = os.path.join(
os.getcwd(),
"static",
"images",
definition["image"]
)
c.drawImage(filename, definition["x"] * cm, definition["y"] * cm, 10, -10)
还有对应的 json 文件,用来指定图片的文件名;
{
"field":"name",
"x":1.66,
"y":19.45,
"image":"image.jpg"
},