You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何围绕reportlab.graphics.shapes.Drawing中心旋转图形?

无法围绕中心旋转ReportLab Drawing对象

我从SVG转换得到的Drawing对象无法围绕中心旋转,该对象参数如下:
drawing.getBounds()=(14.173228346456694, 14.173228346456654, 581.1023622047245, 581.1023622047245), drawing.width=595.2755905511812, drawing.height=595.2755905511812, drawing.transform=(1, 0, 0, 1, 0, 0), drawing.hAlign='LEFT', drawing.vAlign='BOTTOM'

我需要将多个此类Drawing按行列排列并旋转,代码实现如下:

r = i // col
c_idx = i % col
x = c_idx * cell_w + padding
y = page_height - ((r + 1) * cell_h) + padding

drawing = svg2rlg(svg_path)
if drawing is None:
     raise ValueError("Could not convert SVG to drawing object.")
# Scale to fit within cell
print(f"{drawing.getBounds()=}, {drawing.width=}, {drawing.height=}, {drawing.transform=}, {drawing.hAlign=}, {drawing.vAlign=}")
if rotate_x_y[0] > 0:
    drawing.rotate(rotate_x_y[0], rotate_x_y[1]*drawing.width, rotate_x_y[2]*drawing.height)

max_w = cell_w - 2 * padding
max_h = cell_h - 2 * padding
scale_x = max_w / drawing.width
scale_y = max_h / drawing.height
scale = min(scale_x, scale_y)
drawing.width *= scale
drawing.height *= scale
drawing.scale(scale, scale)
# Center in cell
dx = x + (max_w - drawing.width) / 2
dy = y + (max_h - drawing.height) / 2
renderPDF.draw(drawing, c, dx, dy)

但drawing.rotate()无法正常工作:调用drawing.rotate(90)等同于drawing.rotate(90, 0, 0),无论尝试以width/2、height/2为旋转中心传入何种参数,都得到异常结果。

效果展示

  • 原始PDF效果:未旋转的图形正常排列在单元格内
  • 旋转后效果:
    • 90度绕(0,0)旋转:图形偏移至单元格外
    • 90度绕(0, h/2)旋转:图形位置异常偏移
    • 90度绕(w/2, 0)旋转:图形位置异常偏移
    • 90度绕(w/2, h/2)旋转:图形位置仍异常偏移

内容的提问来源于stack exchange,提问作者Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:23:13