【问题标题】:A simple method for rotate images in reportlab在reportlab中旋转图像的简单方法
【发布时间】:2015-04-24 13:37:15
【问题描述】:

我们如何使用 reportlab 轻松旋转图像?我找了找,没有找到简单的方法。找到的唯一方法来自http://dods.ipsl.jussieu.fr/orchidee/SANORCHIDEE/TEMP/TEMP_LOCAL/cdat_portable/lib_new_wrong_gcc/python2.4/site-packages/reportlab/test/test_graphics_images.py,例如:

>>> from reportlab.graphics.shapes import Image, Drawing
>>> from reportlab.platypus import SimpleDocTemplate
>>> from reportlab.lib.pagesizes import A4, portrait
>>> from reportlab.lib.units import mm
>>> img = Image(-202/25.4, -125/25.4, 210/25.4, 138/25.4, 'uneBelleImage.png') # (x, y [from lower left corner], width, height, path, **kw)
>>> d = Drawing(0, 0) # (width, height, *nodes, **keywords)
>>> d.add(img)
>>> d.scale(100,100) #(%width, %height)
>>> d.rotate(90)
>>> report=[]
>>> report.append(d)
>>> page = SimpleDocTemplate('toto.pdf', pagesize = portrait(A4), rightMargin=20*mm, leftMargin=20*mm, topMargin=10*mm, bottomMargin = 10*mm)
>>> page.build(report)

这行得通,但就像用大锤敲碎坚果一样? 有没有更直接的方法,例如使用经典的 reportlab.platypus.Image ? 提前致谢!

【问题讨论】:

    标签: python reportlab


    【解决方案1】:

    要修改现有的 flowable,您应该创建一个派生类并覆盖您需要更改的方法以获得所需的行为。 因此,要创建旋转图像,您需要像这样覆盖现有 Image 类的 wrap 和 draw 方法:

    from reportlab.platypus.flowables import Image
    
    class RotatedImage(Image):
    
        def wrap(self,availWidth,availHeight):
            h, w = Image.wrap(self,availHeight,availWidth)
            return w, h
        def draw(self):
            self.canv.rotate(90)
            Image.draw(self)
    
    I = RotatedImage('../images/somelogo.gif')
    

    【讨论】:

    • 谢谢,这很有趣!我在试的时候遇到了一个问题:图像完全向左切换(主要部分在工作表之外)。我认为这是由于旋转造成的?我如何在工作表上水平和/或垂直居中(I.hAlign = 'CENTER' 和 I.vAlign = 'CENTER' 似乎在这里不起作用)或更一般地说,我如何定义 x,y 为位置?
    • 不客气,是的,您可以使用 translate 方法,在绘图函数中添加 2 个参数 x 和 y,以及行:self .canv.translate(x,y)
    • 超级!这听起来很有用。我会在下周一尽快采取这个解决方案。非常感谢。
    猜你喜欢
    • 2013-04-22
    • 1970-01-01
    • 2018-10-07
    • 2014-03-13
    • 1970-01-01
    • 2011-01-16
    • 2017-03-09
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多