예제 #1
0
파일: cmr.py 프로젝트: Virako/fpinn
def escribir_texto(c, txt, x1, x2, y, fuente, tamanno):
    if x2:
        geninformes.agregarFila(x1, 
                                y, 
                                x2, 
                                geninformes.escribe(txt), 
                                c, 
                                fuente, 
                                tamanno, 
                                centrado = True, 
                                altura_linea = 0.25*cm)
    else:
        c.drawString(x1, y, geninformes.escribe(txt))
예제 #2
0
def cabecera_y_cliente(canvas, 
                       doc, 
                       datos_cliente, 
                       datos_de_la_empresa, 
                       titular, 
                       datos_albaran):
    """
    Escribe el texto "ALBARÁN/CARTA DE PORTE" y los datos del cliente.
    Los datos del cliente vienen en un diccionario con: 
    código (de cliente), cif, razón social, dirección, población, provincia.
    """
    fuente = "Helvetica"
    tamanno = 12
    canvas.drawString(1.0*cm, 
                      PAGE_HEIGHT - 1.5*cm, 
                      escribe("ALBARÁN/CARTA DE PORTE"))
    altura_linea = 16
    xCliente = (PAGE_WIDTH - 1*cm) / 2.5
    linea = (PAGE_HEIGHT-1.5*cm) - 0.10*cm 
    rectangulo(canvas, 
               (xCliente - 0.2*cm, PAGE_HEIGHT - 1.5*cm + altura_linea), 
               (PAGE_WIDTH - 1*cm, 
                (PAGE_HEIGHT- 1.5*cm + altura_linea)-(altura_linea*5 + 0.5*cm))
              )
    canvas.drawString(xCliente, 
                      linea, 
                      escribe(
                        "Cód. cliente: %s        C.I.F.: %s" % (
                            datos_cliente['código'], 
                            datos_cliente['cif'])))
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(canvas, 
                                        fuente, 
                                        tamanno, 
                                        xCliente, 
                                        PAGE_WIDTH - 1*cm, 
                                        linea, 
                                        escribe("Razón social: %s" 
                                            % datos_cliente['razón social']))
    #canvas.drawString(xCliente, 
    #                  linea, 
    #                  escribe("Razón social: %s"%datos_cliente['razón social']))
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(canvas, 
                                        fuente, 
                                        tamanno, 
                                        xCliente, 
                                        PAGE_WIDTH - 1*cm, 
                                        linea, 
                                        escribe("Dirección: %s" 
                                            % datos_cliente['dirección']))
    #canvas.drawString(xCliente, 
    #                  linea, 
    #                  escribe("Dirección: %s" % datos_cliente['dirección']))
    linea -= altura_linea
    canvas.drawString(xCliente, 
                      linea, 
                      escribe("Población: %s" % datos_cliente['población']))
    linea -= altura_linea
    canvas.drawString(xCliente, 
                      linea, 
                      escribe("Provincia: %s" % datos_cliente['provincia']))
    # Y el pie de página:
    logo, empresa = build_logo_y_empresa_por_separado(datos_de_la_empresa)
    LineaHorizontal(0.9 * PAGE_WIDTH).drawOn(canvas, 78.0, 12.5*cm)
    LineaHorizontal(0.9 * PAGE_WIDTH).drawOn(canvas, 78.0, 12.4 *cm)
    logo.drawOn(canvas, 3*cm, 10 * cm)
    fuente = "Helvetica"
    tamanno = 10
    for i in range(len(empresa)):
        linea = 11.5 * cm
        el_encogedor_de_fuentes_de_doraemon(canvas, 
                                            fuente, 
                                            tamanno, 
                                            5.25*cm, 
                                            PAGE_WIDTH - 1*cm, 
                                            linea - (i*0.5*cm), 
                                            escribe(empresa[i]))
    #logo_y_empresa.drawOn(canvas, 10.5*cm, 78.0)
    texto = build_texto(titular)
    lineas = []
    for l in [p.text for p in texto._content]:
        lineas.extend(l.split("\n"))
    y = 9.5*cm
    tamanno = 8
    centrado = False
    for linea in lineas:
        linea = linea.replace(" ", "")
        if "<b>" in linea:
            fuente = "Times-Bold"
            linea = linea.replace("<b>", "").replace("</b>", "")
            # Aprovechando que el Pisuerga...
            centrado = True
        else:
            fuente = "Times-Roman"
        if "<font size=12>" in linea:
            tamanno = 12
            linea = linea.replace("<font size=12>", "").replace("</font>", "")
        else:
            tamanno = 10
        lineas_agregadas = agregarFila(1*cm, 
                                       y, 
                                       PAGE_WIDTH - 1*cm, 
                                       escribe(linea), 
                                       canvas, 
                                       fuente, 
                                       tamanno, 
                                       centrado = centrado)
        y -= lineas_agregadas * 10
    #canvas.drawString(PAGE_WIDTH - 2*cm, 2*cm, str(canvas.getPageNumber()))
    #texto.drawOn(canvas, 9*cm, 72.0)
    # Página x de y.
    canvas.saveState()
    canvas.setFont("Times-Italic", 9)
    canvas.drawRightString(PAGE_WIDTH - 1.5*cm, 
                           12.7*cm, 
                           escribe("Página %d de " % canvas.getPageNumber()))
    canvas.doForm("lastPageNumber")
    canvas.restoreState()
    # Cabecera.
    # Sí, ahora va aquí. No hace falta que ponga el CWT, ¿o sí?
    canvas.saveState()
    x1 = 1.0 * cm + 1
    limite = x1 + 0.9 * PAGE_WIDTH
    incremento = (limite - x1) / 4
    y1 = 24.5 * cm
    y2 = y1 - 18
    for texto, clave in (("Fecha", "fecha"), 
                         ("Nº Albarán", "número"), 
                         ("Kilos", "kilos"), 
                         ("Bultos", "bultos")):
        x2 = x1 + incremento
        canvas.setFont("Times-Roman", 12)
        rectangulo(canvas, 
                   (x1, y1), 
                   (x2, y2), 
                   texto = escribe(datos_albaran[clave]), 
                   alinTxtX = "centro", 
                   alinTxtY = "centro")
        canvas.setFont("Times-Roman", 10)
        canvas.drawString(x1+0.2*cm, y1 + 3, texto)
        x1 += incremento
    canvas.restoreState()