Exemplo n.º 1
0
def build_tabla_cabecera(canvas, datos_albaran, y1):
    # Cabecera.
    canvas.saveState()
    x1 = 1.0 * cm + 1
    limite = x1 + 0.9 * PAGE_WIDTH
    incremento = (limite - x1) / 3
    #y1 = 22.5 * cm
    y2 = y1 - 18
    for texto, clave in (("Código cliente", "codcliente"), 
                         ("Nº Albarán", "número"), 
                         ("Fecha", "fecha")): 
        x2 = x1 + incremento
        canvas.setFont("Times-Roman", 12)
        dato_albaran = escribe(datos_albaran[clave])
        rectangulo(canvas, 
                   (x1, y1), 
                   (x2, y2), 
                   texto = dato_albaran, 
                   alinTxtX = "centro", 
                   alinTxtY = "centro")
        canvas.setFont("Times-Roman", 10)
        canvas.drawString(x1+0.2*cm, y1 + 3, texto)
        x1 += incremento
    canvas.restoreState()
    # Página x de y.
    canvas.saveState()
    canvas.setFont("Times-Italic", 9)
    canvas.drawRightString(0.9 * PAGE_WIDTH - 0.5 * cm, 
                           1.0 * cm, 
                           escribe("Página %d de " % canvas.getPageNumber()))
    canvas.doForm("lastPageNumber")
    canvas.restoreState()
Exemplo n.º 2
0
def cabecera_y_cliente(canvas, doc, datos_cliente, datos_de_la_empresa, datos_albaran):
    """
    Escribe el texto "ALBARÁN" 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 = 24
    canvas.saveState()
    canvas.setFont(fuente, tamanno)
    canvas.drawString(
        PAGE_WIDTH - canvas.stringWidth(escribe("ALBARÁN"), fuente, tamanno) - 1.0 * cm,
        PAGE_HEIGHT - 1.5 * cm,
        escribe("ALBARÁN"),
    )
    canvas.restoreState()
    tamanno = 12
    altura_linea = 16
    xCliente = (PAGE_WIDTH - 1 * cm) / 2.5
    linea = (PAGE_HEIGHT - 1.5 * cm) - 0.10 * cm - 2 * cm
    rectangulo(
        canvas,
        (xCliente - 0.2 * cm, PAGE_HEIGHT - 1.5 * cm + altura_linea - 2 * cm),
        (PAGE_WIDTH - 1 * cm, (PAGE_HEIGHT - 1.5 * cm + altura_linea) - (altura_linea * 5 + 0.5 * cm) - 2 * 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(datos_cliente["razón social"])
    )
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(
        canvas, fuente, tamanno, xCliente, PAGE_WIDTH - 1 * cm, linea, escribe(datos_cliente["dirección"])
    )
    linea -= altura_linea
    canvas.drawString(xCliente, linea, escribe(datos_cliente["población"]))
    linea -= altura_linea
    canvas.drawString(xCliente, linea, escribe(datos_cliente["provincia"]))
    # Datos de la empresa
    dibujar_datos_empresa(canvas, datos_de_la_empresa)
    # Cabecera de factura
    build_tabla_cabecera(canvas, datos_albaran, 22.5 * cm)
Exemplo n.º 3
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()
Exemplo n.º 4
0
def cabecera_y_cliente(canvas,
                       doc,
                       datos_cliente,
                       datos_de_la_empresa,
                       datos_factura):
    """
    Escribe el texto "FACTURA" 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 = 24
    # XXX CWT: Para poder taladrar y archivar sin comerse el cuerpo.
    canvas.translate(0.6*cm, 0)
    # XXX
    canvas.saveState()
    canvas.setFont(fuente, tamanno)
    canvas.drawString(PAGE_WIDTH
                        - canvas.stringWidth(escribe("FACTURA"),fuente,tamanno)
                        - 1.0*cm,
                      PAGE_HEIGHT - 1.5*cm,
                      escribe("FACTURA"))
    canvas.restoreState()
    tamanno = 12
    altura_linea = 16
    xCliente = (PAGE_WIDTH - 1*cm) / 2.5
    linea = (PAGE_HEIGHT-1.5*cm) - 0.10*cm - 2*cm
    rectangulo(canvas,
               (xCliente - 0.2*cm, PAGE_HEIGHT - 1.5*cm + altura_linea - 2*cm),
               (PAGE_WIDTH - 1*cm,
                (PAGE_HEIGHT- 1.5*cm + altura_linea)
                -(altura_linea*5 + 0.5*cm) - 2*cm),
               doble = True
              )
    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(datos_cliente['razón social']))
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(canvas,
                                        fuente,
                                        tamanno,
                                        xCliente,
                                        PAGE_WIDTH - 1*cm,
                                        linea,
                                        escribe(datos_cliente['dirección']))
    linea -= altura_linea
    canvas.drawString(xCliente,
                      linea,
                      escribe(datos_cliente['población']))
    linea -= altura_linea
    canvas.drawString(xCliente,
                      linea,
                      escribe(datos_cliente['provincia']))
    # Datos de la empresa
    dibujar_datos_empresa(canvas, datos_de_la_empresa)
    # Cabecera de factura
    build_tabla_cabecera(canvas, datos_factura, 22.5*cm)
