用画布绘制图像并使用SimpleDocTemplate
问题内容:
我正在django视图中使用reportlab编写pdf,它们非常简单,包括页眉,内容和页脚。
我正在使用非常适合的SimpleDocTemplate,在内容中绘制表格,页脚和页眉使用以下方法:
build([data], onFirstPage=drawPageFrame, onLaterPages=drawPageFrame).
我的问题是,如何像使用Canvas.drawImage(…)一样绘制图像?我需要一个“浮动”图像…放在我想要的文本上,并且使用SimpleDocTemplate我没有Canvas对象来执行此操作。
搜索我发现了这一点:
鸭嘴兽布局的东西使用flowables。打包程序通常在包装,拆分或绘制可流动对象时将属性canv设置到每个可流动对象,即围绕wrap,split和draw方法。在这些方法中,您可以使用self的canv属性访问画布。
如何使用?
嗯,还有更多要测试的东西:
flowables.Macro
flowables.CallerMacro
#-*-编码:utf-8-*-
从reportlab.lib.pagesizes导入A4,横向,纵向
从reportlab.lib.styles导入getSampleStyleSheet
从reportlab.platypus导入表,Flowable,SimpleDocTemplate,段落,间隔符,图像
从reportlab.lib导入randomtext
从reportlab导入鸭嘴兽
导入操作系统,随机
样式= getSampleStyleSheet()
路径= os.path.realpath(os.path.dirname(__ file__))
def drawPageFrame(canvas,doc):
canvas.saveState()
canvas.drawImage(path +“ / ujiPDF.jpg”,50,50,57,57)
canvas.restoreState()
doc = SimpleDocTemplate(“ salida.pdf”,pagesize = A4)
elementos = []
com ='canvas.drawImage(“'+ path +'/ ujiPDF.jpg”,100,100,57,57)'
打印COM
elementos.append(platypus.flowables.Macro('canvas.saveState()'))
打印platypus.flowables.Macro(com)
elementos.append(platypus.flowables.Macro(com))
elementos.append(platypus.flowables.Macro('canvas.restoreState()'))
para =段落(randomtext.randomText(randomtext.PYTHON,20),styles [“ Normal”])
elementos.append(para)
doc.build(elementos,onFirstPage = drawPageFrame,onLaterPages = drawPageFrame)
这是宏方法…干净的出口,但没有第二个图像。
问题答案:
最好的选择是创建SimpleDocTemplate或BaseDocTemplate的子类。在构建方法中,您将有权访问画布。如果您想利用SimpleDocTemplate所做的一切,则可以尝试直接从中复制它site- packages/reportlab/platypus/doctemplate.py
。