如何使用simpledoctemplate reportlab包将图像移动到PDF格式的页面顶部?

时间:2015-07-06 08:51:59

标签: python pdf reportlab

//这使用simpledoctemplate来创建pdf。我无法将图像置于页面顶部。请给出解决方案

def report_creator():
    styles = getSampleStyleSheet()
    styleN = styles['Normal']
    styleH = styles['Heading1']
    elements = []
    im = Image("C:\\Images\photo.jpg")
    elements.append(im)
    doc = SimpleDocTemplate("C:\\report_image.pdf", pagesize=letter)
    doc.build(elements)
if __name__ == "__main__":
    report_creator()
    print "main"

2 个答案:

答案 0 :(得分:1)

从源代码中,在绘制时,图片尝试获取_offs_x_offs_y属性

def draw(self):
    lazy = self._lazy
    if lazy>=2: self._lazy = 1
    self.canv.drawImage(    self._img or self.filename,
                            getattr(self,'_offs_x',0),
                            getattr(self,'_offs_y',0),
                            self.drawWidth,
                            self.drawHeight,
                            mask=self._mask,
                            )
    if lazy>=2:
        self._img = self._file = None
        self._lazy = lazy

要使用SimpleDocTemplate定位图像,您可以在将其添加到故事中之前覆盖Image对象的_offs_x_offs_y属性。

im.__setattr__("_offs_x", 0)
im.__setattr__("_offs_y", 0)

答案 1 :(得分:0)

reportlab's字母页面尺寸的宽度和高度为(612.0, 792.0)。 因此,您可以通过划分((page's width/2) - (input image's width/2))来获取输入图像的起始位置。

在这个例子中

page's width = 612.0

input image width = 100

因此输入图像的起始位置(x)将为:

>>> int((612.0/2) - (100/2))
256

注意: - 图像大小在drawInlineImage的{​​{1}}方法中作为参数传递。

Canvas

生成的PDF看起来像这样:

report_image.pdf