Exemplo n.º 5
0
def etiqueta_rollos_portrait(rollos, mostrar_marcado = True):
    """
    Construye una etiqueta 
    """
    # Voy a tratar de reescribir esto regla en mano a ver si consigo 
    # cuadrarlo bien en la etiquetadora GEMINI.
    height = 12.55 * cm
    width = 8.4 * cm

    # Escala
    ancho = 7.2
    alto = 11.3
    scale = height / alto 
    
    # Medidas en papel.
    brand = (0.4 * scale, (alto - 2.0) * scale)
    logo = (3.8 * scale, (alto - 2.8) * scale)
    marcado = ((7.2/2) * scale, (alto - 3.0) * scale)
    column1 = .35 * scale
    column2 = logo[0]
    lineas = map(lambda x: (alto - x) * scale, 
                 [3.4 + (i*.6) for i in range(13)])
    
    # Datos
    data = {'brand': "EkoTex", 
            "c100": "UK Distributor", 
            "c108": "Product Name", 
            "c109": "Roll Number", 
            "c110": "Product Dimensions", 
            "c111": "Polymer", 
            "c112": "Product Classification", 
            "c200": "Geosynthetics Limited", 
            "c201": "Fleming Road", 
            "c202": "Harrowbrook Ind Est", 
            "c203": "Hinckley", 
            "c204": "Leicestershire", 
            "c205": "LE10 3 DU", 
            "c206": "Tel 01455 617139", 
            "c207": "Fax 01455 617140", 
            "c211": "Polypropylene", 
            "c212": "GTX-N", 
            "marcado": "0799-CPD", # Hay que incluirle el logotipo CE delante.
            }
    data["logo"] = os.path.abspath(os.path.join(os.path.dirname(__file__), 
                                   "..", "imagenes", "logo_ekotex.png")) 
                                                # Ruta absoluta 
                                                # a la imagen del logotipo. 
    logo_marcado = os.path.abspath(os.path.join(os.path.dirname(__file__), 
                                   "..", "imagenes", "CE.png"))

    # Creo la hoja
    nomarchivo = os.path.join(gettempdir(),
        "etiqEkotex_%s.pdf" % give_me_the_name_baby())
    c = canvas.Canvas(nomarchivo, pagesize = (width, height))

    for rollo in rollos:
        try:
            data["c208"] = rollo['objeto'].productoVenta.nombre
            data["c209"] = rollo['objeto'].numrollo
            cer = rollo['objeto'].productoVenta.camposEspecificosRollo
        except AttributeError:  # No se ha creado el objeto todavía. Es None.
            data["c208"] = rollo['productoVenta'].nombre
            data["c209"] = rollo['nrollo']
            cer = rollo['productoVenta'].camposEspecificosRollo
        data["c210"] = "%sm x %dm" % (float2str(cer.ancho, 
                                                autodec = True, 
                                                separador_decimales = "."),
                                      cer.metrosLineales) 
        rectangulo(c, (0.3 * cm, 0.3 * cm),
                      (width - 0.3 * cm, height - 0.3 * cm))
        c.setFont("Helvetica-Bold", 16)
        c.drawString(brand[0], brand[1], escribe(data['brand']))
        c.setFont("Helvetica-Bold", 10)
        c.drawString(column1, lineas[0], escribe(data['c100']))
        c.drawString(column1, lineas[8], escribe(data['c108']))
        c.drawString(column1, lineas[9], escribe(data['c109']))
        c.drawString(column1, lineas[10], escribe(data['c110']))
        c.drawString(column1, lineas[11], escribe(data['c111']))
        c.drawString(column1, lineas[12], escribe(data['c112']))
        c.drawString(column2, lineas[0], escribe(data['c200']))
        c.drawString(column2, lineas[1], escribe(data['c201']))
        c.drawString(column2, lineas[2], escribe(data['c202']))
        c.drawString(column2, lineas[3], escribe(data['c203']))
        c.drawString(column2, lineas[4], escribe(data['c204']))
        c.drawString(column2, lineas[5], escribe(data['c205']))
        c.drawString(column2, lineas[6], escribe(data['c206']))
        c.drawString(column2, lineas[7], escribe(data['c207']))
        c.drawString(column2, lineas[8], escribe(data['c208']))
        c.drawString(column2, lineas[9], escribe(data['c209']))
        c.drawString(column2, lineas[10], escribe(data['c210']))
        c.drawString(column2, lineas[11], escribe(data['c211']))
        c.drawString(column2, lineas[12], escribe(data['c212']))
        c.drawImage(data['logo'], logo[0], logo[1], 
                    2.5 * cm, 2.5 * cm)
        if mostrar_marcado and not rollo['defectuoso']:
            c.drawImage(logo_marcado, 
                        marcado[0] 
                            - ((0.30*cm
                                + c.stringWidth(data['marcado']) ) / 2),
                        marcado[1],
                        width = 0.35 * cm,
                        height = 6)
            c.setFont("Helvetica-Bold", 8)
            c.drawCentredString(marcado[0] + ((0.35*cm) / 2), 
                                marcado[1], 
                                escribe(data["marcado"]))

        #c.setPageRotation(-90)
        #c.rotate(-90)
        c.showPage()
    c.save()
    return nomarchivo