示例#1
0
def treeview2pdf(tv, titulo = None, fecha = None, apaisado = None):
    """
    A partir de un TreeView crea un PDF con su contenido.
    1.- Asigna un nombre de archivo en función del nombre del TreeView.
    2.- Si titulo es None, asigna como título el nombre del TreeView.
    3.- El ancho de los campos será el ancho relativo en porcentaje que ocupa el 
        ancho de la columna (get_width) a la que correspondería. El título del campo será el 
        título (get_title) de la columna.
    4.- Si fecha no es None debe ser una cadena de texto. Si no es None, se usará la 
        fecha actual del sistema.
    5.- Si la suma del ancho de las columnas del TreeView es superior a 800 píxeles el 
        PDF generado será apaisado, a no ser que se fuerce mediante el parámetro 
        "apaisado" que recibe la función.
    """
    archivo = get_nombre_archivo_from_tv(tv)
    if titulo == None:
        titulo = get_titulo_from_tv(tv)
    campos, pdf_apaisado, cols_a_derecha = get_campos_from_tv(tv)
    datos = get_datos_from_tv(tv)
    if fecha == None:
        fecha = utils.str_fecha(mx.DateTime.localtime())
    if apaisado != None:
        pdf_apaisado = apaisado
    return geninformes.imprimir2(archivo, titulo, campos, datos, fecha, apaisado = pdf_apaisado, cols_a_derecha = cols_a_derecha)
示例#2
0
def treeview2pdf(tv, titulo = None, fecha = None, apaisado = None, 
                 pijama = False, graficos = [], numcols_a_totalizar = [], 
                 extra_data = []):
    """
    A partir de un TreeView crea un PDF con su contenido.
    1.- Asigna un nombre de archivo en función del nombre del TreeView.
    2.- Si titulo es None, asigna como título el nombre del TreeView.
    3.- El ancho de los campos será el ancho relativo en porcentaje que ocupa 
        el ancho de la columna (get_width) a la que correspondería. El título 
        del campo será el título (get_title) de la columna.
    4.- Si fecha no es None debe ser una cadena de texto. Si es None, se 
        usará la fecha actual del sistema.
    5.- Si la suma del ancho de las columnas del TreeView es superior a 800 
        píxeles el PDF generado será apaisado, a no ser que se fuerce mediante 
        el parámetro "apaisado" que recibe la función.
    numcols_a_totalizar es una lista de índices (empezando por 0) de las 
    columnas a las que se va a intentar convertir a número y sumar para 
    mostrar una última línea con el texto "TOTAL" o "TOTALES" si hay más de 
    una.
    extra_data son líneas que se añadirán a las que tiene el TreeView 
    *al final* del informe (incluso detrás de los totales, si los hubiera).
    """
    archivo = get_nombre_archivo_from_tv(tv)
    if titulo == None:
        titulo = get_titulo_from_tv(tv)
    campos, pdf_apaisado, cols_a_derecha, cols_centradas=get_campos_from_tv(tv)
    datos = get_datos_from_tv(tv)
    totales = dict(zip(numcols_a_totalizar, len(numcols_a_totalizar) * [0]))
    for fila in datos:
        for numcol in totales:
            try:
                totales[numcol] += utils.parse_float(fila[numcol])
            except ValueError:  # ¿No hay dato en esa fila? Entonces cuento 
                                # instancias.
                totales[numcol] += 1
                #print fila, numcol, fila[numcol]
    if totales and datos:
        last_i = len(datos) - 1  # Apuntará a la última línea no nula
        while (last_i > 0 
               and reduce(lambda x, y: str(x) + str(y), datos[last_i]) == ""):
            last_i -= 1
        if (datos[last_i] and 
            not reduce(lambda x, y: x == y == "---" and "---", datos[last_i])):
            datos.append(("---", ) * len(campos))
        fila = ["TOTAL"] + [""] * (len(campos) - 1)
        if len(totales) > 1:
            fila[0] = "TOTALES"
        for total in totales:
            fila[total] = utils.float2str(totales[total]
                                          , precision = 2, autodec = True)
        datos.append(fila)
    if extra_data and not isinstance(extra_data[0], (tuple, list)):
        extra_data = [extra_data]
    for extra in extra_data:
        dif_len = len(campos) - len(extra)
        if dif_len <> 0 and not isinstance(extra, list):
            extra = list(extra)
        if dif_len > 0:
            extra += [""] * dif_len
        elif dif_len < 0:
            extra = extra[:len(campos)]
        datos.append(extra)
    if fecha == None:
        fecha = utils.str_fecha(datetime.date.today())
    if apaisado != None:
        pdf_apaisado = apaisado
    return geninformes.imprimir2(archivo, 
                                 titulo, 
                                 campos, 
                                 datos, 
                                 fecha, 
                                 apaisado = pdf_apaisado, 
                                 cols_a_derecha = cols_a_derecha, 
                                 cols_centradas = cols_centradas, 
                                 pijama = pijama, 
                                 graficos = graficos)