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()
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)
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