def __reminders(self): self.l = 800 p = PageBreak() p.drawOn(self.c, 0, 1000) self.c.showPage() self.c.setFont('Courier', 14) self.c.drawString(30, self.l, 'Recordatorio de pagos') header = ['Fecha', 'Descripcion', 'Monto'] data = [header] for rem in self.reminders: data.append([rem.start_date, rem.description, rem.amount]) self.l -= len(data) * 19 t = Table(data) t.setStyle(TableStyle([('INNERGRID', (0,0), (-1,-1), 0.25, black), ('BOX', (0,0), (-1,-1), 0.25, black), ('FONTNAME', (0,0), (-1,0), 'Courier-Bold'), ('BACKGROUND', (0,0), (-1,0), HexColor('#efeded')), ('BACKGROUND', (0,0), (0,-1), HexColor('#efeded')), ('FONTSIZE', (0,0), (-1,0), 12), ('FONTSIZE', (0,1), (-1,-1), 8), ('FONTNAME', (0,1), (-1,-1), 'Courier')])) t.wrapOn(self.c, 30, self.l) t.drawOn(self.c, 30, self.l)
def draw_items(self, invoice, canvas): """Draw items into a nice table.""" data = [[_("Description"), _("Qty"), _("Unit price"), _("Tax"), _("Total")]] for item in invoice.items.all(): data.append( [ item.description, item.quantity, format_currency(item.unit_price), str(item.tax) + "%", format_currency(item.total), ] ) data.append([u"", u"", u"", _("Total") + u":", format_currency(invoice.total)]) table = Table(data, colWidths=[10 * cm, 1.2 * cm, 2.5 * cm, 1.4 * cm, 2.8 * cm]) table.setStyle( [ ("FONT", (0, 0), (-1, -1), self.FONT_NAME), ("FONTSIZE", (0, 0), (-1, -1), 10), ("TEXTCOLOR", (0, 0), (-1, -1), (0.2, 0.2, 0.2)), ("GRID", (0, 0), (-1, -2), 1, (0.7, 0.7, 0.7)), ("GRID", (-2, -1), (-1, -1), 1, (0.7, 0.7, 0.7)), ("ALIGN", (1, 0), (-1, -1), "RIGHT"), ("BACKGROUND", (0, 0), (-1, 0), (0.8, 0.8, 0.8)), ] ) tw, th, = table.wrapOn(canvas, 15 * cm, 19 * cm) table.drawOn(canvas, 1.5 * cm, self.baseline - th) self.baseline = -26 * cm
def pdf(self): """ Metodo pdf: Este metodo genera el pdf, y en el nombre le pone la fecha en la que es generado utilizamos canvas, y llamamos al metodo tabla para agregar la tabla al pdf """ titulos = [ ["MATRICULA", "VEHICULO", "KILOMETROS", "FECHA ENTRADA", "CLIENTE", "CIF/NIF", "TELEFONO", "DIRECCION"]] clientes = titulos + list(self.cursor.execute("select * from taller")) tabla = Table(clientes) estilo = TableStyle([('GRID', (0, 0), (-1, -1), 2, colors.white), ('BACKGROUND', (0, 1), (-1, -1), colors.lightblue), ('BACKGROUND', (0, 0), (-1, 0), colors.lightred)]) tabla.setStyle(estilo) canvas = canvas.Canvas(self.historialpdf, pagesize=letter) canvas.drawString(20, 800, "Impresion lista clientes") tabla.wrapOn(canvas, 20, 30) tabla.drawOn(canvas, 20, 600) canvas.save() self.popup("PDF Generado")
def __budgets_spent(self): self.l = 800 p = PageBreak() p.drawOn(self.c, 0, 1000) self.c.showPage() self.c.setFont('Courier', 14) self.c.drawString(30, self.l, 'Budgets') header = ['Nombre', 'Gastado', 'Balance', 'Limite'] data = [header] for bud in self.budgets: data.append([bud.name, bud.spent, bud.balance, bud.limit]) self.l -= len(data) * 19 t = Table(data) t.setStyle(TableStyle([('INNERGRID', (0,0), (-1,-1), 0.25, black), ('BOX', (0,0), (-1,-1), 0.25, black), ('FONTNAME', (0,0), (-1,0), 'Courier-Bold'), ('BACKGROUND', (0,0), (-1,0), HexColor('#efeded')), ('BACKGROUND', (0,0), (0,-1), HexColor('#efeded')), ('FONTSIZE', (0,0), (-1,0), 12), ('FONTSIZE', (0,1), (-1,-1), 8), ('FONTNAME', (0,1), (-1,-1), 'Courier')])) t.wrapOn(self.c, 30, self.l) t.drawOn(self.c, 30, self.l)
def draw_table(c): cw, rh = 40, 32 data = [ ['00', '01', '02', '03', '04'], ['10', '11', '12', '13', '14'], ['20', '21', '', '23', '24'], ['30', '31', '32', '33', '34'], ['40', '41', '42', '43', '44'] ] t = Table( data, style=[ ('GRID', (0, 0), (-1, -1), 0.5, colors.grey), ('GRID', (1, 1), (-2, -2), 1, colors.green), ('BOX', (0, 0), (1, -1), 2, colors.red), ('BOX', (0, 0), (-1, -1), 2, colors.black), ('LINEABOVE', (1, 2), (-2, 2), 1, colors.blue), ('LINEBEFORE', (2, 1), (2, -2), 1, colors.pink), ('BACKGROUND', (0, 0), (0, 1), colors.pink), ('BACKGROUND', (1, 1), (1, 2), colors.lavender), ('BACKGROUND', (2, 2), (2, 3), colors.orange), ('ALIGN', (0, 0), (4, 4), 'CENTER'), ('VALIGN', (0, 0), (4, 4), 'MIDDLE'), ], colWidths=[cw] * len(data[0]), rowHeights=[rh] * len(data),) w, h = t.wrapOn(c, W, H) t.drawOn(c, (W - w) // 2, (H - h) // 2)
def tmplPage(canvas, doc): # шаблон страницы canvas.saveState() class rotateText(Flowable): # определение класса поворачиваемого текста на 90 градусов def __init__(self, text): self.text = text self.parag = Paragraph(self.text, styleSheet) def wrap(self, availWidth, availHeight): return -availWidth, availHeight def draw(self): self.canv.rotate(90) self.parag.wrapOn(self.canv, self._fixedHeight, self.parag._fixedWidth) self.parag.drawOn(self.canv, 0, 0) dataTable = [[u'Инвен-\nтарный\nномер', u'Дата', u'Обозначение', rotateText(u'Кол. листов'), # заголовок таблицы rotateText(u'Формат'), u'Наименование', u'Кем\nвыпу-\nщен', Paragraph(u'Подпись\nо\nприем-\nке до-\nкумента', styleSheet), u'При-\nмечание']] t = Table(dataTable, columnWidths, 18*mm) # формирование таблицы t.setStyle(tabStyle) # присвоение таблице стиля t.wrapOn(canvas, *pagesizes.A4) t.drawOn(canvas, 20*mm, pagesizes.A4[1] - (pagesizes.A4[1] - rowHeight*rowCount - t._height)/2 - t._height + Hoffset) # отрисовка таблицы canvas.drawString(pagesizes.A4[0] - 10*mm, 5*mm, str(doc.page)) # отрисовка номера страницы canvas.restoreState()
def draw_table(width_columns, data): table = Table(data, style=TABLE_STYLE, colWidths=width_columns) _, new_current_h = table.wrapOn(self.pdf, current_w, current_h) table.drawOn( self.pdf, current_x, self.height - current_y - new_current_h) self.position_y = current_y + max(new_current_h, current_h) return
def draw_items(self, invoice, canvas): # Items data = [[_('Quantity'), _('Description'), _('Amount'), _('Total')], ] for item in invoice.items.all(): data.append([ item.quantity, item.description, format_currency(item.unit_price), format_currency(item.total) ]) data.append( [u'', u'', _('Total') + u":", format_currency(invoice.total)] ) table = Table(data, colWidths=[1.7*cm, 11*cm, 2.5*cm, 2.5*cm]) table.setStyle([ ('FONT', (0, 0), (-1, -1), self.FONT_NAME), ('FONTSIZE', (0, 0), (-1, -1), 10), ('TEXTCOLOR', (0, 0), (-1, -1), (0.2, 0.2, 0.2)), ('GRID', (0, 0), (-1, -2), 1, (0.7, 0.7, 0.7)), ('GRID', (-2, -1), (-1, -1), 1, (0.7, 0.7, 0.7)), ('ALIGN', (-2, 0), (-1, -1), 'RIGHT'), ('BACKGROUND', (0, 0), (-1, 0), (0.8, 0.8, 0.8)), ]) tw, th, = table.wrapOn(canvas, 15*cm, 19*cm) table.drawOn(canvas, 1.5*cm, self.baseline-th) self.baseline = -26*cm
def drawForceUnitsPlatypusTable(p, force, WIDTH, HEIGHT): styleSheet = getSampleStyleSheet() TABLE_WIDTH=.9*WIDTH TABLE_HEIGHT=.65*HEIGHT desc=paragraph.Paragraph(''' <para align=center spaceb=3>blah blah blah blah blah blah blah blah blah blah long description of some very uniteresting force.</para>''', styleSheet["BodyText"]) unitTitle = paragraph.Paragraph(''' <para align=center spaceb=3>Unit</para>''', styleSheet["BodyText"]) countTitle = paragraph.Paragraph('Count', styleSheet['BodyText']) costTitle = paragraph.Paragraph('Cost', styleSheet['BodyText']) units = getForceUnits(force) data= [ [unitTitle, countTitle, costTitle]] count = int(0) for unit in units: namePara = paragraph.Paragraph(unit.name, styleSheet['BodyText']) data.append([namePara, units[unit], units[unit]*unit.cost]) print 'appending [%s][%d][%d]' % (namePara, units[unit], units[unit]*unit.cost) count = count+1 print 'i think last cell is 2,%d' % (count-1) t=Table(data,style=[('BACKGROUND', (0, 0), (2, 0), colors.darkgrey), ('TEXTCOLOR', (0, 0), (2,0), colors.white), ('BACKGROUND', (0, 1), (2,count-2), colors.white), ('GRID',(0,0),(-1,-1),0.5,colors.black), ('ALIGN',(0,0),(-1,-1),'CENTER'), ], colWidths=[.68*TABLE_WIDTH, .17 * TABLE_WIDTH, .15 * TABLE_WIDTH]) t.wrapOn(p, TABLE_WIDTH, TABLE_HEIGHT) t.drawOn(p, (WIDTH-TABLE_WIDTH)/2, .02*HEIGHT) return p
def setFooter(self, pageNumber): """ sets all footer information per page, add page info, footer bar, and privacy info, aligned on the bottom center of the page :param pageNumber: :return: """ companyLogoW = self.setCompanyLogo() companyLogoW += 5 if companyLogoW else 0 # add 5 for padding if company logo exists self.canvas.setLineWidth(width=1) self.canvas.setFillColor(lightslategray) self.canvas.setStrokeColor(black) self.canvas.rect(self.marginSize+companyLogoW, self.header, (self.pageWidth-(self.marginSize*2))-companyLogoW, (self.marginSize/2), fill=True, stroke=True) self.canvas.setFillColor(black) # footer text self.canvas.setFont(self.fontType, 9) self.canvas.drawRightString(self.pageWidth-(self.marginSize*1.25), (self.marginSize*1.625),"%s Page - %d" % (self.pageInfo, pageNumber)) # set privacy info on the bottom of the page privacyInfo = {'msg1':"CONFIDENTIAL: The images, artwork and other materials displayed are the proprietary property of %s."%self.companyName, 'msg2':"Any unauthorized use, printing, copying or distribution of such images, artwork and materials is strictly prohibited. All rights reserved.", 'textColor':self.textColor, 'fontName':self.fontType, 'size':7} shotName = Paragraph('''<para align=center spaceb=3> <font name=%(fontName)s size=%(size)s color=%(textColor)s>%(msg1)s<br/> %(msg2)s</font></para>'''%privacyInfo, self.styles['BodyText']) privacyTable = Table([[shotName]], colWidths=(self.pageWidth-(self.marginSize*2))) privacyTable.setStyle(TableStyle([('VALIGN',(-1,-1),(-1,-1),'TOP')])) privacyTable.wrapOn(self.canvas, self.marginSize, 10) privacyTable.drawOn(self.canvas, self.marginSize, 10)
def pdf(self): """ Metodo pdf: Este metodo genera el pdf, y en el nombre le pone la fecha en la que es generado utilizamos canvas, y llamamos al metodo tabla para agregar la tabla al pdf """ self.canvas = canvas.Canvas(self.historialpdf, pagesize=letter) titulos = [ ["DNI", "NOMBRE", "APELLIDOS", "DIRECCION", "TELEFONO", "FNACIMIENTO"]] clientes = titulos + list(self.cursor.execute("select * from CLIENTE")) tabla = Table(clientes) estilo = TableStyle([('GRID', (0, 0), (-1, -1), 2, colors.white), ('BACKGROUND', (0, 1), (-1, -1), colors.lightblue), ('BACKGROUND', (0, 0), (-1, 0), colors.lightcoral)]) tabla.setStyle(estilo) self.canvas.drawString(20, 800, "Impresion lista clientes") tabla.wrapOn(self.canvas, 20, 30) tabla.drawOn(self.canvas, 20, 600) self.canvas.save() self.popup("PDF Generado")
def drawWeeksTable(pdf,weeks,month,year): print("Drawing "+str(month)+" - "+str(year)) data = [] week_dates =[] for week in weeks.keys(): start = week[0].strftime("%d/%m") end = week[1].strftime("%d/%m") if week[0].month == week[1].month: week_dates.append(start+" - "+end) elif (week[0].month < month and week[0].year == year) or (week[0].year < year): week_dates.append(" - " + end) elif week[1].month > month: week_dates.append(start + " - ") data.append(week_dates) week_values = list(weeks.values()) week_values_str = [] for value in week_values: week_values_str.append(str(value)+" €") data.append(week_values_str) rowHeights = len(data)*[25] t=Table(data,rowHeights=rowHeights) t.setStyle(TableStyle([('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('ALIGN',(0,0),(-1,-1),'CENTER'), ('VALIGN',(0,0),(-1,-1),'MIDDLE'), ('FONTSIZE', (0, 0), (-1, -1), 15), ])) pdf.setFont("Helvetica", 18) pdf.drawString(50, 320, 'Ausgaben pro Woche') pdf.line(50, 318, 225, 318) t.wrapOn(pdf, 500, 300) t.drawOn(pdf, 50, 250)
def create_doc_details(c, table_header, table_body, table_footer): w, h = A4 document_details = [] c.setFont("Helvetica", 8) document_details.append(table_header) for detail in table_body: document_details.append (detail) document_details.append(table_footer) ts = [ ('FONT', (0,0), (-1,-1), 'Times-Roman', 8), ('ALIGN', (1,1), (-1,-1), 'CENTER'), ('LINEABOVE', (0,0), (-1,0), 1, purple), ('LINEBELOW', (0,0), (-1,0), 1, purple), ('FONT', (0,0), (-1,0), 'Times-Bold', 6), ('LINEABOVE', (0,-1), (-1,-1), 1, purple), ('LINEBELOW', (0,-1), (-1,-1), 0.5, purple,1, None, None, 4,1), ('LINEBELOW', (0,-1), (-1,-1), 1, red), ('FONT', (0,-1), (-1,-1), 'Times-Bold' ), ] table = Table(document_details, style=ts, colWidths=35) aW = w aH = h w1,h1 = table.wrap(aW, aH)# find required if w<=aW and h<=aH: table.drawOn(c, inch ,h - h1 - inch*2.5 ) else: raise ValueError, "Not enough room"
def _posting_list_table(self, canvas, x1, y1, x2, y2, shipping_labels): style = self.table_style[:] table = [self.table_header] for i, shipping_label in enumerate(shipping_labels, start=1): row = ( str(shipping_label.tracking_code), str(shipping_label.receiver.zip_code), str(shipping_label.package.posting_weight), self.yes if ExtraService.get(EXTRA_SERVICE_AR) in shipping_label else self.no, self.yes if ExtraService.get(EXTRA_SERVICE_MP) in shipping_label else self.no, self.yes if shipping_label.has_declared_value() else self.no, str(shipping_label.value).replace(".", ",") if shipping_label.value is not None else "", str(shipping_label.invoice_number), shipping_label.get_package_sequence(), shipping_label.receiver.name[:self.max_receiver_name_size], ) # noinspection PyTypeChecker table.append(row) if i % 2: style.append(('BACKGROUND', (0, i), (-1, i), colors.lightgrey)) table_flow = Table( table, colWidths=self.col_widths, style=TableStyle(style), ) w, h = table_flow.wrap(0, 0) table_flow.drawOn(canvas, x1, y2 - h - 50 * mm)
def draw_order_items(canvas, order_items): data = [[u'Item', u'Kuantiti', u'Harga (RM)', u'Jumlah (RM)'], ] for item in order_items: data.append([ item.item.name, item.qty, '%.2f' % item.item.price_sale, '%.2f' % item.total ]) data.append(['Jumlah Keseluruhan: RM%.2f' % item.order.total, '', '', '']) table = Table(data, colWidths=[11 * cm, 2 * cm, 3 * cm, 3 * cm], hAlign='LEFT', repeatRows=1) table.setStyle([ ('FONT', (0, 0), (-1, -1), 'Helvetica'), ('FONTSIZE', (0, 0), (-1, -1), 10), ('TEXTCOLOR', (0, 0), (-1, -1), (0.2, 0.2, 0.2)), #('GRID', (0, 0), (-1, -2), 1, (0.7, 0.7, 0.7)), #('GRID', (-2, -1), (-1, -1), 1, (0.7, 0.7, 0.7)), ('ALIGN', (2, 0), (-1, -1), 'RIGHT'), # price, total #('BACKGROUND', (2, 0), (-1, -1), colors.yellow), # price, total ('ALIGN', (1, 0), (-1, -1), 'CENTER'), # qty #('BACKGROUND', (0, 0), (0, -1), colors.yellow), # item ('LEFTPADDING', (0, 0), (0, -1), 0), # item #('BACKGROUND', (0, 0), (-1, 0), (0.8, 0.8, 0.8)), ('LINEBELOW', (0, 0), (-1, 0), 1, colors.black), ('LINEBELOW', (0, -2), (-1, -2), 1, colors.black), ]) return table tw, th, = table.wrapOn(canvas, 15 * cm, 19 * cm) table.drawOn(canvas, 1 * cm, -4 * cm - th) return tw, th
def drawBalanceTable(pdf,budget,spent,payback,x,y): data = [['Gesamtausgaben',str(spent)+" €"], ['Budget pro Monat', str(budget)+" €"], ['Rückzahlung', str(payback)+" €"]] balance = round(payback+budget-spent,2) style =[('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('FONTSIZE', (0, 0), (-1, -1), 15), ] if balance > 0 : balance_str = "Suffizit" style.append(['BACKGROUND', (0, 3), (1, 3), colors.lightgreen]) else: balance_str = "Defizit" style.append(['BACKGROUND', (0, 3), (1, 3), colors.rgb2cmyk(255, 150, 110)]) data.append([balance_str,str(balance)+" €"]) rowHeights = len(data) * [25] pdf.drawString(x, y+110, 'Bilanz') pdf.line(x, y+108, x+50, y+108) t = Table(data,rowHeights=rowHeights) t.setStyle(TableStyle(style)) t.wrapOn(pdf, 500, 300) t.drawOn(pdf, x, y) return t
def draw_seats_table(c, x, y, transaction: Transaction): table_style = TableStyle([ ('BOX', (0, 0), (-1, -1), 1, colors.black), ('GRID', (0, 0), (-1, -1), 1, colors.black), ('BACKGROUND', (0, 0), (-1, -1), colors.gray), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('BACKGROUND', (0, 1), (-1, -1), colors.beige), ]) table_data = [['Seat number', 'Ticket type', 'Price']] for seat in transaction.seats: table_data.append([ seat.seat_number, seat.ticket_type.name, '£{:.2f}'.format(seat.ticket_type.price) ]) table_data.append([[]]) table_data.append( ['VAT', '', '£{:.2f}'.format(transaction.get_cost() * 0.2)]) table_data.append(['Total', '', '£{:.2f}'.format(transaction.get_cost())]) f = Table(table_data, style=table_style) f.wrapOn(c, 400, 100) table_width, table_height = f.wrap(0, 0) # Magic numbers 17 just works lol, 715 is the height of the top of 'Movie:' f.drawOn(c, x - table_width - 17, y - table_height)
def header_table(c, pos): data = [ [ Paragraph("ESTADO DE CUENTA", p8), '', '', '', '', '', '', '' ], [ Paragraph("FECHA VENCIMIENTO", p9), Paragraph("FACTURA", p9), Paragraph("NRO LETRA", p9), Paragraph("NUMERO UNICO", p9), Paragraph("BANCO", p9), Paragraph("MONTO LETRA", p9), Paragraph("COSTO RETIRO LETRA", p9), Paragraph("MONTO TOTAL", p9) ], ] hTable = Table(data, colWidths=col_widths, rowHeights=(32)) hTable.setStyle( TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('BOX', (0, 0), (-1, -1), 1, blue1), ('TEXTCOLOR', (0, 1), (-1, -1), blue2), ('SPAN', (0, 0), (-1, 0)), #('BACKGROUND',(0, 1),(-1,-1), colors.blue) ])) hTable.wrapOn(c, 120, 500) hTable.drawOn(c, pos_left, pos)
def tabla(self, pdf, y): # Creamos una tupla de encabezados para nuestra tabla encabezados = ('FECHA', 'BENEFICIARIO', 'CTRO MEDICO', 'DOCTOR', 'CLAVE', 'OBS') # Creamos una lista de tuplas que van a contener a las personas detalles = [(c.fecha_ingreso, c.beneficiario.nombre + ' ' + c.beneficiario.apellidos, c.centromedico, c.doctor, c.estado_clave, c.observaciones) for c in Solicitud_Cirugia.objects.all()] # Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table( [encabezados] + detalles, colWidths=[2 * cm, 4 * cm, 5.7 * cm, 3 * cm, 1.5 * cm]) # Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle( TableStyle([ # La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), # Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), # El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ])) # Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) # Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 60, y)
def tabla(self, pdf, y): #Creamos una tupla de encabezados para neustra tabla encabezados = ('No.', 'Fecha', 'Nombre', 'Pago', 'Subtotal', 'Desc.', 'Total') #Creamos una lista de tuplas que van a contener a las personas detalles = [(p.id, p.fecha, p.abonado, p.pago, p.subtotal, p.total_descuento, p.total_general) for p in Recaudacion.objects.all()] #Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=(25, 55, 185, 100, 50, 50, 65)) #Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle( TableStyle([ #La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), #Los bordes de todas las celdas serán de color azul y con un grosor de 1 ('GRID', (0, 0), (6, -1), 1, colors.dodgerblue), ('LINEBELOW', (0, 0), (-1, 0), 2, colors.darkblue), ('BACKGROUND', (0, 0), (-1, 0), colors.dodgerblue), #El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 9), ])) #Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) #Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 40, y)
def tabla(self, pdf, y): # Creamos una tupla de encabezados para nuestra tabla encabezados = ('RAZON SOCIAL', 'LOCALIDAD', 'DOMICILIO', 'TELEFONO') # Creamos una lista de tuplas que van a contener a lOS CENTROS MEDICOS detalles = [(centromedico.razonSocial, centromedico.localidad, centromedico.domicilio, centromedico.telefono) for centromedico in CentroMedico.objects.all()] # Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[7 * cm, 3 * cm, 3 * cm, 3 * cm]) # Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle( TableStyle([ # La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), # Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), # El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ])) # Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) # Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 60, y)
def tabla(self, pdf, y): encabezados = ('Cédula/Ruc', 'Nombres', 'Apellidos', 'Dirección', 'Teléfono') detalles = [(cliente.cedula, cliente.nombres, cliente.apellidos, cliente.direccion, cliente.telefono) for cliente in Cliente.objects.all()] detalle_orden = Table([encabezados] + detalles, colWidths=[ 3 * cm, 3 * cm, 3 * cm, 5 * cm, 2.5 * cm, ]) detalle_orden.setStyle( TableStyle([ #La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), #Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), #El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ])) #Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) #Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 60, y)
def write_pdf(input_text): pdfmetrics.registerFont( TTFont('JannaBold', 'resources/Bahij_Janna-Bold.ttf')) packet = BytesIO() canv = canvas.Canvas(packet) canv.setPageSize(PAGE_SIZE) canv.setFillColorRGB(*RGB_COLOR) canv.setFont('JannaBold', FONT_SIZE) canv.drawImage('resources/Python-Logo.png', 0, 0, mask='auto') canv.drawRightString(PAGE_SIZE[0] - 10, 10, get_display(arabic_reshaper.reshape(input_text))) style = ParagraphStyle(name='Normal', fontName='JannaBold', fontSize=12, leading=12. * 1.2, wordWrap='RTL') style.alignment = TA_RIGHT data = ['نص عربي', input_text] data = [[Paragraph(get_display(arabic_reshaper.reshape(x)), style)] for x in data] f = Table(data, style=TableStyle([ ("INNERGRID", (0, 0), (-1, -1), 0.25, colors.black), ("BOX", (0, 0), (-1, -1), 0.25, colors.black) ])) f.wrapOn(canv, 120, 0) f.drawOn(canv, 449, 150) canv.save() packet.seek(0) return packet
def createDocument(self, address, body, greetings): voffset = 120 # create return address paragraph = Paragraph(address.nombre+"<br />"+address.direccion1+"<br />"+address.direccion2+"<br />"+address.direccion3+"<br />"+address.direccion4, self.styles["Normal"]) header = [["",paragraph]] table = Table(header, colWidths=4*inch) table.setStyle([("VALIGN", (0,0), (0,0), "TOP")]) table.wrapOn(self.c, self.width, self.height) table.drawOn(self.c, *self.coord(18, 60, mm)) # insert body of letter print "bodyyy" print body body = body.replace('\n','<br />') p = Paragraph(body, self.styles["Normal"]) p.wrapOn(self.c, self.width-70, self.height) p.drawOn(self.c, *self.coord(20, voffset+50, mm)) # greetings try: p = Paragraph(greetings.nombre+"<br />"+greetings.direccion1+"<br />"+greetings.direccion2+"<br />"+greetings.direccion3+"<br />"+greetings.direccion4, self.styles["Normal"]) except: p = Paragraph("", self.styles["Normal"]) p.wrapOn(self.c, self.width-70, self.height) p.drawOn(self.c, *self.coord(20, voffset+75, mm))
def create_payment_summary(self): """""" ptext = '<font size=26>Your payment summary</font>' p = Paragraph(ptext, self.styles["Normal"]) p.wrapOn(self.canvas, self.width, self.height) p.drawOn(self.canvas, *self.coord(15, 47, mm)) colWidths = [75, 125, 50, 125, 50, 150] plan_title = Paragraph('<font size=8>Your plan paid</font>', self.styles["Normal"]) owe_title = Paragraph('<font size=8>You owe or already paid</font>', self.styles["Normal"]) data = [['', '', '', plan_title, '', owe_title], [ self.create_bold_text('Patient'), self.create_bold_text('Provider'), self.create_bold_text('Amount'), self.create_bold_text('Sent to'), self.create_bold_text('Date'), self.create_bold_text('Amount'), ]] table = Table(data, colWidths=colWidths) table.wrapOn(self.canvas, self.width, self.height) table.drawOn(self.canvas, 20, 600)
def _header_footer(canvas, doc): # Save the state of our canvas so we can draw on it canvas.saveState() styles = getSampleStyleSheet() # HEADER # -- image image = Image( 'https://s3.amazonaws.com/reclutamiento/images/logopetroperu-bg-FFF.jpg' ) image.drawHeight = 0.75 * inch * image.drawHeight / image.drawWidth image.drawWidth = 0.75 * inch # -- title and subtitle title = getParagraphText('ATENCIONES', 14, 'center', True) # -- table header_table = Table([[[image], [title], [image]]], colWidths=(doc.width * 0.2, doc.width * 0.6, doc.width * 0.2)) header_table.setStyle( TableStyle([('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('BOTTOMPADDING', (0, 0), (-1, -1), 0), ('TOPPADDING', (0, 0), (-1, -1), 0), ('BOX', (0, 0), (-1, -1), 0.25, colors.black)])) w, h = header_table.wrap(doc.width, doc.topMargin) header_table.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - h) canvas.restoreState()
def tabla6(self, c, y): solicitud_2 = Solicitud.objects.filter( fk_integral__folio='34089', fk_integral__fk_turno='2', fk_integral__fk_recol='2').values('recibe_serv', 'recibe_lav') # table header styles = getSampleStyleSheet() styleBH = styles["Normal"] styleBH.fontSize = 3 recibe_lav_recol = Paragraph('recibe lav', styleBH) recibe_serv_recol = Paragraph('recibe serv', styleBH) data = [] data.append([recibe_lav_recol, recibe_serv_recol]) width, heigth = A4 high = 600 for sol in solicitud_2: this_sol = [sol['recibe_lav'], sol['recibe_serv']] data.append(this_sol) high = high - 18 # Table size width, heigth = A4 table = Table(data, colWidths=[1 * cm, 1 * cm]) table.setStyle(TableStyle([ ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('FONTSIZE', (0, 0), (-1, -1), 8)])) # pdf size table.wrapOn(c, width, heigth) table.drawOn(c, 507, high)
def _header_footer(self, canvas, doc): # Save the state of our canvas so we can draw on it canvas.saveState() styles = getSampleStyleSheet() # HEADER # -- image image = Image( 'https://s3.amazonaws.com/reclutamiento/images/logopetroperu-bg-FFF.jpg' ) image.drawHeight = 0.75 * inch * image.drawHeight / image.drawWidth image.drawWidth = 0.75 * inch # -- title and subtitle title = getParagraphText(to_upper(self.title), 14, 'center', True) sub_title = Paragraph( '<para align=center ><b> INFORMACIÓN GENERAL DE LOS POSTULANTES</b></para>', styles["BodyText"]) # -- table header_table = Table([[[image], [title, sub_title], [image]]], colWidths=(doc.width * 0.2, doc.width * 0.6, doc.width * 0.2)) header_table.setStyle( TableStyle([('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('BOX', (0, 0), (-1, -1), 0.25, colors.black)])) w, h = header_table.wrap(doc.width, doc.topMargin) header_table.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - h) # Footer # Write footer # Release the canvas canvas.restoreState()
def tabla(self, pdf, y): # Creamos una tupla de encabezados para neustra tabla encabezados = ('Codigo', 'Descripcion', 'Precio', 'Cantidad') # Creamos una lista de tuplas que van a contener a las personas query = self.request.GET.get('buscar') renglones = object_list = Tmp_Orden_Compra.objects.filter( Q(proveedor__razon_social__icontains=query)) detalles = [] cantidad = 0 total = 0 for renglon in renglones: detalles.append((renglon.articulo_proveedor, renglon.descripcion, renglon.precio_costo, renglon.cantidad)) cantidad = cantidad + renglon.cantidad total = total + (renglon.cantidad * renglon.precio_costo) txt = f"Total de articulos = {cantidad} total = ${total}" pdf.drawString(20, 670, txt) # Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[ 5 * cm, 3 * cm, 2 * cm]) # Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle(TableStyle( [ # La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), # Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), # El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ] )) filas = len(detalles) detalle_orden.wrapOn(pdf, 0, 400) detalle_orden.drawOn(pdf, 50, 640 - (18*filas)) return txt
def add_table(pdf, data, x, y): data = dic_to_list(data) table = Table(data) table.setStyle(style) table.setStyle(ts) table.wrapOn(pdf, 400, 100) table.drawOn(pdf, x, y)
def tabla(self,pdf,y): #Creamos una tupla de encabezados para neustra tabla encabezados = ('Paciente', 'Apoyo monetario', 'Apoyo en especie', 'Fecha de apoyo') #Creamos una lista de tuplas que van a contener a las personas detalles = [(p.Apoyo_Paciente.Paciente_nombre + " "+ p.Apoyo_Paciente.Paciente_apellido, p.Donacion_monetaria, p.Donacion_especie, p.Fecha_entrega) for p in Seguimiento_Apoyo.objects.select_related("Apoyo_Paciente").all()] #Establecemos el tamano de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[120 , 120 , 120 , 120 ]) #Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle(TableStyle( [ #La primera fila(encabezados) va a estar centrada ('ALIGN',(0,0),(3,0),'CENTER'), ('TEXTCOLOR',(0,0),(3,0),colors.black), #Los bordes de todas las celdas seran de color negro y con un grosor de 1 ('BACKGROUND',(0,0),(3,0),colors.gainsboro), ('GRID', (0, 0), (-1, -1), 1, colors.gray), #El tamano de las letras de cada una de las celdas sera de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ] )) #Establecemos el tamano de la hoja que ocupara la tabla detalle_orden.wrapOn(pdf, 800, 500) #Definimos la coordenada donde se dibujara la tabla detalle_orden.drawOn(pdf, 60,y)
def _posting_list_table(self, canvas, x1, y1, x2, y2, shipping_labels): style = self.table_style[:] table = [self.table_header] for i, shipping_label in enumerate(shipping_labels, start=1): row = ( str(shipping_label.tracking_code), str(shipping_label.receiver.zip_code), str(shipping_label.package.weight), self.yes if ExtraService.get(EXTRA_SERVICE_AR) in shipping_label else self.no, self.yes if ExtraService.get(EXTRA_SERVICE_MP) in shipping_label else self.no, self.yes if shipping_label.has_declared_value() else self.no, str(shipping_label.value).replace(".", ",") if shipping_label.value is not None else "", str(shipping_label.invoice_number), shipping_label.get_package_sequence(), shipping_label.receiver.name[:self.max_receiver_name_size], ) # noinspection PyTypeChecker table.append(row) if i % 2: style.append(("BACKGROUND", (0, i), (-1, i), colors.lightgrey)) table_flow = Table(table, colWidths=self.col_widths, style=TableStyle(style)) w, h = table_flow.wrap(0, 0) table_flow.drawOn(canvas, x1, y2 - h - 50 * mm)
def writeVerdictPDF(self,school_name, filename, verdict): sorted_verdict = OrderedDict(sorted(verdict.items(), key=lambda t: t[0])) styles = getSampleStyleSheet() styleN = styles["BodyText"] styleN.alignment = TA_LEFT styleBH = styles["Normal"] styleBH.alignment = TA_CENTER data= [map(lambda (k,v): Paragraph(k, styleBH), sorted_verdict.iteritems()), map(lambda (k,v): Paragraph("<br/> ------------- <br/>".join(set(map(lambda (x): x.strip(), v[2]))), styleN), sorted_verdict.iteritems())] cwidth = 120 table = Table(data, colWidths=[cwidth]*len(sorted_verdict)) table.setStyle(TableStyle([ ('INNERGRID', (0,0), (-1,-1), 0.25, black), ('BOX', (0,0), (-1,-1), 0.25, black), ('VALIGN',(0,0),(-1,-1),'TOP') ])) margin = 20 w, h = table.wrap(0,0) pagewidth = w+margin*2 pageheight = h+margin*3 c = canvas.Canvas(filename, pagesize=(pagewidth,pageheight)) table.drawOn(c, margin, pageheight - h - 2*margin) c.setFillColor(black) #choose your font colour c.drawString(margin,pageheight-margin,school_name) c.save()
def tabla(self,pdf,y): #Creamos una tupla de encabezados para neustra tabla encabezados = ('Nombre', 'Apellido', 'Diagnostico', 'Clinica','Tutor','Estado Salud') #Creamos una lista de tuplas que van a contener a las personas detalles = [(p.Paciente_nombre, p.Paciente_apellido, p.Paciente_diagnostico, p.Paciente_clinica,p.Tutor_Padre,p.Estado_salud) for p in Paciente.objects.all()] #Establecemos el tamano de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[95 , 95 , 95 , 95,95,95 ]) #Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle(TableStyle( [ #La primera fila(encabezados) va a estar centrada ('ALIGN',(0,0),(5,0),'CENTER'), ('TEXTCOLOR',(0,0),(5,0),colors.black), #Los bordes de todas las celdas seran de color negro y con un grosor de 1 ('BACKGROUND',(0,0),(5,0),colors.gainsboro), ('GRID', (0, 0), (-1, -1), 1, colors.gray), #El tamano de las letras de cada una de las celdas sera de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ] )) #Establecemos el tamano de la hoja que ocupara la tabla detalle_orden.wrapOn(pdf, 800, 500) #Definimos la coordenada donde se dibujara la tabla detalle_orden.drawOn(pdf, 12,y)
def tabla(self, pdf, y): # Creamos una tupla de encabezados para neustra tabla encabezados = ('username', 'first_name', 'last_name', 'email') # Creamos una lista de tuplas que van a contener a las personas detalles = [(user.username, user.first_name, user.last_name, user.email) for user in User.objects.all()] # Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[3 * cm, 4 * cm, 5 * cm, 5 * cm]) # Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle( TableStyle([ # La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), # Los bordes de todas las celdas serán de color negro # y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), # El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 7), ])) # Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) # Definimos la coordenada donde se dibujará la tabla # 0,75 mas cercano del margen derecho # 7.5 mas cercano del margen TOP detalle_orden.drawOn(pdf, 0.75 * inch, 7.5 * inch)
def tabla(self, pdf, y): #Creamos una tupla de encabezados para nuestra tabla encabezados = ('DNI', 'Nombre', 'Apellidos', 'Email', 'Telefono') #Creamos una lista de tuplas que van a contener a las personas detalles = [(persona.dni, persona.nombre, persona.apellidos, persona.email, persona.telefono) for persona in Asistente.objects.all()] #Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table( [encabezados] + detalles, colWidths=[2 * cm, 2 * cm, 3 * cm, 5 * cm, 3 * cm]) #Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle( TableStyle([ #La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), #Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), #El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ])) #Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) #Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 80, y)
def tradingReport(self, c): title = "DAILY TRADING" c.setFont("Helvetica", 24) c.drawString(50,770, title) c.setFont("Helvetica", 16) c.drawString(50,730, "DATE :") c.drawString(110,730, str(today.year) + "/" + str(today.month) + "/" + str(today.day) ) # DATE c.line(110, 727, 185, 727) c.drawString(300,730, "Today's Performance :") c.line(465, 727, 515, 727) c.drawString(470,730, "4%") # PROFIT value c.drawString(50,680, "Market Analysis") columHeight = [1*cm, 1*cm, 1*cm, 1*cm] t=Table(self._data, 2.5*cm, columHeight) # The size of each cells t.setStyle(TableStyle([('GRID',(0,0),(-1,-1),1,colors.black), ('VALIGN',(0,0),(-1,-1),'TOP')])) t.wrapOn(c, 50,50) t.drawOn(c, 50,550) #Table Location c.drawString(50,500, "Intraday performance of Algorithm1") graph_1 = Image("example.png") graph_1.drawHeight = 6*cm graph_1.drawWidth = 17.5*cm #graph_1.wrapOn(c, 50,20) graph_1.drawOn(c,50,322) c.drawString(50,295, "Intraday performance of Algorithm2") graph_2 = Image("example2.png") graph_2.drawHeight = 6*cm graph_2.drawWidth = 17.5*cm #graph_2.wrapOn(c, 50,20) graph_2.drawOn(c,50,117)
def export_notes(self, request, suffix=''): """ Return an pdf export of user and public notes Returns: response """ res = Response() student = self.__get_current_user() try: timecoded_data_set = self.__list_notes() timecoded_data_array = [] for timecoded_data in timecoded_data_set: timecoded_data_array.append([timecoded_data.seconds, Paragraph(timecoded_data.content.replace('\n','<br />'), ParagraphStyle("Page"))]) res.headerlist = [('Content-type', 'application/pdf'), ('Content-Disposition', 'attachment; filename=%s' % str(self.scope_ids.user_id)+".pdf")] p = canvas.Canvas(res) if (len(timecoded_data_array)>0): table = Table(timecoded_data_array, colWidths=[20, 500]) table.setStyle(TableStyle([('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black)])) table.wrapOn(p, 700, 700) table.drawOn(p, 50, 700) p.showPage() p.save() return res except KNoteList.DoesNotExist: res.status = 404 return res
def tabla1(self,pdf,y): #Creamos una tupla de encabezados para neustra tabla encabezados = ('Fecha', 'Paciente', 'Cantidad', 'Nombre Recipiente') #Creamos una lista de tuplas que van a contener a las personas actual=datetime.now() detalles = [(p.Fecha_apoyo, p.Paciente.Paciente_nombre+" "+ p.Paciente.Paciente_apellido, p.Apoyo, p.Recipiente_nombre) for p in Defunciones.objects.all().select_related('Paciente')] #Establecemos el tamano de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[130 , 130 , 130 , 130 ]) #Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle(TableStyle( [ #La primera fila(encabezados) va a estar centrada ('ALIGN',(0,0),(3,0),'CENTER'), ('TEXTCOLOR',(0,0),(3,0),colors.black), #Los bordes de todas las celdas seran de color negro y con un grosor de 1 ('BACKGROUND',(0,0),(3,0),colors.gainsboro), ('GRID', (0, 0), (-1, -1), 1, colors.gray), #El tamano de las letras de cada una de las celdas sera de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ] )) #Establecemos el tamano de la hoja que ocupara la tabla detalle_orden.wrapOn(pdf, 800, 500) #Definimos la coordenada donde se dibujara la tabla detalle_orden.drawOn(pdf, 35,y)
def tabla1(self,pdf,y): #Creamos una tupla de encabezados para neustra tabla encabezados = ('Nombre', 'Funcion', 'Telefono','Correo') #Creamos una lista de tuplas que van a contener a las persona detalles = [(p.Personal_nombre+" "+p.Personal_apellidos, p.Personal_funcion, p.Personal_tel, p.Personal_correo) for p in Personal.objects.all()] #Establecemos el tamano de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[150 , 100, 100 , 150 ]) #Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle(TableStyle( [ #La primera fila(encabezados) va a estar centrada ('ALIGN',(0,0),(3,0),'CENTER'), ('TEXTCOLOR',(0,0),(3,0),colors.black), #Los bordes de todas las celdas seran de color negro y con un grosor de 1 ('BACKGROUND',(0,0),(3,0),colors.gainsboro), ('GRID', (0, 0), (-1, -1), 1, colors.gray), #El tamano de las letras de cada una de las celdas sera de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ] )) #Establecemos el tamano de la hoja que ocupara la tabla detalle_orden.wrapOn(pdf, 800, 500) #Definimos la coordenada donde se dibujara la tabla detalle_orden.drawOn(pdf, 35,y)
def tabla(self, pdf, y, fInicio, fFinal): encabezados = ('Factura N°', 'Cliente', 'Fecha', 'Total') detalles = [ (factura.numero, factura.cliente.apellidos + ' ' + factura.cliente.nombres, factura.fecha, factura.valorTotal) for factura in Factura.objects.filter(fecha__range=(fInicio, fFinal)) ] detalle_orden = Table([encabezados] + detalles, colWidths=[ 2 * cm, 7 * cm, 6 * cm, 2.5 * cm, ]) detalle_orden.setStyle( TableStyle([ #La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), #Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), #El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ])) #Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) #Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 60, y)
def tabla(self, pdf, y): encabezados = ('Ojo', 'Paciente', 'Codigo', 'Estado', 'Esfera', 'Cilindro', 'Eje', 'Prisma', 'Base', 'Adicion', 'Graduacion', 'Color') detallesIzquierdo = [] detallesDerecho = [] for lente in Lente.objects.all(): detallesIzquierdo.append( ('Izquierdo', lente.paciente.nombrePersona + lente.paciente.apellidoPersona, lente.codigo, lente.estado, lente.esfera, lente.cilindro, lente.eje, lente.prisma, lente.base, lente.adicion, lente.graduacion, lente.color)) detallesIzquierdo.append( ('Derecho', lente.paciente.nombrePersona + lente.paciente.apellidoPersona, '', lente.estado, lente.esferad, lente.cilindrod, lente.ejed, lente.prismad, lente.based, lente.adiciond, lente.graduaciond, lente.colord)) detallesIzquierdo.append( ('', '', '', '', '', '', '', '', '', '', '', '')) detalleOrden = Table([encabezados] + detallesIzquierdo, colWidths=[ 0.7 * inch, 2 * inch, 0.8 * inch, 0.8 * inch, 0.8 * inch, 0.8 * inch, 0.8 * inch, 0.7 * inch, 0.7 * inch, 0.7 * inch, 0.9 * inch, 0.9 * inch ]) detalleOrden.setStyle( TableStyle([ ('ALIGN', (0, 0), (3, 0), 'CENTER'), ('GRID', (0, 0), (-1, -1), 1, colors.black), ('FONTSIZE', (0, 0), (-1, -1), 10), ])) detalleOrden.wrapOn(pdf, 800, 600) detalleOrden.drawOn(pdf, 11, y)
def tabla(pdf, y, clientes): # Creamos una tupla de encabezados para neustra tabla encabezados = ('DNI', 'Nombres', 'Apellidos', 'Direccion') # Creamos una lista de tuplas que van a contener a las personas #clientes = Cliente.objects.habilitados().filter(nombres='Karina') print("TABLA", clientes) detalles = [(cliente.dniCuit, cliente.nombres, cliente.apellidos, cliente.direccion) for cliente in clientes] # Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles, colWidths=[2 * cm, 5 * cm, 5 * cm, 7 * cm]) # Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle( TableStyle([ # La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (3, 0), 'CENTER'), # Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), # El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ])) # Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) # Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 40, y)
def category_overview_table(c, category, h, w): my_codes = '' if category == 'clothing': my_codes = clothing elif category == 'transport': my_codes = transport elif category == 'insurance': my_codes = insurance elif category == 'food': my_codes = food elif category == 'medical and dental': my_codes = medical_and_dental elif category == 'housing': my_codes = housing elif category == 'utilities': my_codes = utilities elif category == 'education': my_codes = education elif category == 'gifts': my_codes = gifts elif category == 'entertainment': my_codes = entertainment width = 400 height = 100 my_data = [['Category', 'Previous', 'Current']] for x in my_codes: my_data.append([ x.replace('_', ' ').title(), f'${round(data.month_code(x.lower(),month-1,year),2)}', f'${round(data.month_code(x.lower(),month,year),2)}' ]) f = Table(my_data, style=[('LINEBELOW', (0, 0), (-1, -1), 1, colors.black)]) f.wrapOn(c, width, height) f.drawOn(c, h, w)
def generate_pdf(list, contest_name, alias, reg_number): width, height = A4 styles = getSampleStyleSheet() styles.add(ParagraphStyle(name='Yandex', alignment=TA_JUSTIFY, fontName='Yandex', fontSize=12)) styles.add(ParagraphStyle(name='YandexBold', alignment=TA_JUSTIFY, fontName='YandexBold', fontSize=12)) pdfmetrics.registerFont( TTFont('Yandex', os.path.join(settings.STATIC_ROOT, 'fonts', 'YandexSansDisplay-Regular.ttf'), 'YandexBold', os.path.join(settings.STATIC_ROOT, 'fonts', 'static/YandexSansDisplay-Bold.ttf') ) ) normal_style = styles['Yandex'] bold_style = styles['Yandex'] data = [[Paragraph(list[i][0], normal_style), Paragraph(list[i][1], normal_style)] for i in range(0, len(list))] table = Table(data, colWidths=[4 * cm, 14 * cm]) table.setStyle(TableStyle([ ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ])) c = canvas.Canvas(os.path.join(settings.MEDIA_ROOT, 'pdf', alias, f'{reg_number}.pdf'), pagesize=A4) c.setFont('Yandex', 20) c.drawString(20, 810, contest_name) c.drawImage(os.path.join(settings.BARCODE_MEDIA_ROOT, f'{reg_number}.png'), 340, 715) width2, height2 = table.wrapOn(c, width, height) table.drawOn(c, 1.2 * cm, A4[1] - height2 - 125, 0) c.save()
def tabla_agente(self, pdf, agentes_venta, nombres_calificaciones): # Creamos una tupla de encabezados para nuestra tabla encabezados = ('Agente', 'Ventas') encabezados = encabezados + nombres_calificaciones # Creamos una lista de tuplas que va a contener los datos de los agentes detalles = [] for agente in agentes_venta.values(): datos_agente = [agente['nombre'], agente['total_gestionados']] datos_agente += agente['totales_calificaciones'].values() detalles.append(tuple(datos_agente)) # Establecemos el tamaño de cada una de las columnas de la tabla detalle_orden = Table([encabezados] + detalles) # Aplicamos estilos a las celdas de la tabla detalle_orden.setStyle( TableStyle([ # La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (1, 0), 'CENTER'), ('GRID', (0, 0), (-1, -1), 1, colors.black), # El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 7), ])) pdf.setFont("Helvetica", 10) # Establecemos el tamaño de la hoja que ocupará la tabla he, we = detalle_orden.wrapOn(pdf, 0, 0) pdf.setPageSize((he + 300, we + 300)) # Definimos la coordenada donde se dibujará la tabla # 0,75 mas cercano del margen derecho # 6.75 mas cercano del margen TOP pdf.setFont("Helvetica", 10) pdf.drawString(100, we + 200, _("Calificaciones agentes")) detalle_orden.drawOn(pdf, 100, we + 150)
def print_band_list_pdf(band, canvas): style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), "TOP"), ('FONT', (0, 0), (-1, 0), "Helvetica-Bold", 14), ('FONT', (0, 1), (-1, 1), "Helvetica", 14), ('ALIGN', (-1, 0), (-1, -1), "RIGHT"), ]) # split models in 2 columns col = 1 col1 = [] col2 = [] for model in band.model_list: if col == 1: col1.append(create_model_table(model)) col = 2 else: col2.append(create_model_table(model)) col = 1 # create table with header (2 rows) and the 2 columns of models data = [[band.name, str(band.total_cost) + "pts"], [ str(len(band.model_list)) + " models", "Cost of personalities: " + str(band.personalities_cost) + "pts" ], [col1, col2]] table = Table(data, colWidths=9 * cm, rowHeights=[1 * cm, 1.5 * cm, 24 * cm]) table.setStyle(style) # draw table table.wrap(18 * cm, 26 * cm) table.drawOn(canvas, 1.5 * cm, 2 * cm) # pass page canvas.showPage()
def drawResume(self, canvas, doc): # First table style = ParagraphStyle(name='Style') style.fontName = 'Helvetica-Bold' style.fontSize = 10 style.alignment = TA_CENTER data = [ [Paragraph('INFORME ACADÉMICO DEL %s' % self.time.upper(), style)], ['SEDE PRINCIPAL BACHILLERATO'] ] LIST_STYLE = TableStyle([ ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('BOX', (0,0), (-1,-1), 0.25, colors.black), ('TEXTCOLOR',(0,0),(-1,-1),colors.black), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('BACKGROUND', (0, 0), (-1, -1), colors.gray), ('FONTSIZE', (-1, -1), (-1, -1), 8), ('VALIGN',(0,0),(-1,-1),'MIDDLE') ]) table = Table(data, colWidths='*', rowHeights=0.2 * inch, style=LIST_STYLE) w, h = table.wrap(doc.width, 0) # Second table data = [ [self.getResumeFirstColum(), self.getSecondColum(), self.getThirdColum(), self.getFourthColum()] ] LIST_STYLE = TableStyle([ ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('BACKGROUND', (0, 0), (-1, -1), colors.gray), ('TOPPADDING', (0, 0), (-1, -1), 0), ('BOTTOMPADDING', (0, 0), (-1, -1), 0), ('LEFTPADDING', (0, 0), (-1, -1), 0), ('RIGHTPADDING', (0, 0), (-1, -1), 0), ('FONTSIZE', (0, 0), (-1, -1), 8), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN',(0, 0),(-1, -1),'TOP') ]) colWidths = [3*inch, 1.2*inch, 1.4*inch, '*'] table2 = Table(data, colWidths=colWidths, style=LIST_STYLE) w, h = table2.wrap(doc.width, 0) wrapper_style = TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN',(0, 0),(-1, -1),'MIDDLE'), ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('TOPPADDING', (0, 0), (-1, -1), 0), ('BOTTOMPADDING', (0, 0), (-1, -1), 0), ('LEFTPADDING', (0, 0), (-1, -1), 0), ('RIGHTPADDING', (0, 0), (-1, -1), 0), ]) data = [ [table], [table2] ] wrapper = Table(data, colWidths='*', style=wrapper_style) w, h = wrapper.wrap(doc.width, 0) wrapper.drawOn(canvas, doc.leftMargin, doc.height + 80)
def get(self, request, *args, **kwargs): sales_invoice_id = kwargs['sales_invoice_id'] sales_invoice = SalesInvoice.objects.get(id=sales_invoice_id) sales = sales_invoice.sales response = HttpResponse(content_type='application/pdf') p = canvas.Canvas(response, pagesize=(1000, 1000)) status_code = 200 y=850 data=[['', sales_invoice.date.strftime('%d-%m-%Y'), '', sales_invoice.invoice_no]] table = Table(data, colWidths=[0, 100, 650, 100], rowHeights=40) table.wrapOn(p, 200, 400) table.drawOn(p,100, 750) quotation = sales_invoice.quotation data=[['', '', sales_invoice.delivery_note.lpo_number if sales_invoice.delivery_note else '' ]] table = Table(data, colWidths=[450, 60, 100], rowHeights=40) table.wrapOn(p, 200, 400) table.drawOn(p,100, 700) data=[['', '', sales_invoice.date.strftime('%d-%m-%Y')]] table = Table(data, colWidths=[450, 30, 100], rowHeights=40) table.wrapOn(p, 200, 400) table.drawOn(p,100, 650) if sales_invoice.quotation or sales_invoice.delivery_note: data=[['', '', sales_invoice.delivery_note.delivery_note_number if sales_invoice.delivery_note else sales_invoice.quotation.reference_id]] table = Table(data, colWidths=[450, 30, 100], rowHeights=40) table.wrapOn(p, 200, 400) table.drawOn(p,150, 620) x=600 i = 0 i = i + 1 for s_item in sales.salesitem_set.all(): x=x-40 item_price = s_item.item.inventory_set.all()[0].selling_price final_price = item_price+(item_price*(s_item.item.tax/100)) data1=[[i, s_item.item.code, s_item.item.name, s_item.quantity_sold, s_item.item.uom.uom, s_item.item.inventory_set.all()[0].unit_price, (final_price*s_item.quantity_sold)]] table = Table(data1, colWidths=[50, 100, 400, 70, 90, 100, 50], rowHeights=40) table.wrapOn(p, 200, 400) table.drawOn(p,50,x) i = i + 1 p.showPage() p.save() return response
def detalle_iva(p, detalle): table = Table(detalle, [5*cm, 3*cm]) table.setStyle([ ('FONT', (0, 0), (-1, -1), font_bld), ('LEADING', (0, 0), (-1, -1), 4), ('ALIGN', (0, 0), (-1, -1), 'RIGHT'), ('FONTSIZE',(0,0),(-1,-1),9), ]) table.wrapOn(p, width, height) table.drawOn(p, width - margin - 8*cm, 55*mm)
def createDocument(self): """""" for page in self.e.findall("page"): for image in page.findall("image"): logo = Image(image.get("src")) logo.drawHeight = int(image.get("height")) logo.drawWidth = int(image.get("width")) logo.wrapOn(self.c, self.width, self.height) logo.drawOn(self.c, *self.coord(int(image.get("left")),int(image.get("top"))+int(image.get("height")) )) for text in page.findall("text"): if len(text.getchildren())==0: font = self.fonts[text.get("font")] style = ParagraphStyle( 'default', fontName="Arial", leading=int(font["size"])+7, fontSize=font["size"], textColor=font["color"], backColor=font["background"], firstLineIndent=int(font["indent"]), ) self.createParagraph(text.text, int(text.get("left")), (int(text.get("top"))+int(text.get("height"))),style) else: innerText = ElementTree.tostring(text.getchildren()[0]) font = self.fonts[text.get("font")] style = ParagraphStyle( 'default', fontName="Arial", leading=int(font["size"])+7, fontSize=font["size"], textColor=font["color"], backColor=font["background"], firstLineIndent=int(font["indent"]), ) self.createParagraph(innerText, int(text.get("left")), (int(text.get("top"))+int(text.get("height"))),style) for line in page.findall("line"): self.c.setDash(int(line.get("on")),int(line.get("off"))) self.c.setStrokeColor(line.get("color")) self.c.line(int(line.get("x1")),self.height-int(line.get("y1")),int(line.get("x2")),self.height-int(line.get("y2"))) for table in page.findall("table"): self.c.setDash(1,0) tabDat = dataDictionary[table.get("data")] if table.get("widths"): colWidths = [float(width) for width in table.get("widths").split(",")] else: colWidths = float(table.get("width"))/len(tabDat[0]) if table.get("heights"): rowHeights = [float(height) for height in table.get("heights").split(",")] else: rowHeights = float(table.get("height"))/len(tabDat) t = Table(tabDat,colWidths,rowHeights,style=tableStyles[table.get("data")]) t.wrapOn(self.c, self.width, self.height) t.drawOn(self.c, *self.coord(int(table.get("left")), int(table.get("top"))+int(table.get("height")))) self.c.showPage()
def get(self, request, *args, **kwargs): invoice_id = kwargs['invoice_id'] sales = Sales.objects.get(id=invoice_id) response = HttpResponse(content_type='application/pdf') p = canvas.Canvas(response, pagesize=(1000, 1300)) y = 1200 p = header(p, y) p = invoice_body_layout(p, y, sales) total_amount = 0 y1 = y - 400 for s_item in sales.salesitem_set.all(): data=[[Paragraph(s_item.item.name, para_style)]] if y1 <= 170: y1 = y - 400 p.showPage() p = header(p, y) p = invoice_body_layout(p, y, sales) p.drawString(60, y1, str(s_item.quantity_sold)) p.drawString(190, y1, str(s_item.item.code)) # p.drawString(300, y1, str(item_name)) table = Table(data, colWidths=[385], rowHeights=100, style=style) table.wrapOn(p, 200, 400) table.drawOn(p, 300, y1-10) p.drawString(710, y1, str(s_item.selling_price)) p.drawString(850, y1, str(s_item.net_amount)) total_amount = total_amount + s_item.net_amount y1 = y1 - 50 # total box start p.line(50, y - 1020, 950, y - 1020) p.line(650, y - 980, 650, y - 1020) p.line(50, y - 980, 50, y - 1020) p.line(950, y - 980, 950, y - 1020) # total box end p.drawString(820, y - 1010, 'DHS') p.drawString(850, y - 1010, str(total_amount)) p.setFont("Helvetica-Bold", 30) p.drawString(660, y - 1010, 'Total') p = footer(p, y) # Item Box end p.showPage() p.save() return response
def drawHeader(self, canvas, doc): logo_path = os.path.join(settings.STATIC_ROOT, 'assets/escudo.jpg') logo = Image(logo_path, width=0.7*inch, height=0.7*inch) title_style = ParagraphStyle(name='Title') title_style.fontName = 'Helvetica-Bold' title_style.fontSize = 11 title_style.alignment = TA_CENTER subtitle_style = ParagraphStyle(name='Subtitle') subtitle_style.fontName = 'Helvetica' subtitle_style.fontSize = 8 subtitle_style.alignment = TA_CENTER subtitle2_style = ParagraphStyle(name='Subtitle2') subtitle2_style.fontName = 'Helvetica' subtitle2_style.fontSize = 8 subtitle2_style.alignment = TA_CENTER subtitle3_style = ParagraphStyle(name='Subtitle3') subtitle3_style.fontName = 'Helvetica' subtitle3_style.fontSize = 8 subtitle3_style.alignment = TA_CENTER subtitle4_style = ParagraphStyle(name='Subtitle4') subtitle4_style.fontName = 'Helvetica' subtitle4_style.fontSize = 8 subtitle4_style.alignment = TA_CENTER data = [ [logo, [ Paragraph('INSTITUCION EDUCATIVA AUGUSTO ESPINOSA VALDERRAMA', title_style), Paragraph('Reconocido oficialmente por la Secretaría de Educación Municipal de Montería mediante resolución 0751 de junio 12 de 2009', subtitle_style), Paragraph('Corregimiento Santa Clara – Municipio de Montería', subtitle2_style), Paragraph('Tel. 7905949 Código DANE 223001005404', subtitle3_style), Paragraph('Nit 812007342', subtitle4_style) ] ] ] LIST_STYLE = TableStyle([ # ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), # ('BOX', (0,0), (-1,-1), 0.25, colors.black), ('TEXTCOLOR',(0,0),(-1,-1),colors.black), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('FONTSIZE', (-1, -1), (-1, -1), 8), ('VALIGN',(0,0),(-1,-1),'MIDDLE'), ('TOPPADDING', (0, 0), (-1, -1), 0), ('BOTTOMPADDING', (0, 0), (-1, -1), 0), ('LEFTPADDING', (0, 0), (-1, -1), 0), ('RIGHTPADDING', (0, 0), (-1, -1), 0), ]) colWidths = [0.7*inch, '*'] table = Table(data, colWidths=colWidths, style=LIST_STYLE) w, h = table.wrap(doc.width, 0) table.drawOn(canvas, doc.leftMargin + 5, doc.height + 150)
def drawConventions(self, canvas, doc): column_style = TableStyle([ ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('TOPPADDING', (0, 0), (-1, -1), 6), ('BACKGROUND', (0, 0), (-1, -1), colors.gray), ('FONTSIZE', (0, 0), (-1, -1), 8), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN',(0, 0),(-1, -1),'MIDDLE') ]) style = ParagraphStyle(name='Style') style.fontName = 'Helvetica-Bold' style.fontSize = 7 style.alignment = TA_CENTER data = [ [Paragraph('CONVENCIONES ACERCA DE LA EVALUACIÓN POR DESEMPEÑOS SEGUN DECRETO 1290 DE 2009', style)] ] table = Table(data, colWidths='*', rowHeights=0.15*inch, style=column_style) column_style = TableStyle([ ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('TOPPADDING', (0, 0), (-1, -1), 5), ('BACKGROUND', (0, 0), (-1, -1), '#CCCCCC'), ('FONTSIZE', (0, 0), (-1, -1), 7), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN',(0, 0),(-1, -1),'MIDDLE') ]) data = [ ['DESEMPEÑO BAJO: 1.0 a 6.4', 'DESEMPEÑO BASICO: 6.5 a 7.9', 'DESEMPEÑO ALTO: 8.0 a 9.4', 'DESEMPEÑO SUPERIOR: 9.5 a 10'] ] table2 = Table(data, colWidths='*', rowHeights=0.15*inch, style=column_style) wrapper_style = TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('VALIGN',(0, 0),(-1, -1),'MIDDLE'), ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('TOPPADDING', (0, 0), (-1, -1), 0), ('BOTTOMPADDING', (0, 0), (-1, -1), 0), ('LEFTPADDING', (0, 0), (-1, -1), 0), ('RIGHTPADDING', (0, 0), (-1, -1), 0), ]) data = [ [table], [table2] ] wrapper = Table(data, colWidths='*', style=wrapper_style) w, h = wrapper.wrap(doc.width, 0) wrapper.drawOn(canvas, doc.leftMargin, doc.height + 50)
def dibujar_tabla(c, data, high): width, height = letter # ancho y alto de la hoja table = Table(data, colWidths=[2.3 * cm, 1.8 * cm, 4.4 * cm, 2 * cm, 2 * cm, 1.8 * cm, 2 * cm, 2.1 * cm, 1.3 * cm]) table.setStyle(TableStyle([ ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (-3, 0), (-1, -1), 'RIGHT'), ('ALIGN', (3, 0), (-4, -1), 'CENTER'), # ('TEXTCOLOR',(-3,1),(-1,-1),colors.red), ])) # pdf size table.wrapOn(c, width, height) table.drawOn(c, 30, high)
def frameDetalle(pdf, idOrden): f = Frame(10,55, 570, 437) f.drawBoundary(pdf) encabezado = ('CANT.', 'MATERIAL') # Detalle de tabla con 20 renglones # Recorre PedidoItem (linea por producto) detalle = [] for qs in PedidoItem.objects.filter(pedido=idOrden).order_by('pk'): descripcion = qs.producto.descripcion + ' ' + qs.sAclaracion if (len(descripcion) <= 102): detalle += [(qs.sCantidad +' '+ qs.unidades.descripcionCorta, descripcion)] else: detalle += [(qs.sCantidad +' '+ qs.unidades.descripcionCorta, descripcion[:102])] if (len(descripcion[102:240]) <= 102): detalle += [('', descripcion[102:240])] else: detalle += [('', descripcion[102:240])] detalle += [('', descripcion[240:300])] # Recorre PedidoItemConcepto (linea por concepto) for qs in PedidoItemConcepto.objects.filter(pedido=idOrden).order_by('pk'): descripcion = qs.sDescripcion if (len(descripcion) <= 102): detalle += [(qs.sCantidad +' '+ qs.unidades.descripcionCorta, descripcion)] else: detalle += [(qs.sCantidad +' '+ qs.unidades.descripcionCorta, descripcion[:102])] if (len(descripcion[102:240]) <= 102): detalle += [('', descripcion[102:240])] else: detalle += [('', descripcion[102:240])] detalle += [('', descripcion[240:300])] while len(detalle) < 23: detalle = detalle + [('', '')] detalle_orden = Table([encabezado] + detalle, colWidths=[2 * cm, 17.95 * cm]) detalle_orden.setStyle(TableStyle( [ # La primera fila(encabezados) va a estar centrada ('ALIGN', (0, 0), (1, 0), 'CENTER'), # Los bordes de todas las celdas serán de color negro y con un grosor de 1 ('GRID', (0, 0), (-1, -1), 1, colors.black), # El tamaño de las letras de cada una de las celdas será de 10 ('FONTSIZE', (0, 0), (-1, -1), 10), ] )) # Establecemos el tamaño de la hoja que ocupará la tabla detalle_orden.wrapOn(pdf, 800, 600) # Definimos la coordenada donde se dibujará la tabla detalle_orden.drawOn(pdf, 12, 57)
def header_building(canvas, doc, styles): a = Image(settings.LOGO_INSTITUTION_URL, width=15*mm, height=20*mm) p = Paragraph('''<para align=center> <font size=16>%s</font> </para>''' % (_('documents')), styles["Normal"]) data_header = [[a, '%s' % _('ucl_denom_location'), p], ] t_header = Table(data_header, [30*mm, 100*mm, 50*mm]) t_header.setStyle(TableStyle([])) w, h = t_header.wrap(doc.width, doc.topMargin) t_header.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - h)
def _drawTable(self, canvas, data): cellWidth = getCellWidth(len(self.objectList)) table = Table(data, cellWidth) table.setStyle(TableStyle([ ('BOX', (0,0), (-1,-1), 0.25, colors.black), ('ALIGNMENT', (0,1), (-1,2), 'CENTER'), ('GRID', (0,1), (-1,-1), 0.25, colors.black), ])) table.wrapOn(canvas, 10, 10) leftTopX, leftTopY = (30, 750) table.drawOn(canvas, leftTopX, leftTopY)
def draw_invoice_detail(canvas, invoice): invoice_detail = [[ u'Fattura numero %s' % (invoice.id_fattura), '', u'Bergamo, li %s' % invoice.data_fattura.strftime("%d-%m-%Y"), ], [] ] table = Table(invoice_detail, colWidths=[3.5 * cm, 10 * cm, 3.5 * cm]) table.setStyle([ ('FONT', (0, 0), (-1, -1), 'Helvetica-Oblique'), ('FONTSIZE', (0, 0), (-1, -1), 8), ('TEXTCOLOR', (0, 0), (-1, -1), (0.2, 0.2, 0.2)), ('ALIGN', (0, 0), (0, 0), 'LEFT'), ('ALIGN', (-1, -1), (-1, -1), 'RIGHT'), ('LINEBELOW', (0, 0), (0, 0), 0.5, (0.7, 0.7, 0.7)), ('LINEBELOW', (2, 0), (2, 0), 0.5, (0.7, 0.7, 0.7)), ]) tw, th, = table.wrapOn(canvas, 2 * cm, 19 * cm) table.drawOn(canvas, 2 * cm, -5.5 * cm) cf='' vat='' if invoice.cliente_id.persona_giuridica: vat = 'Partita iva : %s' % invoice.cliente_id.partita_iva else: if invoice.cliente_id.partita_iva: vat = 'Partita iva : %s' % invoice.cliente_id.partita_iva cf = 'Codice fiscale : %s' % invoice.cliente_id.codice_fiscale else: cf = 'Codice fiscale : %s' % invoice.cliente_id.codice_fiscale customer_detail_list = ( u'Spett.le', invoice.cliente_id.ragione_sociale, invoice.cliente_id.indirizzo, invoice.cliente_id.cap + ' ' + invoice.cliente_id.citta + ' ' + invoice.cliente_id.provincia, vat, cf) customer_detail=[] for i in customer_detail_list: customer_detail.append([i]) table = Table(customer_detail, colWidths=[6 * cm], rowHeights=[12, 12, 12, 12, 12, 12]) table.setStyle([ ('FONT', (0, 0), (-1, -1), 'Helvetica-Oblique'), ('FONTSIZE', (0, 0), (-1, -1), 8), ('TEXTCOLOR', (0, 0), (-1, -1), (0.2, 0.2, 0.2)), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ]) tw, th, = table.wrapOn(canvas, 2 * cm, 19 * cm) table.drawOn(canvas, 13.7 * cm, -8 * cm)