如何围绕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
相关产品推荐
相关产品推荐

