我在 django 视图中使用 reportlab 编写 pdf,它们非常简单,包括页眉、内容和页脚。
我正在使用 SimpleDocTemplate 非常适合,在内容中绘制表格,页脚和页眉是 drwan 使用:
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 导入 Table、Flowable、SimpleDocTemplate、Paragraph、Spacer、Image 从 reportlab.lib 导入随机文本 从reportlab导入鸭嘴兽 导入操作系统,随机 样式 = getSampleStyleSheet() 路径 = os.path.realpath(os.path.dirname(__file__)) def drawPageFrame(画布,文档): canvas.saveState() canvas.drawImage(path+"/ujiPDF.jpg",50,50,57,57) canvas.restoreState() doc = SimpleDocTemplate("salida.pdf",pagesize=A4) 元素 = [] com = 'canvas.drawImage("'+path+'/ujiPDF.jpg",100,100,57,57)' 印刷公司 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 = Paragraph(randomtext.randomText(randomtext.PYTHON,20),样式["Normal"]) elementos.append(para) doc.build(elementos,onFirstPage=drawPageFrame, onLaterPages=drawPageFrame)
这是宏方法...干净退出但没有第二张图像。