es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo dibujar rectángulos/formas e importarlos en una tabla PDF que fue generada usando ReportLab?

Escribí un programa sencillo en python 3.6 que genera un pdf y dibuja una tabla con diferentes contenidos en ella. El concepto se ve como se muestra en el código. ¿Cómo puedo dibujar varios rectángulos de diferentes tamaños y colores de relleno y agregarlos a una celda en esta tabla?

De:

from reportlab.platypus import SimpleDocTemplate
from reportlab.platypus import Table

data = [
[‘a’, ‘b’, ‘c’],
[‘donde quiero importar los rectángulos’, ”, ”],
[‘algunos datos’, ”, ”]
]

fileName = ‘pdfTable.pdf’

pdf = SimpleDocTemplate(
fileName,
pagesize=letter
)

table = Table(data)

elems = []
elems.append(table)
pdf.build(elems)

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para dibujar múltiples rectángulos de diferentes tamaños y colores de relleno en una celda de una tabla utilizando ReportLab, puedes usar la clase TableStyle para aplicar estilos personalizados a celdas o filas particulares. Dentro del objeto TableStyle, puedes definir una lista de tuplas donde cada tupla representa el estilo para una celda o rango de celdas específico en la tabla. Cada tupla toma dos argumentos: el rango de celdas (como una tupla) y un objeto Box que define las propiedades de estilo (por ejemplo, color de relleno, ancho de borde, etc.). El objeto Box se puede crear utilizando el método rect y pasando las coordenadas y dimensiones del rectángulo.

    Aquí tienes un ejemplo de cómo podrías modificar el código anterior para agregar múltiples rectángulos de diferentes tamaños y colores a una celda en la tabla:

    from reportlab.lib import colors
    from reportlab.lib.pagesizes import letter
    from reportlab.lib.units import inch
    from reportlab.lib.styles import ParagraphStyle
    from reportlab.lib.enums import TA_CENTER
    from reportlab.lib import styles
    from reportlab.platypus import SimpleDocTemplate
    from reportlab.platypus import Table, TableStyle
    from reportlab.pdfgen import canvas
    from reportlab.pdfbase import pdfmetrics
    from reportlab.pdfbase.ttfonts import TTFont
    
    # define custom styles for the table
    heading_style = ParagraphStyle(
        name='Heading',
        fontName='Helvetica-Bold',
        fontSize=12,
        textColor=colors.black,
        leading=14,
        alignment=TA_CENTER
    )
    
    content_style = ParagraphStyle(
        name='Content',
        fontName='Helvetica',
        fontSize=10,
        textColor=colors.black,
        leading=12,
        alignment=TA_CENTER
    )
    
    # define the table data
    data = [
        ['a', 'b', 'c'],
        ['donde quiero importar rectángulos', '', ''],
        ['algún dato', '', '']
    ]
    
    # create the PDF document
    fileName = 'pdfTabla.pdf'
    pdf = SimpleDocTemplate(fileName, pagesize=letter)
    
    # create the table object
    table = Table(data)
    
    # apply custom styling to the second cell of the second row
    cell_style = [
        (1, 1, 1, 1, styles.Box(
            fillColor=colors.red,
            strokeColor=colors.black,
            strokeWidth=1,
            width=0.5*inch,
            height=0.2*inch)),
        (1, 2, 1, 2, styles.Box(
            fillColor=colors.green,
            strokeColor=colors.black,
            strokeWidth=1,
            width=0.8*inch,
            height=0.4*inch))
    ]
    table.setStyle(TableStyle([
        ('BACKGROUND', (1, 1), (1, 1), colors.yellow),  # set background color of first cell
        ('FONTNAME', (0, 0), (-1, -1), 'Helvetica'),  # set font for entire table
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # set text alignment for entire table
        ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),  # set vertical alignment for entire table
        ('SPAN', (0, 0), (2, 0)),  # merge first row
        ('SPAN', (0, 1), (0, 2)),  # merge first column
    ] + cell_style))  # append custom cell styles to table style
    
    # add the table to the PDF document and generate the PDF
    elems = [table]
    pdf.build(elems)
    

    En este ejemplo, agregamos dos rectángulos de diferentes tamaños y colores a la segunda celda de la segunda fila al definir una lista de tuplas en el objeto TableStyle. La primera tupla especifica el estilo para un rango de una sola celda (es decir, un rectángulo rojo de 0.5 pulgadas por 0.2 pulgadas) y la segunda tupla especifica el estilo para un rango de dos celdas (es decir, un rectángulo verde de 0.8 pulgadas por 0.4 pulgadas). Luego, agregamos los estilos de celda personalizados al estilo general de la tabla utilizando el operador +.

    Ten en cuenta que también definimos estilos personalizados para el encabezado y el contenido de la tabla utilizando la clase ParagraphStyle para aplicar un formato consistente en todo el documento. Estos estilos se aplican a toda la tabla utilizando el mismo objeto TableStyle.

Comments are closed.