def dibujar_datos_empresa(canvas, datos_de_la_empresa): """ Dibuja los datos de la empresa en la parte superior. """ logo, empresa = build_logo_y_empresa_por_separado(datos_de_la_empresa) logo.drawOn(canvas, 1 * cm, PAGE_HEIGHT - 2.8 * cm) fuente = "Helvetica" tamanno = 16 for i in range(len(empresa)): if i == 1: tamanno -= 4 # Primera línea (nombre empresa) un poco más grande. linea = PAGE_HEIGHT - 1.5 * cm el_encogedor_de_fuentes_de_doraemon( canvas, fuente, tamanno, 3.25 * cm, PAGE_WIDTH - 3 * cm, linea - (i * 0.55 * cm), escribe(empresa[i]) )
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)
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()
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)