如何使用Report Lab的canvas drawImage()插入图像?

2 投票
1 回答
8957 浏览
提问于 2025-04-17 15:58

我想扩展一个工具的功能,这个工具目前只用 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"
},

撰写回答