def __init__(self, report: InterestTransferListReport, year: int, today: str): self.buffer = io.BytesIO() story = [] styles = getSampleStyleSheet() styleH1 = styles['Heading2'] styleH2 = styles['Heading3'] styleB = copy.deepcopy(styles['Normal']) styleB.spaceAfter = 0.1*cm styleB.fontName = 'Helvetica-Bold' doc = SimpleDocTemplate(self.buffer, pagesize=A4) doc.leftMargin = 1*cm doc.rightMargin = 1*cm doc.topMargin = 1*cm doc.bottomMargin = 1*cm story.append(Paragraph(f"Zinsen für das Jahr {year}", styleH1)) for data in report.per_contract_data: story.append(Paragraph(f"Direktkreditvertrag Nr. {data.contract.number}, {data.contract.contact}", styleH2)) story.append(Paragraph(f"Kontostand {today}: {euro(data.contract.balance)}", styleB)) story.append(Paragraph(f"Zinsberechung {year}:", styleB)) story.append(interest_year_table(data.interest_rows)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph(f"Zinsen {year}: {euro(data.interest)}", styleB)) story.append(Spacer(1, 0.5*cm)) story.append(Paragraph(f"SUMME ZINSEN {year}: {euro(report.sum_interest)}", styleB)) doc.build(story) self.buffer.seek(0)
def create_pdf(self): pdf = StringIO.StringIO() doc = SimpleDocTemplate(pdf) doc.leftMargin = 31 doc.rightMargin = 31 doc.topMargin = 390 doc.bottomMargin = 110 story = [] order_items = [["Artikelnr.", "Name", "Menge", "Preis", "Summe"]] for item in self.order.items.all(): amount = str(item.amount) + " " + item.product.unit price = currency(item.product_price_gross) total = currency(item.price_gross) order_items.append( [item.product.sku, item.product_name, amount, price, total]) order_items_table = Table(order_items, (80, 238, 60, 70, 70)) order_items_table.setStyle(dn_order_items_style) story.append(order_items_table) story.append(Spacer(1, 40)) # END story.append(Paragraph(getattr(settings, "DN_END"), styleN)) doc.build(story, onFirstPage=self.page, onLaterPages=self.page) pdf.seek(0) return pdf
def create_pdf(self): pdf = StringIO.StringIO() doc = SimpleDocTemplate(pdf) doc.leftMargin=31 doc.rightMargin=31 doc.topMargin=390 doc.bottomMargin=110 story = [] order_items = [["Artikelnr.", "Name", "Menge", "Preis", "Summe"]] for item in self.order.items.all(): amount = str(item.amount) + " " + item.product.unit price = currency(item.product_price_gross) total = currency(item.price_gross) order_items.append([item.product.sku, item.product_name, amount, price, total]) order_items_table = Table(order_items, (80, 238, 60, 70, 70)) order_items_table.setStyle(dn_order_items_style) story.append(order_items_table) story.append(Spacer(1, 40)) # END story.append(Paragraph(getattr(settings, "DN_END"), styleN)) doc.build(story, onFirstPage=self.page, onLaterPages=self.page) pdf.seek(0) return pdf
def generatepdf(ipblock, zip_files_path, reportspath): combined_files(zip_files_path, reportspath) renu_report(ipblock, zip_files_path, reportspath) company_reports(ipblock, zip_files_path, reportspath) os.remove(reportspath + '\AllFiles.csv') readfiles = glob.glob(os.path.join(reportspath, "*.csv")) for filename in readfiles: if "combined_files" in filename: os.remove(reportspath + '\combined_files.csv') filena, file_extension = os.path.splitext(filename) filenam = str(filena.split("\\")[-1]) # Content. line1 = "Vulnerability Report for " content = line1 + filenam content2 = line1 + filenam + " continued ... " def logo(canvas, doc): logo_img = 'logo.png' canvas.drawImage(logo_img, 300, 730) canvas.drawString(100, 715, content) def logo2(canvas, doc): logo_img = 'logo.png' canvas.drawImage(logo_img, 300, 730) canvas.drawString(100, 715, content2) pdfReportPages = str(filena) + '.pdf' doc = SimpleDocTemplate(pdfReportPages, pagesize=letter) elements = [] col1 = "TIMESTAMP" col2 = "HOST" col3 = "NAME OF VULNERABILITY" data = [[col1, col2, col3]] with open(filename) as infile: for line in infile: reader = csv.reader(infile) data.extend(list(reader)) tableThatSplitsOverPages = Table(data, [5 * cm, 6 * cm, 5 * cm], repeatRows=1) tableThatSplitsOverPages.hAlign = 'LEFT' tblStyle = TableStyle([ ('TEXTCOLOR', (0, 0), (-1, -1), colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('LINEBELOW', (0, 0), (-1, -1), 1, colors.black), ('INNERGRID', (0, 0), (-1, -1), 1.5, colors.black), ('BOX', (0, 0), (-1, -1), 1.5, colors.black) ]) tblStyle.add('BACKGROUND', (0, 0), (-1, -1), colors.lightblue) tblStyle.add('BACKGROUND', (0, 1), (-1, -1), colors.white) tableThatSplitsOverPages.setStyle(tblStyle) elements.append(tableThatSplitsOverPages) doc.topMargin = 1.3 * inch doc.build(elements, onFirstPage=logo, onLaterPages=logo2) del data[:] os.remove(filename)
def genera_lettera(citazione): path_file = '%s/lettere/lett_%s%s.pdf' % (settings.DOCDIR, citazione['id_frase'], citazione['canzone']) row = len(citazione['testo'].split(''' ''')) print(citazione['canzone']) size = 6 if row <80 else 4 size = 0 if row < 35: size = 10 elif row < 55: size = 8 elif row < 60: size = 6 else: size = 4 size = int(6 + (100/row)) size = size if row < 80 else 6 size = 10 if row < 38 else size #citazione['autore'] = ' righe %s %%s' % row % size tabella_testo = [ [ par_nero("""{canzone}<br/><br/>""".format(**citazione), font=12, align=TA_CENTER, fontName='papyrus') ], [ #par_nero("{testo}".format(**citazione), font=size, lead=size, align=TA_CENTER, fontName='Times-BoldItalic') par_nero("{testo}".format(**citazione), font=size, lead=size, align=TA_CENTER, fontName='papyrus') ], [ #par_nero("{autore}".format(**citazione), font=8, align=TA_RIGHT) par_nero("{autore}".format(**citazione), font=8, align=TA_RIGHT, fontName='papyrus') ] ] style_row = TableStyle([]) #style_row.add('LINEABOVE', (0, 0), (-1, -1), 0.25, colors.grey) #style_row.add('LINEBELOW', (0, 0), (-1, -1), 0.25, colors.grey) #style_row.add('LINEAFTER', (0, 0), (-1, -1), 0.25, colors.grey) #style_row.add('LINEBEFORE', (0, 0), (-1, -1), 0.25, colors.grey) table = Table(tabella_testo, colWidths=12 * units.cm, style=style_row) doc = SimpleDocTemplate(path_file, pagesize=(13*units.cm, 21*units.cm)) margin_top = 0.5 if row > 60 else (90/row) doc.topMargin = units.cm * margin_top doc.bottomMargin = 0.5 *units.cm doc.build([table])
def create_pdf(self): pdf = StringIO.StringIO() doc = SimpleDocTemplate(pdf) doc.leftMargin=31 doc.rightMargin=31 doc.topMargin=390 doc.bottomMargin=110 story = [] order_items = [["Artikelnr.", "Name", "Menge", "Preis", "Summe"]] for item in self.order.items.all(): # Amount amount = str(item.amount) if item.product.unit: amount += " " + item.product.unit if item.product.active_packing_unit: amount += "\n(" + str(packages(item)) + " " + item.product.packing_unit_unit + ")" # Name item_name = item.product_name for property in item.product.get_displayed_properties(): item_name += "\n" + property["title"] + ": " + property["value"] + " " + property["unit"] for property in item.product.get_variant_properties(): item_name += "\n" + property["title"] + ": " + property["value"] + " " + property["unit"] if item.product.is_configurable_product(): for property in item.get_properties(): item_name += "\n" + property["title"] + ": " + property["value"] + property["unit"] + " " + property["price"] price = currency(item.product_price_gross) if item.product.price_unit: price += " / " + item.product.price_unit total = currency(item.price_gross) order_items.append([item.product.sku, item_name, amount, price, total]) if self.order.voucher_number: order_items.append(["", "Voucher", "1", currency(self.order.voucher_price), currency(self.order.voucher_price)]) order_items.append(["", "Versandart (" + self.order.shipping_method.name + ")", "1", currency(self.order.shipping_price), currency(self.order.shipping_price)]) order_items.append(["", "Zahlungsweise (" + self.order.payment_method.name + ")", "1", currency(self.order.payment_price), currency(self.order.payment_price)]) order_items.append(["", "", "", "Summe", currency(self.order.price)]) order_items.append(["", "", "", "Inkl. MwSt", currency(self.order.tax)]) order_items_table = Table(order_items, (80, 238, 60, 70, 70)) order_items_table.setStyle(in_order_items_style) story.append(order_items_table) story.append(Spacer(1, 40)) # END story.append(Paragraph(getattr(settings, "IN_END"), styleN)) doc.build(story, onFirstPage=self.page, onLaterPages=self.page) pdf.seek(0) return pdf
def getDocument(filename): """Returns a ReportLab Document with the appropriate margins set.""" doc = SimpleDocTemplate(filename) doc.pagesize = (PAGE_WIDTH, PAGE_HEIGHT) doc.leftMargin = doc.rightMargin = \ doc.bottomMargin = inch * 0.5 doc.topMargin = inch return doc
def start_pdf(mdata): global doc, elements, dwidth, dheight pdf_file = os.path.join(PDF_DIR, mdata['title'] + '.pdf') doc = SimpleDocTemplate(pdf_file, pagesize=letter) elements = [] dwidth, dheight = letter # margins doc.topMargin = TOP_MARGIN doc.leftMargin = LEFT_MARGIN doc.bottomMargin = TOP_MARGIN doc.rightMargin = LEFT_MARGIN
def get_document(args, rightMargin=2.5*mm, leftMargin = 2.5*mm, topMargin = 2.5*mm, bottomMargin = 2.5*mm): save_path = f'{args.title}.pdf' doc = SimpleDocTemplate(save_path) doc.title = args.title doc.rightMargin = rightMargin doc.leftMargin = leftMargin doc.topMargin = topMargin doc.bottomMargin = bottomMargin doc.width = A4[0] - (doc.rightMargin + doc.leftMargin) doc.height = A4[1] - (doc.topMargin + doc.bottomMargin) return doc
def go(): doc = SimpleDocTemplate(f'cv_{LANGUAGE}.pdf') doc.leftMargin = LEFT_BAR + LEFT_BAR_MARGIN doc.rightMargin = 20 doc.topMargin = 0.5 * cm Story = [] style = styles['Normal'] style.__dict__['justifyBreaks'] = 0 style.__dict__['autoLeading'] = 'max' style.__dict__['alignment'] = 4 style.__dict__['spaceAfter'] = 6 style.refresh() for entry in parsedCV: p = Paragraph(entry, style) Story.append(p) #Story.append(Spacer(1,2*cm)) doc.build(Story, onFirstPage=firstPage, onLaterPages=laterPages)
def generar_etiquetas(file_output, lista_productos, page_renglones, page_columnas, start_position="a1"): etiquetas = [] etiquetas_x_hoja = page_renglones * page_columnas doc = SimpleDocTemplate(file_output, pagesize=letter) doc.topMargin = 1.1 * cm doc.bottomMargin = 0 doc.rightMargin = 3.0 * cm # container for the 'Flowable' objects elements = [] cantidad_celdas_vacias = ((ord(start_position[0]) - ord('a')) * 3) + ( (ord(start_position[1]) - ord('0')) - 1) etiquetas = etiquetas + [None for _ in range(cantidad_celdas_vacias)] for producto in lista_productos: etiquetas = etiquetas + [ producto.copy() for _ in range(producto['cantidad']) ] while len(etiquetas) >= etiquetas_x_hoja: pagina = generate_page_pdf(etiquetas[0:etiquetas_x_hoja], page_columnas) elements.append(pagina) elements.append(PageBreak()) print "tamaño buffer etiquetas ", len( etiquetas[0:etiquetas_x_hoja]) del etiquetas[0:etiquetas_x_hoja] if len(etiquetas) > 0: etiquetas = etiquetas + [ None for _ in range(etiquetas_x_hoja - len(etiquetas)) ] pagina = generate_page_pdf(etiquetas[0:etiquetas_x_hoja], page_columnas) elements.append(pagina) # write the document to disk doc.build(elements) return etiquetas
def pdf_demo_12(file): doc = SimpleDocTemplate(file) doc.topMargin = 30 * mm story = [Spacer(1, 70 * mm)] data = invoice_data_unicode_numbers() t = Table(data, colWidths=[25 * mm, 25 * mm, 25 * mm, 55 * mm, 30 * mm, 30 * mm], repeatRows=1) t.setStyle([ ('LINEABOVE', (0, 0), (-1, 0), 2, (0.5, 0.5, 1.0)), ('LINEBELOW', (0, 0), (-1, 0), 2, (0.5, 0.5, 1.0)), ('LINEBELOW', (0, -2), (-1, -1), 2, (0.5, 0.5, 1.0)), ('BACKGROUND', (0, 0), (-1, 0), (0.9, 0.9, 0.9)), ('ALIGN', (0, 0), (2, -1), 'CENTRE'), ('ALIGN', (3, 0), (3, -1), 'LEFT'), ('ALIGN', (4, 0), (5, -1), 'RIGHT'), ('VALIGN', (0, 1), (5, -1), 'TOP'), ('FONTNAME', (4, 1), (5, -1), 'Courier'), ]) story.append(t) doc.build(story, onFirstPage=invoice_header_first, onLaterPages=invoice_header_later, canvasmaker=NumberedCanvas)
def convert_context_to_pdf(self, context): account_list = context['account_list'] today = datetime.date.today() def myFirstPage(canvas, doc): # Header canvas.saveState() canvas.setFont("Helvetica", 8) canvas.drawCentredString(PAGE_WIDTH / 2, 30, "VPAC") canvas.drawString(540, 30, "Page %d" % doc.page) canvas.drawString(50, 30, defaultfilters.date(today, "j, F Y")) canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() # Footer canvas.setFont('Times-Roman', 8) canvas.drawCentredString(PAGE_WIDTH / 2, 30, "VPAC") canvas.drawString(540, 30, "Page %d" % doc.page) canvas.drawString(50, 30, defaultfilters.date(today, "j, F Y")) canvas.restoreState() data_dic = [[ str(x.cn), str(getattr(x, 'telephoneNumber', '')), str(getattr(x, 'mobile', '')), str(getattr(x, 'mail', '')), str(getattr(x, 'l', '')) ] for x in account_list] data_list = list(data_dic) buffer = StringIO() doc = SimpleDocTemplate(buffer) doc.pagesize = portrait(A4) doc.topMargin = 40 story = [] table_style = TableStyle([ ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ('LINEABOVE', (0, 0), (-1, 0), 1, colors.black), ('LINEBELOW', (0, 0), (-1, 0), 1, colors.black), ('LINEBELOW', (0, -1), (-1, -1), 1, colors.black), ('LINEBEFORE', (0, 0), (0, -1), 1, colors.black), ('LINEAFTER', (-1, 0), (-1, -1), 1, colors.black), ]) # build the tables per unit # table item_list = [['Name', 'Telephone', 'Mobile', 'Email', 'Location']] item_list.extend(data_list) t = Table(item_list) t.hAlign = 'LEFT' t.setStyle(table_style) story.append(t) doc.build(story, onFirstPage=myFirstPage, onLaterPages=myLaterPages) # Close the PDF object cleanly. pdf = buffer.getvalue() buffer.close() # Get the value of the StringIO buffer and write it to the response. return pdf
def make_mortality_report(states, fname ): sorted = list() # used to sort on different criteria for state in states: sorted.append(state) state['eff_death'] = state['death'][state['n_samples']-1] state['eff_positives'] = \ state['positives'][state['n_samples']-1] state['eff_positives14'] = \ state['eff_positives'] - \ (state['positives'][state['n_samples']-1] -\ state['positives'][state['n_samples']-15]) mysize = (700,1250) datestr = str(datetime.date.today()-datetime.timedelta(days=1)) doc = SimpleDocTemplate(fname, pagesize=mysize) doc.title = 'State trends report ' + datestr doc.title = 'State mortality report ' + datestr doc.topMargin = 36 elements = [] styles=getSampleStyleSheet() NAnote = '' sorted.sort(key=sort_death,reverse=True) single_mortality_table( sorted, styles, elements, \ 'State mortality by total deaths', NAnote) sorted.sort(key=sort_death7,reverse=True) single_mortality_table( sorted, styles, elements, \ 'State daily mortality, by last 7 day average ', NAnote) sorted.sort(key=sort_mort_pos,reverse=True) single_mortality_table( sorted, styles, elements, \ 'State mortality by infected mortality rate', NAnote) sorted.sort(key=sort_mort_newpos,reverse=True) single_mortality_table( sorted, styles, elements, \ 'State mortality by newly infected mortality rate', NAnote) n_days=60 for state in states: state['eff_death'] = state['death'][state['n_samples']-1] -\ state['death'][state['n_samples']-(n_days+1)] state['eff_positives'] = \ state['positives'][state['n_samples']-1] -\ state['positives'][state['n_samples']-(n_days+1)] state['eff_positives14'] = \ state['eff_positives'] - \ (state['positives'][state['n_samples']-1] -\ state['positives'][state['n_samples']-15]) sorted.sort(key=sort_death,reverse=True) single_mortality_table( sorted, styles, elements, \ str(n_days) + ' day state mortality by deaths', NAnote) sorted.sort(key=sort_mort_pos,reverse=True) single_mortality_table( sorted, styles, elements, \ str(n_days) + ' day state mortality by infected mortality rate', NAnote) sorted.sort(key=sort_mort_newpos,reverse=True) single_mortality_table( sorted, styles, elements, \ str(n_days) + ' day state mortality by newly infected mortality rate', NAnote) # write the document to disk doc.build(elements)
def make_trend_report(states, fname ): sorted = list() # used to sort on different criteria for state in states: sorted.append(state) mysize = (700,1250) datestr = str(datetime.date.today()-datetime.timedelta(days=1)) doc = SimpleDocTemplate(fname, pagesize=mysize) doc.title = 'State trends report ' + datestr doc.topMargin = 36 elements = [] styles=getSampleStyleSheet() NAnote = 'N/A - will never double under current trends' sorted.sort(key=sort_pos,reverse=True) single_trend_table( sorted, styles, elements, \ 'State trends by total positives', NAnote) sorted.sort(key=sort_active,reverse=True) single_trend_table( sorted, styles, elements, \ 'State trends by estimated active cases', NAnote) sorted.sort(key=sort_d1,reverse=True) single_trend_table( sorted, styles, elements, \ 'State trends by new cases', NAnote) sorted.sort(key=sort_d2,reverse=True) single_trend_table( sorted, styles, elements, \ 'State trends by by new case growth', NAnote) sorted.sort(key=sort_d3,reverse=True) single_trend_table( sorted, styles, elements, \ 'State trends by by new case growth acceleration', NAnote) sorted.sort(key=sort_dd1) single_trend_table( sorted, styles, elements, \ 'State trends by days to double new cases', NAnote) sorted.sort(key=sort_dmodel) single_trend_table( sorted, styles, elements, \ 'State trends by days to double total positives', \ NAnote) sorted.sort(key=sort_amodel) single_trend_table( sorted, styles, elements, \ 'State trends by days to double active cases', \ NAnote) sorted.sort(key=sort_ddpos) single_trend_table( sorted, styles, elements, \ 'State trends by days last doubling of total positives',\ NAnote) sorted.sort(key=sort_ddact) single_trend_table( sorted, styles, elements, \ 'State trends by days for last doubling of active cases',\ NAnote) # write the document to disk doc.build(elements)
def create_pdf(self): pdf = StringIO.StringIO() doc = SimpleDocTemplate(pdf) doc.leftMargin = 31 doc.rightMargin = 31 doc.topMargin = 390 doc.bottomMargin = 110 story = [] order_items = [["Artikelnr.", "Name", "Menge", "Preis", "Summe"]] for item in self.order.items.all(): # Amount amount = str(item.amount) if item.product.unit: amount += " " + item.product.unit if item.product.active_packing_unit: amount += "\n(" + str(packages( item)) + " " + item.product.packing_unit_unit + ")" # Name item_name = item.product_name for property in item.product.get_displayed_properties(): item_name += "\n" + property["title"] + ": " + property[ "value"] + " " + property["unit"] for property in item.product.get_variant_properties(): item_name += "\n" + property["title"] + ": " + property[ "value"] + " " + property["unit"] if item.product.is_configurable_product(): for property in item.get_properties(): item_name += "\n" + property["title"] + ": " + property[ "value"] + property["unit"] + " " + property["price"] price = currency(item.product_price_gross) if item.product.price_unit: price += " / " + item.product.price_unit total = currency(item.price_gross) order_items.append( [item.product.sku, item_name, amount, price, total]) if self.order.voucher_number: order_items.append([ "", "Voucher", "1", currency(self.order.voucher_price), currency(self.order.voucher_price) ]) order_items.append([ "", "Versandart (" + self.order.shipping_method.name + ")", "1", currency(self.order.shipping_price), currency(self.order.shipping_price) ]) order_items.append([ "", "Zahlungsweise (" + self.order.payment_method.name + ")", "1", currency(self.order.payment_price), currency(self.order.payment_price) ]) order_items.append(["", "", "", "Summe", currency(self.order.price)]) order_items.append( ["", "", "", "Inkl. MwSt", currency(self.order.tax)]) order_items_table = Table(order_items, (80, 238, 60, 70, 70)) order_items_table.setStyle(in_order_items_style) story.append(order_items_table) story.append(Spacer(1, 40)) # END story.append(Paragraph(getattr(settings, "IN_END"), styleN)) doc.build(story, onFirstPage=self.page, onLaterPages=self.page) pdf.seek(0) return pdf
def doPrint(self, app, qrcode_value, raw_score): pdf_file_name = tempfile.mktemp (".pdf") styles = getSampleStyleSheet () h1 = styles["h1"] h1.alignment=TA_CENTER h1.fontSize = 36 h1.spaceBefore = 10 h1.spaceAfter = 22 normal = styles["Normal"] normal.alignment=TA_CENTER normal.fontSize = 16 starStyle = ParagraphStyle(name='Star', fontName='FontAwesome', fontSize=20, alignment=TA_CENTER, spaceAfter = 18) doc = SimpleDocTemplate (pdf_file_name) doc.pagesize = (8*cm, 29*cm) doc.topMargin = 0 doc.leftMargin = 0 doc.rightMargin = 0 wheel_threshold = app.config.get('wheel_threshold') number_questions = app.config.get('number_questions') percent = float(raw_score) / float(number_questions) canWheel = float(percent) >= float(wheel_threshold) / float(number_questions) parts = [] imagename = "images/stylo.png" normal.spaceAfter = 18 if canWheel: parts.append(Paragraph(app.config.get('wheel_txt'), normal)) d = barcode.createBarcodeDrawing("QR", width=4*cm, height=4*cm, barBorder=0, value=qrcode_value) d.hAlign = "CENTER" d.vAlign = "TOP" parts.append(d) else: parts.append(Paragraph(app.config.get('no_wheel_txt'), normal)) parts.append(Image(imagename, 4*cm, 4*cm)) raw_score = min(raw_score, len(app.config.scoreValueTable())-1) parts.append(Paragraph(str(app.config.scoreValueTable()[raw_score]), h1)) empty_star = u"\uF006" full_star = u"\uF005" stars = u"" if percent <= 0.3: stars += 3 * empty_star elif percent < 0.6: stars += full_star + 2 * empty_star elif percent < 1: stars += 2 * full_star + empty_star else: stars += 3 * full_star parts.append(Paragraph(stars, starStyle)) parts.append(Paragraph(app.config.get('url'), normal)) doc.build(parts) #call([app.config.get('acrobat'), "", pdf_file_name]) call([app.config.get('foxit'), "/t", pdf_file_name, app.config.get('printer_name')])
def project_application_to_pdf_doc(project_application): now = datetime.datetime.now() def footer(canvas, doc): canvas.setFont('Times-Roman', 9) canvas.drawCentredString(PAGE_WIDTH/2, 30, "%s" % (settings.ACCOUNTS_ORG_NAME)) canvas.drawString(540, 30, "Page %d" % doc.page) canvas.drawString(50, 30, defaultfilters.date(now, "g:i a j, F Y")) def myFirstPage(canvas, doc): # Header canvas.saveState() canvas.setTitle("%s Project Application, number %s" % (settings.ACCOUNTS_ORG_NAME, project_application.id)) canvas.setFont("Helvetica", 20) canvas.drawString(50, 800, '%s Project Application, number %s' % (settings.ACCOUNTS_ORG_NAME, project_application.id)) # Footer footer(canvas, doc) canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() # Footer footer(canvas, doc) canvas.restoreState() buffer = BytesIO() doc = SimpleDocTemplate(buffer) doc.pagesize = portrait(A4) doc.topMargin = 50 story = [] # Paragraph pstyle = ParagraphStyle( name="notesP", fontName="Times-Roman", fontSize=10, textColor=colors.Color(0,0,0), spaceBefore=10, spaceAfter=2) # indent istyle = ParagraphStyle( name="notesP", fontName="Times-Roman", fontSize=10, leftIndent=20, textColor=colors.Color(0,0,0), spaceAfter=2) # double indent iistyle = ParagraphStyle( name="notesP", fontName="Times-Roman", fontSize=10, leftIndent=40, textColor=colors.Color(0,0,0), spaceAfter=2) # gray small text estyle = ParagraphStyle( name="notesP", fontName="Times-Roman", fontSize=9, textColor=colors.gray, leftIndent=2, spaceAfter=2) # Heading hstyle = ParagraphStyle( name="notesP", fontName="Times-Roman", fontSize=14, textColor=colors.Color(0,0,0), spaceBefore=10, spaceAfter=15) table_style = TableStyle( [('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ] ) # Project Overview story.append(Paragraph('<b>Project Overview</b>', hstyle)) story.append(Paragraph('<b>Title:</b> %s' % (safe_or_none(project_application.title) or '<incomplete>'), pstyle)) # TODO supervisor and applicant summary sup = ProjectApplicationMember.objects.filter(project_application=project_application, is_supervisor=True)[0] # should always be only one app = ProjectApplicationMember.objects.filter(project_application=project_application, is_applicant=True)[0] # should always be only one story.append(Paragraph('<b>Host Institute, Faculty and Department:</b> %s, %s, %s' % (safe_or_none(sup.institute) or '<incomplete>', safe_or_none(sup.faculty) or '<incomplete>', safe_or_none(sup.department) or '<incomplete>'), pstyle)) story.append(Paragraph('The host institute, faculty and department of the Project Supervisor', estyle)) story.append(Paragraph('<b>Field of Research:</b> %s' % (safe_or_none(project_application.get_FOR_display()) or '<incomplete>'), pstyle)) if project_application.summary: summary = safe_or_none(project_application.summary).replace('\n', '<br/>') else: summary = '<incomplete>' story.append(Paragraph('<b>Summary of Proposal:</b>', pstyle)) story.append(Paragraph('%s' % summary, istyle)) if project_application.purpose: purpose = safe_or_none(project_application.purpose).replace('\n', '<br/>') else: purpose = '<incomplete>' story.append(Paragraph('<b>Supported Activity:</b>', pstyle)) story.append(Paragraph('%s' % purpose, istyle)) story.append(PageBreak()) # Personnel story.append(Paragraph('<b>Personnel</b>', hstyle)) story.append(Paragraph('<b>Participants</b>', pstyle)) # build the Participant table data_list = ProjectApplicationMember.objects.filter(project_application=project_application).values_list( 'is_applicant', 'is_supervisor', 'is_leader', 'email', 'title', 'first_name', 'last_name', 'institute', 'faculty', 'department', 'telephone', 'level', 'role').order_by('disp_order') for ap,sv,mg,em,tl,fn,ln,inst,fac,dept,tel,lvl,rl in data_list: flags = [] story.append(Paragraph('Name: <b>%s %s %s</b>' % (safe_or_none(tl) or '<incomplete>', safe_or_none(fn) or '<incomplete>', safe_or_none(ln) or '<incomplete>'), pstyle)) story.append(Paragraph('e-mail: %s' % (safe_or_none(em) or '<incomplete>'), istyle)) if ap: flags.append('Applicant') if sv: flags.append('Project Supervisor') if mg: flags.append('Project Manager') if flags: story.append(Paragraph('%s' % (', '.join(flags)), istyle)) story.append(Paragraph('Institute: %s, Faculty: %s, Department: %s' % (safe_or_none(inst) or '<incomplete>', safe_or_none(fac) or '<incomplete>', safe_or_none(dept) or '<incomplete>'), istyle)) story.append(Paragraph('Telephone: %s' % (safe_or_none(tel) or '<incomplete>'), istyle)) # get long description for 1st match of level and role abbreviation if lvl: lvl = next(safe_or_none(y) for x,y in ProjectApplicationMember.LEVELS if x == lvl) else: lvl = '<incomplete>' if rl: rl = next(safe_or_none(y) for x,y in ProjectApplicationMember.ROLES if x == rl) else: rl = '<incomplete>' story.append(Paragraph('Level: %s, Role: %s' % (lvl, rl), istyle)) story.append(PageBreak()) if project_application.hardware_request: hardware_request = safe_or_none(project_application.hardware_request).replace('\n', '<br/>') else: hardware_request = '<left blank>' story.append(Paragraph('<b>Sepcial Requirements:</b>', pstyle)) story.append(Paragraph('%s' % hardware_request, istyle)) if project_application.compute_note: compute_note = safe_or_none(project_application.compute_note).replace('\n', '<br/>') else: compute_note = '<left blank>' story.append(Paragraph('<b>Additional Information:</b>', pstyle)) story.append(Paragraph('%s' % compute_note, istyle)) doc.build(story, onFirstPage=myFirstPage, onLaterPages=myLaterPages) # Close the PDF object cleanly. pdf = buffer.getvalue() buffer.close() return pdf
def convert_context_to_pdf(self, context): account_list = context["account_list"] today = datetime.date.today() def myFirstPage(canvas, doc): # Header canvas.saveState() canvas.setFont("Helvetica", 8) canvas.drawCentredString(PAGE_WIDTH / 2, 30, "VPAC") canvas.drawString(540, 30, "Page %d" % doc.page) canvas.drawString(50, 30, defaultfilters.date(today, "j, F Y")) canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() # Footer canvas.setFont("Times-Roman", 8) canvas.drawCentredString(PAGE_WIDTH / 2, 30, "VPAC") canvas.drawString(540, 30, "Page %d" % doc.page) canvas.drawString(50, 30, defaultfilters.date(today, "j, F Y")) canvas.restoreState() data_dic = [ [ str(x.cn), str(getattr(x, "telephoneNumber", "")), str(getattr(x, "mobile", "")), str(getattr(x, "mail", "")), str(getattr(x, "l", "")), ] for x in account_list ] data_list = list(data_dic) buffer = StringIO() doc = SimpleDocTemplate(buffer) doc.pagesize = portrait(A4) doc.topMargin = 40 story = [] table_style = TableStyle( [ ("INNERGRID", (0, 0), (-1, -1), 0.25, colors.black), ("BOX", (0, 0), (-1, -1), 0.25, colors.black), ("LINEABOVE", (0, 0), (-1, 0), 1, colors.black), ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), ("LINEBELOW", (0, -1), (-1, -1), 1, colors.black), ("LINEBEFORE", (0, 0), (0, -1), 1, colors.black), ("LINEAFTER", (-1, 0), (-1, -1), 1, colors.black), ] ) # build the tables per unit # table item_list = [["Name", "Telephone", "Mobile", "Email", "Location"]] item_list.extend(data_list) t = Table(item_list) t.hAlign = "LEFT" t.setStyle(table_style) story.append(t) doc.build(story, onFirstPage=myFirstPage, onLaterPages=myLaterPages) # Close the PDF object cleanly. pdf = buffer.getvalue() buffer.close() # Get the value of the StringIO buffer and write it to the response. return pdf
def __init__(self, report: InterestTransferListReport, year: int, today: str): self.snippets = get_custom_texts() self.buffer = io.BytesIO() self.today = today story = [] self._setup_styles() doc = SimpleDocTemplate(self.buffer, pagesize=A4) doc.leftMargin = 1.5 * cm doc.rightMargin = 1.5 * cm doc.topMargin = 1.0 * cm doc.bottomMargin = 1.5 * cm for data in report.per_contract_data: story.extend(self._header(data)) story.append(Spacer(1, 1.0 * cm)) story.append( Paragraph( f"Kontostand Direktkreditvertrag Nr. {data.contract.number}", self.styleH2)) story.append(Spacer(1, 1.0 * cm)) story.append( Paragraph(f"Guten Tag {data.contract.contact.name}, ", self.styleN)) story.append(Spacer(1, 0.3 * cm)) story.append( Paragraph(( f"der Kontostand des Direktkreditvertrags Nr. {data.contract.number} beträgt heute, " f" am {today} {euro(data.contract.balance)}. "), self.styleN)) story.append( Paragraph( f"Die Zinsen für das Jahr {year} berechnen sich wie folgt:", self.styleN)) story.append(Spacer(1, 0.3 * cm)) story.append(interest_year_table(data.interest_rows, narrow=True)) story.append(Spacer(1, 0.3 * cm)) story.append( Paragraph(f"<b>Zinsen {year}:</b> {euro(data.interest)}", self.styleN)) story.append(Spacer(1, 0.5 * cm)) story.append( Paragraph(( "Wir werden die Zinsen in den nächsten Tagen auf das im Vertrag angegebene Konto " "überweisen. Bitte beachten Sie, dass Sie sich selbst um die Abführung von " "Kapitalertragssteuer und Solidaritätszuschlag kümmern sollten, da wir das nicht " "übernehmen können. "), self.styleN)) story.append(Spacer(1, 0.5 * cm)) story.append(Paragraph("Vielen Dank!", self.styleN)) story.append(Spacer(1, 1.5 * cm)) story.append(Paragraph("Mit freundlichen Grüßen", self.styleN)) story.append(Spacer(1, 1.0 * cm)) story.append(Paragraph(self.snippets['your_name'], self.styleN)) story.append( Paragraph(f"für die {self.snippets['gmbh_name']}", self.styleN)) story.append(Spacer(1, 0.3 * cm)) story.append(PageBreak()) doc.build(story, onFirstPage=self._draw_footer, onLaterPages=self._draw_footer) self.buffer.seek(0)
def create_report(self, info): # Converting to PDF # document theme if local: doc = SimpleDocTemplate('{}_TestReport.pdf'.format(info["serialNo"])) else: doc = SimpleDocTemplate('/home/test/reports/{}_TestReport.pdf'.format(info["serialNo"])) doc.topMargin = 20 doc.bottomMargin = 25 doc.leftMargin = 25 doc.rightMargin = 25 doc.allowSplitting = False header_path = self.project_path + "/" + "header.png" if os.path.exists(header_path): header = Image(header_path, 8 * inch, 1 * inch) header.hAlign = "CENTRE" self.elements.append(header) self.elements.append(Spacer(1, 20)) else: logging.warning("Header not found") self.elements.append(self.draw_line(colors.lightgrey)) self.elements.append(Spacer(1, 1)) self.elements.append(self.draw_line(colors.lightgrey)) self.elements.append(Spacer(1, 3)) self.elements.append(Paragraph("Serial No: " + info["serialNo"], self.styles['Title'])) self.elements.append(self.draw_line(colors.lightgrey)) self.elements.append(Spacer(1, 1)) self.elements.append(self.draw_line(colors.lightgrey)) self.elements.append(Spacer(1, 20)) # Create Tables for each test # Device Info Table if info["deviceInfo"]: self.heading_block("Device Info") dev_table = pd.DataFrame(info["deviceInfo"], index=[0]) dev_table = dev_table.T dev_table.reset_index(inplace=True) dev_table.columns = ["Item", "Detail"] dev_table.set_index(["Item"], inplace=True) dev_table.replace("", "N/A", inplace=True) self.draw_table(dev_table) # Mac Table if info["macInfo"]: self.heading_block("MAC Info") self.draw_table(info["macInfo"], column=["interface", "macaddr"]) # Operation Table if info["operationInfo"]: self.heading_block("Operation Details") opt_table = pd.DataFrame(info["operationInfo"], index=[0]) opt_table = opt_table.T opt_table.reset_index(inplace=True) opt_table.columns = ["Operation", "Status"] opt_table.set_index(["Operation"], inplace=True) opt_table.replace("", "N/A", inplace=True) self.draw_table(opt_table) # Test Table if info["testInfo"]: self.heading_block("Test Details") test_table = pd.DataFrame(info["testInfo"], index=[0]) test_table = test_table.T test_table.reset_index(inplace=True) test_table.columns = ["Test", "Status"] test_table.set_index(["Test"], inplace=True) test_table.replace("", "N/A", inplace=True) self.draw_table(test_table) # Hardware Test Table if info["hwtestInfo"]: self.heading_block("Hardware Test Details") self.draw_table(info["hwtestInfo"], column=["item", "result", "detail"]) # Burn test details if info["burntestInfo"]: self.heading_block("Burn Test Details") self.draw_table(info["burntestInfo"], column=["item", "result", "detail"]) # Last test details if info["lasttestInfo"]: self.heading_block("Last Test Details") self.draw_table(info["lasttestInfo"], column=["item", "result", "detail"]) # LanBurn Throughput Table self.heading_block("LanBurn Throughput") speed_table = pd.DataFrame.from_dict(info["performancestatsInfo"]) speed_table.columns = [x.title() for x in speed_table.columns] speed_table.set_index(["Nic"], inplace=True) self.draw_table(speed_table) # LanBurn Throughput Bar Chart self.elements.append(Spacer(1, 30)) filename = "lanburn.png" self.throughput_bar_chart(speed_table, self.project_path, filename) im = Image(filename, 4 * inch, 2.5 * inch) self.elements.append(im) if self.render_pdf: # Build all the elements to create a PDF doc.build(self.elements)