def test4(self): "Construct CMYK instances and test round trip conversion" rgbCols = list(colors.getAllNamedColors().items()) # Make a roundtrip test (RGB > CMYK > RGB). for name, rgbCol in rgbCols: r1, g1, b1 = rgbCol.red, rgbCol.green, rgbCol.blue c, m, y, k = colors.rgb2cmyk(r1, g1, b1) cmykCol = colors.CMYKColor(c, m, y, k) r2, g2, b2 = cmykCol.red, cmykCol.green, cmykCol.blue #colors.cmyk2rgb((c, m, y, k)) rgbCol2 = colors.Color(r2, g2, b2) # Make sure the differences for each RGB component # isreally small (< power(10, -N)! N = 16 # max. value found to work on Python2.0 and Win2K. deltas = list(map(abs, (r1 - r2, g1 - g2, b1 - b2))) assert deltas < [math.pow(10, -N)] * 3
def test4(self): "Construct CMYK instances and test round trip conversion" rgbCols = colors.getAllNamedColors().items() # Make a roundtrip test (RGB > CMYK > RGB). for name, rgbCol in rgbCols: r1, g1, b1 = rgbCol.red, rgbCol.green, rgbCol.blue c, m, y, k = colors.rgb2cmyk(r1, g1, b1) cmykCol = colors.CMYKColor(c,m,y,k) r2, g2, b2 = cmykCol.red, cmykCol.green, cmykCol.blue #colors.cmyk2rgb((c, m, y, k)) rgbCol2 = colors.Color(r2, g2, b2) # Make sure the differences for each RGB component # isreally small (< power(10, -N)! N = 16 # max. value found to work on Python2.0 and Win2K. deltas = map(abs, (r1-r2, g1-g2, b1-b2)) assert deltas < [math.pow(10, -N)] * 3
def test5(self): "List and display all named colors and their gray equivalents." canvas = reportlab.pdfgen.canvas.Canvas(outputfile('test_lib_colors.pdf')) #do all named colors framePage(canvas, 'Color Demo - page %d' % canvas.getPageNumber()) all_colors = reportlab.lib.colors.getAllNamedColors().items() all_colors.sort() # alpha order by name canvas.setFont('Times-Roman', 10) text = 'This shows all the named colors in the HTML standard (plus their gray and CMYK equivalents).' canvas.drawString(72,740, text) canvas.drawString(200,725,'Pure RGB') canvas.drawString(300,725,'B&W Approx') canvas.drawString(400,725,'CMYK Approx') y = 700 for (name, color) in all_colors: canvas.setFillColor(colors.black) canvas.drawString(100, y, name) canvas.setFillColor(color) canvas.rect(200, y-10, 80, 30, fill=1) canvas.setFillColor(colors.color2bw(color)) canvas.rect(300, y-10, 80, 30, fill=1) c, m, yel, k = colors.rgb2cmyk(color.red, color.green, color.blue) CMYK = colors.CMYKColor(c,m,yel,k) canvas.setFillColor(CMYK) canvas.rect(400, y-10, 80, 30, fill=1) y = y - 40 if y < 100: canvas.showPage() framePage(canvas, 'Color Demo - page %d' % canvas.getPageNumber()) canvas.setFont('Times-Roman', 10) y = 700 canvas.drawString(200,725,'Pure RGB') canvas.drawString(300,725,'B&W Approx') canvas.drawString(400,725,'CMYK Approx') canvas.save()
def test3(self): "Test roundtrip RGB to CMYK conversion." # Take all colors as test subjects, except 'transparent'. ## rgbCols = colors.getAllNamedColors() ## del rgbCols['transparent'] rgbCols = list(colors.getAllNamedColors().items()) # Make a roundtrip test (RGB > CMYK > RGB). for name, rgbCol in rgbCols: r1, g1, b1 = rgbCol.red, rgbCol.green, rgbCol.blue c, m, y, k = colors.rgb2cmyk(r1, g1, b1) r2, g2, b2 = colors.cmyk2rgb((c, m, y, k)) rgbCol2 = colors.Color(r2, g2, b2) # Make sure the differences for each RGB component # isreally small (< power(10, -N)! N = 16 # max. value found to work on Python2.0 and Win2K. deltas = list(map(abs, (r1 - r2, g1 - g2, b1 - b2))) assert deltas < [math.pow(10, -N)] * 3
def test3(self): "Test roundtrip RGB to CMYK conversion." # Take all colors as test subjects, except 'transparent'. ## rgbCols = colors.getAllNamedColors() ## del rgbCols['transparent'] rgbCols = colors.getAllNamedColors().items() # Make a roundtrip test (RGB > CMYK > RGB). for name, rgbCol in rgbCols: r1, g1, b1 = rgbCol.red, rgbCol.green, rgbCol.blue c, m, y, k = colors.rgb2cmyk(r1, g1, b1) r2, g2, b2 = colors.cmyk2rgb((c, m, y, k)) rgbCol2 = colors.Color(r2, g2, b2) # Make sure the differences for each RGB component # isreally small (< power(10, -N)! N = 16 # max. value found to work on Python2.0 and Win2K. deltas = map(abs, (r1-r2, g1-g2, b1-b2)) assert deltas < [math.pow(10, -N)] * 3
def force_cmyk(rgb): c, m, y, k = colors.rgb2cmyk(rgb.red, rgb.green, rgb.blue) return colors.CMYKColor(c, m, y, k, alpha=rgb.alpha)
def post(self, request, *args, **kwargs): from django.http import HttpResponse import datetime # Obtenemos de platypus las clases Paragraph, para escribir parrafos Image, para insertar imagenes y SimpleDocTemplate para definir el DocTemplate. Ademas importamos Spacer, para incluir espacios . from reportlab.platypus import Paragraph from reportlab.platypus import SimpleDocTemplate from reportlab.platypus import Spacer from reportlab.platypus import Table # Importamos clase de hoja de estilo de ejemplo. from reportlab.lib.styles import getSampleStyleSheet # Se importa el tamanho de la hoja y los colores from reportlab.lib.pagesizes import A4 from reportlab.lib import colors diccionario={} usuario_logueado= Usuario.objects.get(id=request.POST['login']) proyecto_actual= Proyecto.objects.get(id=request.POST['proyecto']) diccionario['logueado']=usuario_logueado diccionario['proyecto']=proyecto_actual if not proyecto_actual.lider == usuario_logueado: diccionario['error']= 'No puedes realizar esta accion' diccionario['lista_fases']= Fase.objects.filter(proyecto= proyecto_actual) return render(request, super(Reporte_SC, self).template_name, diccionario) # Creamos un PageTemplate de ejemplo. estiloHoja = getSampleStyleSheet() #Inicializamos la lista Platypus Story. story = [] #Definimos como queremos que sea el estilo de la PageTemplate. cabecera = estiloHoja['Heading5'] #No se hara un salto de pagina despues de escribir la cabecera (valor 1 en caso contrario). cabecera.pageBreakBefore=0 # Se quiere que se empiece en la primera pagina a escribir. Si es distinto de 0 deja la primera hoja en blanco. cabecera.keepWithNext=0 # Color de la cabecera. cabecera.backColor=colors.white cabecera.spaceAfter = 0 cabecera.spaceBefore = 0 parrafo = Paragraph('.',cabecera) story.append(parrafo) parrafo = Paragraph('REPORTE DE SOLICITUDES DE CAMBIO DEL PROYECTO: '+ proyecto_actual.nombre,cabecera) story.append(parrafo) parrafo = Paragraph('-'*193,cabecera) story.append(parrafo) # Incluimos un Flowable, que en este caso es un parrafo. cabecera2 = estiloHoja['Heading3'] cabecera2.pageBreakBefore=0 cabecera2.keepWithNext=0 cabecera2.backColor=colors.white parrafo = Paragraph(' ',cabecera2) # Lo incluimos en el Platypus story. story.append(parrafo) # Definimos un parrafo. Vamos a crear un texto largo para demostrar como se genera mas de una hoja. lista = [] lista.append(['LISTA DE SOLICITUDES DE CAMBIO','','','','', '', '']) lista.append([' ',' ',' ',' ',' ', ' ', ' ']) lista.append(['ID','LINEA BASE','DETALLES','ESTADO','USUARIO', 'COSTO','VOTO LIDER']) solicitudes= (Solicitud_de_Cambios.objects.filter(proyecto=proyecto_actual)).order_by('id') for solicitud in solicitudes: voto=Voto.objects.filter(usuario=proyecto_actual.lider, solicitud_de_cambios=solicitud) if len(voto): if voto[0].voto=='Pe': if solicitud.estado=='A': lista.append([solicitud.id,solicitud.item_sc_aprobado.lineaBase.nombre,solicitud.descripcion,solicitud.estado,solicitud.usuario.nombre,solicitud.costo_del_impacto,'Pendiente']) else: lista.append([solicitud.id,solicitud.item_sc_desaprobado.lineaBase.nombre,solicitud.descripcion,solicitud.estado,solicitud.usuario.nombre,solicitud.costo_del_impacto,'Pendiente']) else: if solicitud.estado=='A': lista.append([solicitud.id,solicitud.item_sc_aprobado.lineaBase.nombre,solicitud.descripcion,solicitud.estado,solicitud.usuario.nombre,solicitud.costo_del_impacto,'Realizado']) else: lista.append([solicitud.id,solicitud.item_sc_desaprobado.lineaBase.nombre,solicitud.descripcion,solicitud.estado,solicitud.usuario.nombre,solicitud.costo_del_impacto,'Realizado']) else: if solicitud.estado=='A': lista.append([solicitud.id,solicitud.item_sc_aprobado.lineaBase.nombre,solicitud.descripcion,solicitud.estado,solicitud.usuario.nombre,solicitud.costo_del_impacto,'Lider NO es Miembro']) else: lista.append([solicitud.id,solicitud.item_sc_desaprobado.lineaBase.nombre,solicitud.descripcion,solicitud.estado,solicitud.usuario.nombre,solicitud.costo_del_impacto,'Lider NO es Miembro']) t=Table( lista, style = [ ('GRID',(0,0),(-1,-1),0.5,colors.white), ('BOX',(0,0),(-1,-1),2,colors.white), ('SPAN',(0,0),(-1,0)), ('ROWBACKGROUNDS', (0, 3), (-1, -1), (colors.Color(0.9, 0.9, 0.9),colors.white)), ('BACKGROUND', (0, 2), (-1, 2), colors.rgb2cmyk(r=6,g=62,b=193)), ('BACKGROUND', (0, 1), (-1, 1), colors.white), ('LINEABOVE',(0,0),(-1,0),1.5,colors.black), ('LINEBELOW',(0,0),(-1,0),1.5,colors.black), ('SIZE',(0,0),(-1,0),12), ('ALIGN', (0, 0), (-1, 0), 'CENTER'), ('VALIGN', (0, 0), (-1, 0), 'MIDDLE'), ('TEXTCOLOR', (0, 2), (-1, 2), colors.white), ] ) # Y lo incluimos en el story. story.append(t) # Dejamos espacio. story.append(Spacer(0,20)) # Creamos un DocTemplate en una hoja DIN A4, en la que se muestra el texto enmarcado (showBoundary=1) por un recuadro. doc=SimpleDocTemplate("Rep_Solc_Camb.pdf",pagesize=A4, rightMargin=1, leftMargin=1, topMargin=0, bottomMargin=0) parrafo = Paragraph('-'*193,cabecera) story.append(parrafo) parrafo = Paragraph('Fin del Informe' + ' '*100 + '('+str(datetime.date.today()) + ')' ,cabecera) story.append(parrafo) # Construimos el Platypus story. doc.build(story) image_data = open("Rep_Solc_Camb.pdf", "rb").read() return HttpResponse(image_data, mimetype="application/pdf")
def post(self, request, *args, **kwargs): proyecto_actual= Proyecto.objects.get(id=request.POST['proyecto']) from django.http import HttpResponse import os import datetime # Obtenemos de platypus las clases Paragraph, para escribir parrafos Image, para insertar imagenes y SimpleDocTemplate para definir el DocTemplate. Ademas importamos Spacer, para incluir espacios . from reportlab.platypus import Paragraph from reportlab.platypus import SimpleDocTemplate from reportlab.platypus import Spacer from reportlab.platypus import Table # Importamos clase de hoja de estilo de ejemplo. from reportlab.lib.styles import getSampleStyleSheet # Se importa el tamanho de la hoja y los colores from reportlab.lib.pagesizes import A4 from reportlab.lib import colors # Creamos un PageTemplate de ejemplo. estiloHoja = getSampleStyleSheet() #Inicializamos la lista Platypus Story. story = [] #Definimos como queremos que sea el estilo de la PageTemplate. cabecera = estiloHoja['Heading5'] #No se hara un salto de pagina despues de escribir la cabecera (valor 1 en caso contrario). cabecera.pageBreakBefore=0 # Se quiere que se empiece en la primera pagina a escribir. Si es distinto de 0 deja la primera hoja en blanco. cabecera.keepWithNext=0 # Color de la cabecera. cabecera.backColor=colors.white cabecera.spaceAfter = 0 cabecera.spaceBefore = 0 parrafo = Paragraph('.',cabecera) story.append(parrafo) parrafo = Paragraph('REPORTE DE ITEMS DEL PROYECTO: '+ proyecto_actual.nombre,cabecera) story.append(parrafo) parrafo = Paragraph('-'*193,cabecera) story.append(parrafo) # Incluimos un Flowable, que en este caso es un parrafo. cabecera2 = estiloHoja['Heading3'] cabecera2.pageBreakBefore=0 cabecera2.keepWithNext=0 cabecera2.backColor=colors.white parrafo = Paragraph(' ',cabecera2) # Lo incluimos en el Platypus story. story.append(parrafo) # Definimos un parrafo. Vamos a crear un texto largo para demostrar como se genera mas de una hoja. lista = [] lista.append(['LISTA DE ITEMS POR FASE','','','','', '', '']) lista.append([' ',' ',' ',' ',' ', ' ', ' ']) lista.append(['FASE','ID ITEM','NOMBRE','TIPO DE ITEM','ITEM PADRE', 'VERSION', 'COSTO']) fases = (Fase.objects.filter(proyecto=proyecto_actual)).order_by('numeroSecuencia') for fase in fases: lista.append([fase.nombre,' ',' ',' ',' ', ' ', ' ']) items=(Item.objects.filter(fase=fase, activo= True)).order_by('id') if len(items): for item in items: papa_item=Relacion.objects.filter(item2=item, activo=True) if len(papa_item): lista.append(['',item.id,item.nombre,item.tipodeItemAsociado,papa_item[0].item1.nombre,item.version,item.costo]) else: lista.append(['',item.id,item.nombre,item.tipodeItemAsociado,'NO',item.version,item.costo]) else: lista.append(['',' - ',' - ',' - ',' - ',' - ',' - ']) t=Table( lista, style = [ ('GRID',(0,0),(-1,-1),0.5,colors.white), ('BOX',(0,0),(-1,-1),2,colors.white), ('SPAN',(0,0),(-1,0)), ('ROWBACKGROUNDS', (0, 3), (-1, -1), (colors.Color(0.9, 0.9, 0.9),colors.white)), ('BACKGROUND', (0, 2), (-1, 2), colors.rgb2cmyk(r=6,g=62,b=193)), ('BACKGROUND', (0, 1), (-1, 1), colors.white), ('LINEABOVE',(0,0),(-1,0),1.5,colors.black), ('LINEBELOW',(0,0),(-1,0),1.5,colors.black), ('SIZE',(0,0),(-1,0),12), ('ALIGN', (0, 0), (-1, 0), 'CENTER'), ('VALIGN', (0, 0), (-1, 0), 'MIDDLE'), ('TEXTCOLOR', (0, 2), (-1, 2), colors.white), ] ) # Y lo incluimos en el story. story.append(t) # Dejamos espacio. story.append(Spacer(0,20)) # Creamos un DocTemplate en una hoja DIN A4, en la que se muestra el texto enmarcado (showBoundary=1) por un recuadro. doc=SimpleDocTemplate("Rep_items.pdf",pagesize=A4, rightMargin=1, leftMargin=1, topMargin=0, bottomMargin=0) parrafo = Paragraph('-'*193,cabecera) story.append(parrafo) parrafo = Paragraph('Fin del Informe' + ' '*100 + '('+str(datetime.date.today()) + ')' ,cabecera) story.append(parrafo) # Construimos el Platypus story. doc.build(story) image_data = open("Rep_items.pdf", "rb").read() return HttpResponse(image_data, mimetype="application/pdf")
def get(self, request, *args, **kwargs): p = Proyectos.objects.get(id=self.kwargs['id']) import os # Obtenemos de platypus las clases Paragraph, para escribir parrafos Image, para insertar imagenes y SimpleDocTemplate para definir el DocTemplate. Ademas importamos Spacer, para incluir espacios . from reportlab.platypus import Paragraph from reportlab.platypus import Image from reportlab.platypus import SimpleDocTemplate from reportlab.platypus import Spacer from reportlab.platypus import Table from reportlab.lib import styles # Importamos clase de hoja de estilo de ejemplo. from reportlab.lib.styles import getSampleStyleSheet # Se importa el tamanho de la hoja y los colores from reportlab.lib.pagesizes import A4 from reportlab.lib import colors # Creamos un PageTemplate de ejemplo. estiloHoja = getSampleStyleSheet() #Inicializamos la lista Platypus Story. story = [] # Ahora incluimos una imagen. fichero_imagen = IMAGENES_ROOT + "/cabecera.png" imagen_logo = Image(os.path.realpath(fichero_imagen),width=400,height=50) story.append(imagen_logo) #Definimos como queremos que sea el estilo de la PageTemplate. cabecera = estiloHoja['Heading5'] #No se hara un salto de pagina despues de escribir la cabecera (valor 1 en caso contrario). cabecera.pageBreakBefore=0 # Se quiere que se empiece en la primera pagina a escribir. Si es distinto de 0 deja la primera hoja en blanco. cabecera.keepWithNext=0 # Color de la cabecera. cabecera.backColor=colors.white cabecera.spaceAfter = 0 cabecera.spaceBefore = 0 parrafo = Paragraph('.',cabecera) story.append(parrafo) parrafo = Paragraph('Proyecto: '+ p.nombre,cabecera) story.append(parrafo) parrafo = Paragraph('-'*193,cabecera) story.append(parrafo) # Incluimos un Flowable, que en este caso es un parrafo. cabecera2 = estiloHoja['Heading3'] cabecera2.pageBreakBefore=0 cabecera2.keepWithNext=0 cabecera2.backColor=colors.white parrafo = Paragraph(' ',cabecera2) # Lo incluimos en el Platypus story. story.append(parrafo) # Definimos un parrafo. Vamos a crear un texto largo para demostrar como se genera mas de una hoja. fas = fases.objects.filter(proyecto=p) for f in fas: li = items.objects.filter(fase=f).order_by('id') lista = [] lista.append(['FASE: ' + f.nombre]) lista.append(['ID','DESCRIPCION','PADRE','VERSION','COSTO', 'ESTADO']) for i in li: padre = 'No tiene' r = relacion.objects.filter(itemHijo=i) if r: for aux in r: padre = aux.itemPadre.nombre lista.append([i.id,i.nombre,padre,i.versionAct,i.costo,i.estado]) lista.append(['']) t=Table( lista, style = [ ('GRID',(0,0),(-1,-1),0.5,colors.white), ('BOX',(0,0),(-1,-1),2,colors.white), ('SPAN',(0,0),(-1,0)), ('ROWBACKGROUNDS', (0, 2), (-1, -1), (colors.Color(0.9, 0.9, 0.9),colors.white)), ('BACKGROUND', (0, 1), (-1, 1), colors.rgb2cmyk(r=6,g=62,b=193)), ('LINEABOVE',(0,0),(-1,0),1.5,colors.black), ('LINEBELOW',(0,0),(-1,0),1.5,colors.black), ('SIZE',(0,0),(-1,0),12), ('ALIGN', (0, 0), (-1, 0), 'CENTER'), ('VALIGN', (0, 0), (-1, 0), 'MIDDLE'), ('TEXTCOLOR', (0, 1), (-1, 1), colors.white), ('BACKGROUND', (0, -1), (-1, -1), colors.white), ] ) # Y lo incluimos en el story. story.append(t) # Dejamos espacio. story.append(Spacer(0,20)) # Creamos un DocTemplate en una hoja DIN A4, en la que se muestra el texto enmarcado (showBoundary=1) por un recuadro. doc=SimpleDocTemplate(MEDIA_ROOT + "/proyecto_" +str(p.id) + ".pdf",pagesize=A4, rightMargin=1, leftMargin=1, topMargin=0, bottomMargin=0) import datetime parrafo = Paragraph('-'*193,cabecera) story.append(parrafo) print 'a' + ' '*100 + 'b' parrafo = Paragraph('Fin del Informe' + ' '*100 + '('+str(datetime.date.today()) + ')' ,cabecera) story.append(parrafo) # Construimos el Platypus story. doc.build(story) image_data = open(MEDIA_ROOT + "/proyecto_" +str(p.id) + ".pdf", "rb").read() return HttpResponse(image_data, mimetype="application/pdf")
def cmyk(self): """Return an CMYKColor for the current color""" cmyk = rgb2cmyk(self.red / 255, self.green / 255, self.blue / 255) return CMYKColor(cmyk[0], cmyk[1], cmyk[2], cmyk[3], alpha=self.alpha)