编程语言
首页 > 编程语言> > Python reportlab table 设置cellstyle枚举,设置单元格padding

Python reportlab table 设置cellstyle枚举,设置单元格padding

作者:互联网

可以设置cellsyle 的选项:


def _setCellStyle(cellStyles, i, j, op, values):
    #new = CellStyle('<%d, %d>' % (i,j), cellStyles[i][j])
    #cellStyles[i][j] = new
    ## modify in place!!!
    new = cellStyles[i][j]
    if op == 'FONT':
        n = len(values)
        new.fontname = values[0]
        if n>1:
            new.fontsize = values[1]
            if n>2:
                new.leading = values[2]
            else:
                new.leading = new.fontsize*1.2
    elif op in ('FONTNAME', 'FACE'):
        new.fontname = values[0]
    elif op in ('SIZE', 'FONTSIZE'):
        new.fontsize = values[0]
    elif op == 'LEADING':
        new.leading = values[0]
    elif op == 'TEXTCOLOR':
        new.color = colors.toColor(values[0], colors.Color(0,0,0))
    elif op in ('ALIGN', 'ALIGNMENT'):
        new.alignment = values[0]
    elif op == 'VALIGN':
        new.valign = values[0]
    elif op == 'LEFTPADDING':
        new.leftPadding = values[0]
    elif op == 'RIGHTPADDING':
        new.rightPadding = values[0]
    elif op == 'TOPPADDING':
        new.topPadding = values[0]
    elif op == 'BOTTOMPADDING':
        new.bottomPadding = values[0]
    elif op == 'HREF':
        new.href = values[0]
    elif op == 'DESTINATION':
        new.destination = values[0]

设置方式:

    @classmethod
    def xxx(cls, internal_obj):
        move_lines_list = cls.get_move_lines_list(internal_obj)

        pdfmetrics.registerFont(TTFont('SimSun', cls.SIMSUN_PATH))  # 注册字体
        pdfmetrics.registerFont(TTFont('msyh', cls.MSYH_PATH))  # 注册字体
        stylesheet = getSampleStyleSheet()
        # stylesheet.add(ParagraphStyle(fontName='msyh', name='Hei', leading=2, fontSize=8, alignment=1))
        # stylesheet.add(ParagraphStyle(fontName='msyh', name='Hei2', leading=1, fontSize=8, alignment=0))
        # stylesheet.add(ParagraphStyle(fontName='msyh', name='Hei3', leading=1, fontSize=8, alignment=0))
        stylesheet.add(ParagraphStyle(fontName='msyh', name='Hei',alignment=2, fontSize=7,leading=0,rightIndent=0)) # RIGHT
        stylesheet.add(ParagraphStyle(fontName='msyh', name='Hei1',alignment=1, fontSize=8,leading=0)) # CENTER
        stylesheet.add(ParagraphStyle(fontName='msyh', name='Hei0',alignment=0, fontSize=7,leading=0)) # LEFT
        cellstyle = CellStyle(name='nopadding')
        cellstyle.rightPadding=0
        elements = []
        for _data in move_lines_list:
            num = _data.get("num", 0)
            code = _data.get("barcode")
            for i in range(num):
                code_obj = code128.Code128('{}\x0d'.format(code), barHeight=7 * mm, barWidth=0.99)
                data = [
                    [code_obj],
                    # [],
                    [Paragraph(code, stylesheet['Hei1'])],
                    [Paragraph('NEW', stylesheet['Hei0']), Paragraph('MADE IN CHINA', stylesheet['Hei'])],
                ]
                t = Table(data, colWidths=[21.5 * mm],rowHeights=[9 * mm, 5 * mm, 5 * mm])


                t.setStyle([
                    ('VALIGN', (0, 0), (-1, -1), 'TOP'),
                    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
                    ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),  # 设置表格框线为grey色,线宽为0.5
                    ('SPAN', (0, 0), (1, 0)),
                    ('SPAN', (0, 1), (1, 1)),
                    ('RIGHTPADDING', (0, 0), (-1, -1), 0),
                    ('LEFTPADDING', (0, 0), (-1, -1), 0),
                    # ('VALIGN', (0, 0), (-1, -1), 'TOP'),
                    # ('ALIGN', (0, 2), (1, 2), 'LEFT'),
                ])

                elements.append(t)
                elements.append(PageBreak())
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'filename="poland_label.pdf"'
        # label = SimpleDocTemplate(response, pagesize=(cls.PAGE_WIDTH_S, cls.PAGE_HEIGHT_S), rightMargin=0,
        #                           leftMargin=0,
        #                           topMargin=2, bottomMargin=0)
        label = SimpleDocTemplate('test.pdf', pagesize=(cls.PAGE_WIDTH_S, cls.PAGE_HEIGHT_S), rightMargin=0,
                                  leftMargin=0,
                                  topMargin=2, bottomMargin=0)
        label.build(elements)
        # return response

标签:reportlab,Python,leading,elif,stylesheet,values,设置,new,op
来源: https://www.cnblogs.com/qianxunman/p/14236566.html