def getVerticalBarChart(): data = [(3, 18, 20), (14, 12, 21)] chart = VerticalBarChart() chart.data = data chart.valueAxis.valueMin = 0 chart.valueAxis.valueMax = 25 chart.valueAxis.valueStep = 5 chart.x = 5 chart.y = 5 chart.width = 240 chart.height = 100 chart.strokeColor = colors.black chart.fillColor = colors.yellow chart.groupSpacing = 0 chart.categoryAxis.categoryNames = ['A', 'B', 'C'] title = String(50, 110, 'Vertical Bar Chart', fontSize=14) drawing = Drawing(240, 120) drawing.add(title) drawing.add(chart) return drawing
def run(self, include_sub_survey=False, dimensions=[]): # Build data set averages = [] category_names = [] for dimension in self.getDimensions(): averages.append(self.get_average_score_for_dimension( include_sub_survey=include_sub_survey, dimension=dimension)) category_names.append(dimension) drawing = Drawing(600, 300) bc = VerticalBarChart() bc.x = 20 bc.y = 20 bc.height = 260 bc.width = 580 bc.data = [averages] bc.categoryAxis.categoryNames = category_names bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 10 bc.categoryAxis.labels.textAnchor = 'middle' bc.categoryAxis.visibleTicks = 0 bc.valueAxis.valueMax = 100.0 bc.valueAxis.valueMin = min(averages, 0) bc.valueAxis.labels.fontName = 'Helvetica' bc.valueAxis.labels.fontSize = 10 bc.valueAxis.labels.textAnchor = 'middle' bc.barLabelFormat = '%.0f' bc.barLabels.dy = 8 bc.barLabels.fontName = 'Helvetica' bc.barLabels.fontSize = 10 bc.barWidth = len(averages) bc.fillColor = None drawing.add(bc) # Write out data = drawing.asString('png') request = self.REQUEST response = request.RESPONSE response.setHeader('Content-Type', 'image/png') response.setHeader('Content-Disposition','inline; filename=%s.png' % self.getId()) response.setHeader('Content-Length', len(data)) response.setHeader('Cache-Control', 's-maxage=0') return data
def create_barchart(barchart_data): color=[green,red,blue,yellow,black] data_length=len(barchart_data["data"]) bar_chart = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = barchart_data["data"] bc.fillColor=lightblue bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = list(barchart_data["label"][0]) for i in xrange(data_length): bc.bars[i].fillColor = color[i] bar_chart.add(bc) ###legend#### bar_leg = LineLegend() bar_leg.boxAnchor = 'sw' bar_leg.x = 100 bar_leg.y = -1 bar_leg.columnMaximum = 1 bar_leg.yGap = 0 bar_leg.deltax = 50 bar_leg.deltay = 0 bar_leg.dx = 10 bar_leg.dy = 1.5 bar_leg.fontSize = 10 bar_leg.alignment = 'right' bar_leg.dxTextSpace = 5 bar_leg.colorNamePairs = [(color[i],barchart_data["legend"][0][i]) for i in xrange(data_length)] bar_chart.add(bar_leg) return bar_chart
def getVerticalBarChart(): data = [(df2.iloc[i, 38:43])] chart = VerticalBarChart() chart.data = data chart.valueAxis.valueMax = 90 chart.valueAxis.valueMin = 0 chart.valueAxis.valueStep = 10 chart.x = 5 chart.y = 5 chart.height = 100 chart.width = 240 chart.strokeColor = colors.black chart.fillColor = colors.pink chart.categoryAxis.categoryNames = ['Q1', 'Q2', 'Q3', 'Q4', 'Q5'] title = String(50, 120, 'Time (sec)', fontSize=14) drawing = Drawing(240, 120) drawing.add(title) drawing.add(chart) return drawing
def generar_pdf_usuarios_mes(request): #print "Genero el PDF" mes =0 anio =0 story =[] fecha_usuarios = x response = HttpResponse(content_type='application/pdf') pdf_name = "reporte_usuarios_mes.pdf" # llamado clientes # la linea 26 es por si deseas descargar el pdf a tu computadora # response['Content-Disposition'] = 'attachment; filename=%s' % pdf_name buff = BytesIO() doc = SimpleDocTemplate(buff, pagesize=letter, rightMargin=40, leftMargin=40, topMargin=60, bottomMargin=18, ) reportes = [] styles = getSampleStyleSheet() fichero_imagen="biblioteca/media/images/Reports-banner.jpg" imagen_logo=Image(os.path.realpath(fichero_imagen),width=400,height=100) story.append(imagen_logo) reportes.append(imagen_logo) header = Paragraph("Fecha del reporte: "+str(date.today()), styles['Heading1']) header2 = Paragraph("Reporte de los usuarios que prestaron espacio en el mes "+str(fecha_usuarios.month)+" del "+str(fecha_usuarios.year), styles['Normal']) salto_linea = Paragraph("\n\n", styles["Normal"]) reportes.append(Spacer(1, 12)) reportes.append(header) #reportes.append(Spacer(1, 12)) reportes.append(header2) reportes.append(Spacer(1, 12)) headings = ('Fecha préstamo', 'Usuario', 'Nombre del espacio', 'Fecha devolución') mes = x.month anio = x.year n = mes f = mes allreportes = [(i.fecha_prestamo, i.usuario.nombre, i.espacio.nombre_espacio, i.fecha_devolucion) for i in Prestamo.objects.filter(fecha_prestamo__month =mes,fecha_prestamo__year = anio)] #print allreportes t = Table([headings] + allreportes) t.setStyle(TableStyle( [ ('GRID', (0, 0), (3, -1), 1, colors.dodgerblue), ('LINEBELOW', (0, 0), (-1, 0), 2, colors.darkblue), ('BACKGROUND', (0, 0), (-1, 0), colors.dodgerblue) ] )) #GRAFICA DE BARRAS titulo1 = Paragraph("Gráfica comparativa de usuarios que prestaron espacios en el mes "+str(fecha_usuarios.month)+" y el mes anterior a éste. ", estilo['title']) drawing = Drawing(400, 200) data = [(u1, u2)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.bars[0].fillColor = colors.blue bc.bars[1].fillColor = colors.red bc.strokeColor = colors.black bc.fillColor = colors.silver bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = u2+10 try: o = u2 / 2 if type(o) == 'float': bc.valueAxis.valueStep = u2+0.5 if type(o) == 'int': bc.valueAxis.valueStep = o except: "No se puede" bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 0 if mes == 1: n = mes + 11 else: f = mes - 1 bc.categoryAxis.categoryNames = [ datetime.date(anio, f, 1).strftime('%B'), datetime.date(anio, n, 1).strftime('%B')] drawing.add(bc) bc.barLabels.nudge = 20 bc.barLabelFormat = '%0.0f' bc.barLabels.dx = 0 bc.barLabels.dy = 0 bc.barLabels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.barLabels.fontName = 'Helvetica' bc.barLabels.fontSize = 14 reportes.append(t) reportes.append(Spacer(0, inch*.1)) reportes.append(Spacer(0, inch*.1)) reportes.append(titulo1) reportes.append(drawing) doc.build(reportes) response.write(buff.getvalue()) buff.close() return response
def generar_pdf_busquedas_view(request): print "Genero el PDF" fecha_m = "" resultados=[] fecha_a = "" b=[] t=[] fecha_inicio = x fecha_final = y c=0 r=[] #story =[] response = HttpResponse(content_type='application/pdf') pdf_name = "reporte_busqueda.pdf" # llamado clientes # la linea 26 es por si deseas descargar el pdf a tu computadora response['Content-Disposition'] = 'attachment; filename=%s' % pdf_name buff = BytesIO() doc = SimpleDocTemplate(buff, pagesize=letter, rightMargin=40, leftMargin=40, topMargin=60, bottomMargin=18, ) reportes = [] styles = getSampleStyleSheet() fichero_imagen="biblioteca/media/images/Reports-banner.jpg" imagen_logo=Image(os.path.realpath(fichero_imagen),width=400,height=100) reportes.append(imagen_logo) header = Paragraph("Fecha del reporte: "+str(date.today()), styles['Heading1']) header2 = Paragraph("Reporte de las busquedas realizadas entre la fecha "+str(fecha_inicio)+" hasta la fecha "+str(fecha_final) + "\n", styles['Normal']) salto_linea = Paragraph("\n\n", styles["Normal"]) reportes.append(header) reportes.append(header2) reportes.append(Spacer(1, 12)) headings = ('Busqueda', 'Resultado',)# 'Cantidad_Veces_Buscadas') lista=[] t = Busqueda.objects.all() b = Busqueda.objects.filter(fecha__range=(fecha_inicio, fecha_final)).values('busqueda', 'resultados').distinct() listar=[] for r in b: print "llllllllllllllllll",r,"\n" if r['resultados'] == False: r['resultados']="No se encontró" listar.append(r) else: r['resultados']="Se encontró" listar.append(r) print "lisygyujgyjgjhbjh", listar #GRAFICAS BARRA total_busquedas=Busqueda.objects.all().count() #TOTAL BUSQUEDAS si=Busqueda.objects.filter(resultados=True).count() #BUSUEDAS ENCONTRADAS (SI) no=total_busquedas-si #BUSQUEDAS NO ENCONTRADAS (NO) #GRAFICAS PASTEL for i in b: print "________________",i.get("busqueda") for j in t: print "===============",j.busqueda if j.busqueda == i.get("busqueda") and j.fecha >= fecha_inicio and j.fecha <= fecha_final: c = c + 1 print c lista.append(c) c=0 print lista , len(lista) li = zip(b,lista) ''' for i in b: print "________________",i.get("busqueda") for j in t: print "===============",j.busqueda if j.busqueda == i.get("busqueda"): c = c + 1 print c lista.append(c) c=0 li = zip(b,lista) ''' #allreportes = [ (i.busqueda, i.resultados) for i in Busqueda.objects.filter(fecha__range=(fecha_inicio, fecha_final)).values('busqueda', 'resultados').distinct()] # allreportes = [ i.values() for i in Busqueda.objects.filter(fecha__range=(fecha_inicio, fecha_final)).values('busqueda', 'resultados').distinct()] b=listar allreportes = [ i.values() for i in b] print allreportes t = Table([headings] + allreportes) t.setStyle(TableStyle( [ ('GRID', (0, 0), (3, -1), 1, colors.dodgerblue), ('LINEBELOW', (0, 0), (-1, 0), 2, colors.darkblue), ('BACKGROUND', (0, 0), (-1, 0), colors.dodgerblue) ] )) #GRAFICA DE BARRAS titulo = Paragraph("Busquedas encontradas y no encontradas en el sistema", estilo['title']) drawing = Drawing(400, 200) data = [(si, no)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.bars[0].fillColor = colors.blue bc.bars[1].fillColor = colors.black bc.strokeColor = colors.black bc.fillColor = colors.silver bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = total_busquedas+30 try: r = total_busquedas/2 if type(r) == 'float': bc.valueAxis.valueStep = total_busquedas+0.5 if type(r) == 'int': bc.valueAxis.valueStep = r except: "Nos se puede" bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 0 bc.categoryAxis.categoryNames = ['Encontradas', 'No Encontradas'] drawing.add(bc) bc.barLabels.nudge = 20 bc.barLabelFormat = '%0.0f' bc.barLabels.dx = 0 bc.barLabels.dy = 0 bc.barLabels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.barLabels.fontName = 'Helvetica' bc.barLabels.fontSize = 14 #GRAFICAS DE PASTEL titulo2 = Paragraph("Busquedas y número de veces realizadas", estilo['title']) d = Drawing(400, 200) pc = Pie() pc.x = 125 pc.y = 25 pc.data = lista print lista #pc.data = [7, 1, 1, 1, 1, 2] #pc.labels = [ str(i.values()) for i in Busqueda.objects.filter(fecha__range=(fecha_inicio, fecha_final)).values('busqueda').distinct()] lista_labels = [ str(i.values()) for i in Busqueda.objects.filter(fecha__range=(fecha_inicio, fecha_final)).values('busqueda').distinct()] #pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6'] pc.sideLabels = 1 pc.width = 150 pc.height = 150 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.yellow pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue d.add(pc) legend = Legend() legend.x = 370 legend.y = 0 legend.dx = 10 legend.dy = 10 legend.fontName = 'Helvetica' legend.fontSize = 10 legend.boxAnchor = 'n' legend.columnMaximum = 10 legend.strokeWidth = 1 legend.strokeColor = colors.black legend.deltax = 75 legend.deltay = 10 legend.autoXPadding = 5 legend.yGap = 0 legend.dxTextSpace = 5 legend.alignment = 'right' legend.dividerLines = 1|2|4 legend.dividerOffsY = 4.5 legend.subCols.rpad = 30 #Insertemos nuestros propios colores colores = [colors.blue, colors.red, colors.green, colors.yellow, colors.black, colors.white, colors.silver, colors.pink, colors.brown, colors.orange, colors.purple] for i, color in enumerate(colores): pc.slices[i].fillColor = color legend.colorNamePairs = [( pc.slices[i].fillColor, (lista_labels[i][0:200], '%0.0f' % pc.data[i]) ) for i in xrange(len(pc.data))] d.add(pc) reportes.append(t) reportes.append(Spacer(0, inch*.1)) reportes.append(Spacer(0, inch*.1)) reportes.append(Spacer(0, inch*.1)) reportes.append(titulo) reportes.append(drawing) reportes.append(Spacer(0, inch*.1)) reportes.append(Spacer(0, inch*.1)) reportes.append(titulo2) d.add(legend) reportes.append(d) doc.build(reportes) response.write(buff.getvalue()) buff.close() return response
def generar_pdf_libros_mes(request): # print "Genero el PDF" fecha_libro = b mes = 0 anio = 0 story = [] response = HttpResponse(content_type="application/pdf") pdf_name = "reporte_libro.pdf" # llamado clientes # la linea 26 es por si deseas descargar el pdf a tu computadora # response['Content-Disposition'] = 'attachment; filename=%s' % pdf_name buff = BytesIO() doc = SimpleDocTemplate(buff, pagesize=letter, rightMargin=40, leftMargin=40, topMargin=60, bottomMargin=18) reporte_libro = [] styles = getSampleStyleSheet() fichero_imagen = "biblioteca/media/images/Reports-banner.jpg" imagen_logo = Image(os.path.realpath(fichero_imagen), width=400, height=100) story.append(imagen_logo) reporte_libro.append(imagen_logo) fecha_reporte = Paragraph("Fecha del reporte: " + str(date.today()), styles["Heading1"]) reporte_libro.append(fecha_reporte) header = Paragraph( "Reporte de libros prestados en el mes " + str(fecha_libro.month) + " del " + str(fecha_libro.year), styles["Normal"], ) reporte_libro.append(header) headings = ("Nombre", "Fecha devolución", "Fecha préstamo") # fecha_libro = reportes.cleaned_data['fecha_consulta'] mes = b.month anio = b.year i = mes j = mes all_libros = [ (p.libro.nombre_libro, p.fecha_devolucion, p.fecha_prestamo) for p in Prestamo.objects.filter(fecha_prestamo__month=mes, fecha_prestamo__year=anio) ] # print all_libros t = Table([headings] + all_libros) t.setStyle( TableStyle( [ ("GRID", (0, 0), (3, -1), 1, colors.dodgerblue), ("LINEBELOW", (0, 0), (-1, 0), 2, colors.darkblue), ("BACKGROUND", (0, 0), (-1, 0), colors.dodgerblue), ] ) ) # GRAFICA DE BARRAS titulos = Paragraph( "Gráfica comparativa de libros prestados en el mes " + str(fecha_libro.month) + " y el mes anterior a éste. ", estilo["title"], ) drawing = Drawing(400, 200) data = [(x1, y1)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.bars[0].fillColor = colors.blue bc.bars[1].fillColor = colors.red bc.strokeColor = colors.black bc.fillColor = colors.silver bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = y1 + 10 try: o = y1 / 2 if type(o) == "float": bc.valueAxis.valueStep = y1 + 0.5 if type(o) == "int": bc.valueAxis.valueStep = o except: "Nos se puede" bc.categoryAxis.labels.boxAnchor = "ne" bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 0 if mes == 1: i = mes + 11 else: j = mes - 1 bc.categoryAxis.categoryNames = [datetime.date(anio, j, 1).strftime("%B"), datetime.date(anio, i, 1).strftime("%B")] drawing.add(bc) bc.barLabels.nudge = 20 bc.barLabelFormat = "%0.0f" bc.barLabels.dx = 0 bc.barLabels.dy = 0 bc.barLabels.boxAnchor = "n" # irrelevant (becomes 'c') bc.barLabels.fontName = "Helvetica" bc.barLabels.fontSize = 14 reporte_libro.append(Spacer(0, inch * 0.1)) reporte_libro.append(Spacer(0, inch * 0.1)) reporte_libro.append(t) reporte_libro.append(Spacer(0, inch * 0.1)) reporte_libro.append(Spacer(0, inch * 0.1)) reporte_libro.append(titulos) reporte_libro.append(drawing) doc.build(reporte_libro) response.write(buff.getvalue()) buff.close() return response
def pdf_drawBar(self, chart_data, categoryNames=[], bar_color=[], title="", title_size=70, title_font=FONTBLOD, x=300, y=1600, chart_width=2000, chart_height=655, lable_fontSize=50, background_color=HexColor(0x000000), lable_angle=0, lable_y=0): ''' @example: chart_data = [25,65,330] chart_lable=['Rank','Total Entries'] data = [] data.append(chart_data) self.pdf_drawBar(data,categoryNames = chart_lable) ''' y = self.pdf_config_object.pdf_height - y title_position = self.get_title_position(chart_width, title, title_size) self.pdf_page_object.setFillColor(HexColor(0x000000)) self.pdf_page_object.setFont(title_font, title_size) self.pdf_page_object.drawString(x + title_position - 150, y + chart_height + title_size * 3 - 80, title) max_list = [] for index in range(len(chart_data)): if chart_data[index]: max_list.append(max(chart_data[index])) else: max_list.append(0) barchart_max = max(max_list) + 100 drawing = Drawing(800, 2230) bc = VerticalBarChart() bc.x = 0 bc.y = 0 bc.height = chart_height bc.width = chart_width bc.data = chart_data bc.groupSpacing = 15 bc.barSpacing = 10 bc.strokeColor = HexColor(0xDFDFDF) bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = barchart_max + barchart_max / 20 bc.valueAxis.valueStep = (barchart_max + barchart_max / 20) / 5 bc.valueAxis.visible = 0 bc.valueAxis.gridStrokeColor = colors.gray bc.valueAxis.visibleGrid = 1 bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = lable_y bc.categoryAxis.labels.fontSize = lable_fontSize bc.categoryAxis.labels.angle = lable_angle bc.categoryAxis.categoryNames = categoryNames if len(bar_color) == 0: for i in range(len(chart_data)): bar_color.append(HexColor(self.randomcolor())) for i in range(len(chart_data)): setattr(bc.bars[i], 'fillColor', bar_color[i]) setattr(bc.bars[i], 'strokeColor', colors.white) bc.fillColor = HexColor(0xffffff) drawing.add(bc) drawing.drawOn(self.pdf_page_object, x, y) barchart_max = barchart_max + barchart_max / 20 try: colWidths = chart_width / (len(chart_data[0])) except ZeroDivisionError as e: raise e return yheight = chart_height yStart = y self.pdf_page_object.setFillColor(background_color) self.pdf_page_object.setFont(FONTBLOD, 50) for i in range(len(chart_data)): width = 0 if not chart_data[i] == 0: for j in range(len(chart_data[i])): width = x + j * colWidths try: if len(chart_data) == 1: self.pdf_page_object.drawCentredString( width + colWidths / 2, yStart + yheight * chart_data[i][j] / barchart_max + 20, format(int(chart_data[i][j]), ',')) else: self.pdf_page_object.drawCentredString( width + colWidths / (2 * len(chart_data) + 1) * ((i + 1) * 2) - colWidths / (2 * len(chart_data) + 1) / 2, yStart + yheight * chart_data[i][j] / barchart_max + 20, format(int(chart_data[i][j]), ',')) except Exception as e: raise e