5

ReportLab的图像在 PDF 画布上镜像出来,代码片段如下:

from reportlab.pdfgen import canvas
from reportlab.platypus import Image

pdf = canvas.Canvas(filename, bottomup=0)

logo_image = Image(
    "%s/images/wsp_logo.jpg" % settings.STATIC_ROOT,
    width=200,
    height=200) 
logo_image.drawOn(pdf, 100, 100)

如何让它“正常”绘制,就像人们期望看到的那样?

4

4 回答 4

5

使用 canvas.scale 函数翻转图像。

canvas.saveState()
canvas.translate(x, y)
canvas.scale(1,-1)
canvas.drawImage(img_path, 0, 0, width=-width, height=-height, mask='auto')
canvas.restoreState()
于 2012-08-03T06:44:30.390 回答
3

我目前无法测试,但这可能是因为bottomup = 0您创建了Canvas对象。默认值为1. 从文档中:

自底向上参数切换坐标系。一些图形系统(如 PDF 和 PostScript)将 (0,0) 放置在页面的左下角,其他图形系统(如许多图形用户界面 [GUI])将原点放置在左上角。自下而上参数已被弃用,将来可能会被删除

需要看看它是否真的适用于所有任务,如果不是,则摆脱它

鉴于该引用中的警告,我的猜测是将其设置为0问题的根源。

于 2011-05-27T11:01:14.413 回答
0

以左下角的原点(0,0)绘制图片。

canvas.saveState()
canvas.transform(1, 0, 0, -1, 0, H)
draw_your_picture_code()
canvas.restoreState()

H是页面的高度。

于 2016-10-19T06:22:26.983 回答
0

所以我遇到了同样的问题,我发现为了改变图像而不得不改变画布属性是很野蛮的。就我而言,我是从 url 导入图像:

img = ImageReader(url)

ImageReader 类有一个属性_image,它是一个 PIL 类(例如<PIL.PngImagePlugin.PngImageFile>:)

我可以这样翻转它:

    import PIL
    from reportlab.lib.utils import ImageReader

    img = ImageReader(url)
    img._image = img._image.transpose(PIL.Image.FLIP_TOP_BOTTOM)
于 2021-12-08T15:51:25.570 回答