从Django视图发送数据时,如何包装ReportLab表数据?

问题描述

我一直在尝试包装单元格字符串,表格变得太宽且超出屏幕。

我知道使用段落会自动换行,但是问题是我要从多个视图发送数据,因此表的宽度和列数会有所不同。我遇到类似“列表”对象没有属性“ split”,“元组”对象没有属性“ split”甚至“段落”对象不可迭代的错误

class ComprasPDF(View):
    def get(self,request,*args,**kwargs):
        arr= [(
             o.unidad_inventario.control_stock.almacen,o.unidad_inventario.control_stock.producto,o.proveedor,o.cantidad,o.costo_unidad,) 
             for o in CompraProducto.objects.all()]
        data = {
            'nombre':'COMPRAS','headings':('ALMACEN','PRODUCTO','PROVEEDOR','CANTIDAD','COSTO POR UNIDAD'),'query': arr
        }
            pdf = generar_pdf(request,data)
            return HttpResponse(pdf,content_type='application/pdf')

像这样在ReportLab上使用它。如您所见,我使用的是我直接发送的数据,而且我不知道如何将段落样式应用于查询数据。

buff = BytesIO()
doc = SimpleDocTemplate(buff,pagesize=A4)
story = []

headings = data['headings']
alldata = data['query']
t = Table([headings] + alldata*10)
t.setStyle(TableStyle(
    [
        ('GRID',(0,0),(-1,-1),1,colors.black),('BACKGROUND',colors.gray)
    ]
))

story = [Spacer(0,25),t]

doc.build(story,onFirstPage=primera_pagina,onLaterPages=add_numero,)

该表看起来像this。甚至没有分配colWidths使它们自动换行,它们只是重叠。

我需要将数据包装成多行,以便表格适合页面

编辑:

我找到了一种将数据放入段落的方法。这不完全是我想要的方式,但总比没有好。

def compras_pdf(data):
    headings = data['headings']
    tdata = []
    tdata.append(headings)
    for o in data['query']:
        talmacen = Paragraph(o.unidad_inventario.control_stock.almacen.nombre,styleN)
        tproducto = Paragraph(o.unidad_inventario.control_stock.producto.descripcion)
        if o.unidad_inventario.lote_produccion:
            tcodigo = Paragraph(o.unidad_inventario.lote_produccion.codigo)
        else:
            tcodigo = '-'
        tproveedor = Paragraph(o.proveedor.__str__())
        tcantidad = Paragraph(str(o.cantidad))
        tcosto = Paragraph(str(o.costo_unidad))
        tfecha = Paragraph(o.fecha_creacion.strftime('%d/%m/%Y %X'))
        tdata.append([talmacen,tproducto,tcodigo,tproveedor,tcantidad,tcosto,tfecha])

    t = Table(tdata,colWidths=(1.9*inch,1.2*inch,0.7*inch,1.5*inch,0.9*inch,0.8*inch,1*inch))
    return t

为每个视图创建自定义功能This is the result.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)