def begin(self, name='', typ=''): styleSheet = getSampleStyleSheet() self.code = styleSheet['Code'] self.bt = styleSheet['BodyText'] self.story = [] # Cover page t = time.gmtime(time.time()) timeString = time.strftime("%Y-%m-%d %H:%M", t) self.story.append( Paragraph( '<font size=18>Documentation for %s "%s"</font>' % (typ, name), self.bt)) self.story.append( Paragraph( '<font size=18>Generated by: graphdocpy.py version %s</font>' % __version__, self.bt)) self.story.append( Paragraph('<font size=18>Date generated: %s</font>' % timeString, self.bt)) self.story.append( Paragraph('<font size=18>Format: PDF</font>', self.bt)) self.story.append(PageBreak()) # Table of contents toc = TableOfContents() self.story.append(toc) self.story.append(PageBreak())
def print_order_parts_make_procedures(order_parts_ids): global dao s = ParagraphStyle(name = "zouzz", fontName = 'Helvetica', fontSize=14, leading=16) #, borderWidth=1, borderColor=colors.black) filename = make_pdf_filename("PartsProcedure_{}_".format(123321)) ladderDoc = changing_headers_PDF(filename) complete_document = [] for order_id, parts_ids in dao.order_part_dao.sort_part_id_on_order(order_parts_ids).iteritems(): complete_document.append(Paragraph('Header',s)) complete_document.append(FrameBreak()) complete_document.append(Paragraph('SubHeader',s)) complete_document.append(FrameBreak()) # complete_document.append(NextPageTemplate('content')) for part_id in parts_ids: part = dao.order_part_dao.find_by_id(part_id) # print_one_part(part,complete_document) # complete_document.append(NextPageTemplate('begin_section')) complete_document.append(PageBreak()) ladderDoc.build(complete_document,canvasmaker=NumberedCanvas) open_pdf(filename)
def multiple_contexts_and_templates_to_pdf_data(contexts_templates, context_instance=None, filename=None): if USE_PYPDF2: merger = PdfFileMerger() else: all_parts = [] old_lang = translation.get_language() for context, template_name in contexts_templates: parser = get_parser(template_name) if 'language' in context: translation.activate(context['language']) xml = render_to_string(template_name, context, context_instance) if USE_PYPDF2: outstream = io.BytesIO() outstream.write(parser.parse(xml)) reader = PdfFileReader(outstream) merger.append(reader) else: parts = parser.parse_parts(xml) all_parts += parts all_parts.append(PageBreak()) translation.activate(old_lang) if USE_PYPDF2: output = io.BytesIO() merger.write(output) output = output.getvalue() else: output = parser.merge_parts(all_parts) return output
def create_a_page_(self, lst, page_rows, rowheights): #页面标头 if self.page_head: for hp in self.page_head: lst.append(hp) #添加页面标头 #表格数据 cols_count = len(self.colwidths) page_rows_count = len(page_rows) #表头 if self.grid_head: page_rows_count += 1 p_rows = self.grid_head and (self.grid_head, ) or () for row in page_rows: try: aaa = tuple(row) + ("", ) * cols_count except TypeError: aaa = (row, ) + ("", ) * cols_count p_rows += (aaa[:cols_count], ) # for row in page_rows]) #补全每一行的列数并转换为tuple if self.fill_grid and (page_rows_count < self.record_per_page): #print "#用空白补全一页的记录,使之达到规定的每页记录数" p_rows += ("", ) * (self.record_per_page - page_rows_count) page_rows_count = self.record_per_page lst.append( Table(p_rows, self.colwidths, rowheights[:page_rows_count], self.style)) #页尾 if self.page_tail: for hp in self.page_tail: lst.append(hp) lst.append(PageBreak())
def export_to_pdf(modeladmin, request, queryset): # Create the HttpResponse object with the appropriate PDF headers. response = HttpResponse(content_type='application/pdf') # Append invoice number and invoice date if len(queryset) != 1: _file_name = '-'.join([a.invoice_number for a in queryset.order_by("invoice_number")]) response['Content-Disposition'] = 'attachment; filename="invoice%s.pdf"' %(_file_name.replace(" ", "")[:150]) else: response['Content-Disposition'] = 'attachment; filename="invoice-%s-%s-%s.pdf"' %(queryset[0].patient.name, queryset[0].invoice_number, queryset[0].invoice_date.strftime('%d-%m-%Y')) elements = [] doc = SimpleDocTemplate(response, rightMargin=2*cm, leftMargin=2 * cm, topMargin=1 * cm, bottomMargin=1*cm) recapitulatif_data = [] for qs in queryset.order_by("invoice_number"): dd = [qs.prestations.all().order_by("date", "carecode__gross_amount")[i:i+20] for i in range(0, len(qs.prestations.all()), 20)] for _prestations in dd: _inv = qs.invoice_number + (("" + str(dd.index(_prestations) + 1) + qs.invoice_date.strftime('%m%Y')) if len(dd) > 1 else "") _result = _build_invoices(_prestations, _inv, qs.invoice_date, qs.accident_id, qs.accident_date ) elements.extend(_result["elements"]) recapitulatif_data.append((_result["invoice_number"], _result["patient_name"], _result["invoice_amount"])) elements.append(PageBreak()) elements.extend(_build_recap(recapitulatif_data)) doc.build(elements) return response
def endClass(self, name, doc, bases): "Append a graphic demo of a Widget or Drawing at the end of a class." PdfDocBuilder0.endClass(self, name, doc, bases) aClass = eval('self.skeleton.moduleSpace.' + name) if hasattr(aClass, '_nodoc'): pass elif issubclass(aClass, Widget): try: widget = aClass() except AssertionError as err: if _abstractclasserr_re.match(str(err)): return raise self.story.append(Spacer(0*cm, 0.5*cm)) self._showWidgetDemoCode(widget) self.story.append(Spacer(0*cm, 0.5*cm)) self._showWidgetDemo(widget) self.story.append(Spacer(0*cm, 0.5*cm)) self._showWidgetProperties(widget) self.story.append(PageBreak()) elif issubclass(aClass, Drawing): drawing = aClass() self.story.append(Spacer(0*cm, 0.5*cm)) self._showDrawingCode(drawing) self.story.append(Spacer(0*cm, 0.5*cm)) self._showDrawingDemo(drawing) self.story.append(Spacer(0*cm, 0.5*cm))
def show_capitulos(self, story, capitulos): if not capitulos: return story.append(PageBreak()) story.append(Paragraph('CAPÍTULOS DE LIBROS', self.style_h3())) text = 'Número de capítulos de libros: ' + str(len(capitulos)) story.append(Paragraph(text, self.style_n())) self.list_capitulos(story, capitulos)
def show_patentes(self, story, patentes): if not patentes: return story.append(PageBreak()) story.append(Paragraph('PROPIEDAD INTELECTUAL', self.style_h3())) text = 'Número de Propiedades Intelectuales: ' + str(len(patentes)) story.append(Paragraph(text, self.style_n())) self.list_patentes(story, patentes)
def show_tesis(self, story, tesis): if not tesis: return story.append(PageBreak()) story.append(Paragraph('TESIS DOCTORALES', self.style_h3())) text = 'Número de tesis doctorales: ' + str(len(tesis)) story.append(Paragraph(text, self.style_n())) self.list_tesis(story, tesis)
def show_convenios(self, story, convenios): if not convenios: return story.append(PageBreak()) story.append(Paragraph('CONVENIOS ACTIVOS', self.style_h3())) text = 'Número de convenios activos: ' + str(len(convenios)) story.append(Paragraph(text, self.style_n())) self.list_convenios(story, convenios)
def show_proyectos(self, story, proyectos): if not proyectos: return story.append(PageBreak()) story.append(Paragraph('PROYECTOS ACTIVOS', self.style_h3())) text = 'Número de proyectos activos: ' + str(len(proyectos)) story.append(Paragraph(text, self.style_n())) self.list_proyectos(story, proyectos)
def show_congresos(self, story, congresos): if not congresos: return story.append(PageBreak()) story.append(Paragraph('COMUNICACIONES EN CONGRESOS', self.style_h3())) text = 'Número de comunicaciones en congresos: ' + str(len(congresos)) story.append(Paragraph(text, self.style_n())) self.list_congresos(story, congresos)
def show_articulos(self, story, articulos): if not articulos: return story.append(PageBreak()) story.append(Paragraph('ARTÍCULOS', self.style_h3())) text = 'Número de artículos: ' + str(len(articulos)) story.append(Paragraph(text, self.style_n())) self.list_articulos(story, articulos)
def show_libros(self, story, libros): if not libros: return story.append(PageBreak()) story.append(Paragraph('LIBROS', self.style_h3())) text = 'Número de libros: ' + str(len(libros)) story.append(Paragraph(text, self.style_n())) self.list_libros(story, libros)
def frameAction(self, frame): frame._generated_content = [] if self.breakTo=='any': # Break only once. None if at top of page if not frame._atTop: frame._generated_content.append(SetNextTemplate(self.templateName)) frame._generated_content.append(PageBreak()) elif self.breakTo=='odd': #Break once if on even page, twice #on odd page, none if on top of odd page if frame._pagenum % 2: #odd pageNum if not frame._atTop: # Blank pages get no heading or footer frame._generated_content.append(SetNextTemplate(self.templateName)) frame._generated_content.append(SetNextTemplate('emptyPage')) frame._generated_content.append(PageBreak()) frame._generated_content.append(ResetNextTemplate()) frame._generated_content.append(PageBreak()) else: #even frame._generated_content.append(SetNextTemplate(self.templateName)) frame._generated_content.append(PageBreak()) elif self.breakTo=='even': #Break once if on odd page, twice #on even page, none if on top of even page if frame._pagenum % 2: #odd pageNum frame._generated_content.append(SetNextTemplate(self.templateName)) frame._generated_content.append(PageBreak()) else: #even if not frame._atTop: # Blank pages get no heading or footer frame._generated_content.append(SetNextTemplate(self.templateName)) frame._generated_content.append(SetNextTemplate('emptyPage')) frame._generated_content.append(PageBreak()) frame._generated_content.append(ResetNextTemplate()) frame._generated_content.append(PageBreak())
def startElement(self, name, attrs): if name in ["strong", "em", "i", "b", "u"]: self.mode = name elif name == "ol": self.listcounter = 1 self.listtype = "ol" elif name == "ul": self.listtype = "ul" elif name == "hr": elements.append(PageBreak())
def create_user_info_document(output_file, teacher_list): logger.debug('Creating user info document...') subject_paragraph_style = ParagraphStyle(name='Normal', fontSize=12, leading=20, fontName='Times-Bold', spaceAfter=0.75 * cm) main_paragraph_style = ParagraphStyle(name='Normal', fontSize=11, leading=18, fontName='Times-Roman', spaceAfter=0.25 * cm, hyphenationLang='de_DE', embeddedHyphenation=1, uriWasteReduce=0.3) data_paragraph_style = ParagraphStyle(name='Normal', fontSize=11, fontName='Courier', spaceAfter=0.5 * cm, alignment=TA_CENTER) # prepare data for document title = 'Benutzerdaten' author = 'bbst - BBS Teacher Management' logo = Image('logo.png', width=PAGE_WIDTH - 2 * BORDER_HORIZONTAL, height=5.2445 * cm, hAlign='CENTER') info_text_greeting = 'Liebe Kollegin, lieber Kollege,<br/>ihre Benutzerdaten lauten wie folgt:' info_text_paragraphs = [ """Diese Zugangsdaten erlauben die Rechnernutzung in allen Räumen mit dem Logodidact-System. Außerdem kann es zum Zugriff auf den Stundenplan über WebUntis und die Lernplattform Moodle genutzt werden.""", """In Logodidact, Moodle und WebUntis lässt sich das Passwort ändern. Allerdings gilt jede Änderung nur für das jeweilige System! Sollten Sie ihr Passwort vergessen haben, besteht bei Moodle und Webuntis die Möglichkeit, sich ein neues Passwort per Mail zusenden zu lassen.""", """Weitere Informationen finden Sie im Moodle-Kurs unter <a color="blue" href="https://moodle.nibis.de/bbs_osb/course/view.php?id=7">https://moodle.nibis.de/bbs_osb/course/view.php?id=7</a>. Bei allen weiteren Fragen können Sie sich gerne bei mir melden.""", """<br/>Viele Grüße<br/> Christian Wichmann<br/> [email protected]""" ] # building document doc = SimpleDocTemplate(output_file, author=author, title=title) story = [] for t in teacher_list: user_data = '{} {}'.format( t.username.lower(), t.password) story.append(logo) story.append(Spacer(1, 1.75 * cm)) story.append( Paragraph('<b>{}</b>'.format(title), subject_paragraph_style)) story.append(Paragraph(info_text_greeting, main_paragraph_style)) story.append(Paragraph(user_data, data_paragraph_style)) for p in info_text_paragraphs: story.append(Paragraph(p, main_paragraph_style)) story.append(PageBreak()) doc.build(story, onFirstPage=build_footer, onLaterPages=build_footer)
def renderReport(target, calendar, t1, t2, data): for year in range(t1.year, t2.year + 1): ##print("year:",year) for month in range(1, 13): if (hasOrders(calendar[year][month]['week1'])): x = calendar[year][month]['week1'] nT = numberTransmisionsWeek(x) t = Table(createWeekTable(x, year, month, 0), colWidths=None, rowHeights=16, style=tabStyle(len(x))) ##t = Table([calendar[year][month]['week1']], colWidths=None, rowHeights=None,style = tabStyle ) lst.append( Table([[leftSide(data, nT), t]], colWidths=None, rowHeights=None, style=outerStyle, vAlign='MIDDLE', hAlign='LEFT')) lst.append(PageBreak()) ##print ("week 1 has orders") if (hasOrders(calendar[year][month]['week2'])): x = calendar[year][month]['week2'] nT = numberTransmisionsWeek(x) t = Table(createWeekTable(x, year, month, 1), colWidths=None, rowHeights=16, style=tabStyle(len(x))) ##t = Table([calendar[year][month]['week2']], colWidths=None, rowHeights=None, style = tabStyle) lst.append( Table([[leftSide(data, nT), t]], colWidths=None, rowHeights=None, style=outerStyle, vAlign='MIDDLE', hAlign='LEFT')) lst.append(PageBreak()) ##print ("week 2 has orders") target.build(lst)
def create_doc(self): self.story.append(self.reportHeader()) self.story.append(Spacer(1,0.2*inch)) self.story.append(self.reportTable()) self.story.append(PageBreak()) self.build_document()
def AddStoryElement(self, element): if element.tag == "para": styleName = element.get("style", "default") style = self.paragraphStyles[styleName] element.attrib.clear() text = cElementTree.tostring(element) rotated = self._ConvertNumber(element, "rotate", 0) cls = RotatedParagraph if rotated else Paragraph para = cls(text, style) self.story.append(para) elif element.tag == "nextPage": self.story.append(PageBreak()) elif element.tag == "nextFrame": self.story.append(FrameBreak()) elif element.tag == "spacer": length = self._ConvertNumber(element, "length", 0) self.story.append(Spacer(length, length)) elif element.tag == "setNextTemplate": name = element.attrib["name"] self.story.append(NextPageTemplate(name)) elif element.tag == "blockTable": styleName = element.get("style", "default") style = self.tableStyles[styleName] if self.tableCommands: style = TableStyle(self.tableCommands, style) repeatRows = self._ConvertNumber(element, "repeatRows", 0) hAlign = element.get("hAlign", "CENTER") vAlign = element.get("vAlign", "MIDDLE") columnWidths = self._ConvertNumberList(element, "colWidths", []) pageRows = self._ConvertNumber(element, "pageRows") if not pageRows: self.story.append( LongTable(self.tableRows, columnWidths, self.tableRowHeights, style=style, hAlign=hAlign, vAlign=vAlign, repeatRows=repeatRows)) else: headerRows = self.tableRows[:repeatRows] headerRowHeights = self.tableRowHeights[:repeatRows] rows = self.tableRows[repeatRows:] rowHeights = self.tableRowHeights[repeatRows:] while rows: table = LongTable(headerRows + rows[:pageRows], columnWidths, headerRowHeights + rowHeights[:pageRows], style=style, hAlign=hAlign, vAlign=vAlign) self.story.append(table) rows = rows[pageRows:] rowHeights = rowHeights[pageRows:]
def append_general_conditions(complete_document): complete_document.append(PageBreak()) f = open(os.path.join(resource_dir, "general_conditions.txt"), mode="r", encoding='utf-8') txt = f.read() f.close() txt = crlf_to_br(txt) general_conditions_style = ParagraphStyle(name="regular", fontName='Helvetica', fontSize=10, spaceAfter=6) complete_document.append(Paragraph(txt, general_conditions_style)) return complete_document
def _build(self, doc, ans, component): flowables = [ ComponentFlowable(component=component), PageBreak(), ] ts = self._make_tables(ans) for i in range(len(ts) - 1, 0, -1): ts.insert(i, self._vspacer(0.25)) flowables.extend(ts) templates = None return flowables, templates
def gen_pdf(questions, game_rounds): """generate speaker PDF""" styles = getSampleStyleSheet() doc = SimpleDocTemplate("pngs-speaker.pdf") doc.pagesize = landscape(A5) style = styles["Normal"] page_elements = [] for round in game_rounds: for num, question in enumerate( questions_per_round(questions, game_round=round)): q_data = question.as_pdf_dict page_elements.append( Paragraph("<em>Game Round</em>: {0}".format(round), style)) page_elements.append(Spacer(0, 0.1 * cm)) page_elements.append( Paragraph( "<font size=12><em>Question {0}:</em> <bold>{1}</bold>" "</font>".format(num + 1, q_data['text'].encode('utf-8')), style)) page_elements.append(Spacer(0, 0.2 * cm)) page_elements.append( Paragraph( "<em>Comment</em>: {0}".format( q_data.get('comment').encode('utf-8')), style)) page_elements.append(Spacer(0, 0.2 * cm)) page_elements.append(Paragraph("<em>Answers</em>:", style)) page_elements.append( Paragraph( "* " + "<br />* ".join( [unicode(t['text']) for t in q_data['answers']]), style)) page_elements.append( Paragraph("<em>Points</em>: {0}".format(q_data.get('tier')), style)) page_elements.append(PageBreak()) doc.build(page_elements) return Story = [Spacer(0, 1 * cm)] p = Paragraph("Blubber1", styles["Normal"]) Story.append(p) p = Paragraph("Blubber2", styles["Normal"]) Story.append(p) Story.append(Spacer(10, 5 * cm)) p = Paragraph("Blubber3", styles["Normal"]) Story.append(p) #doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages) doc.build(Story)
def generate_systematic_pdf(self, filename): ''' The public method to create a pdf file. Might throw an exception if the file can't be written. ''' tree = self.systematic_dao.get_tree() doc = SimpleDocTemplate(filename) story = [] for child in tree.root_node.children: story = self._print_root_node(story, child) story.append(PageBreak()) doc.build(story)
def generate_pdf(file): with open(file, 'r', encoding='utf-8') as file: data = file.read().replace('\n', '<br/>') \ .replace('Juliet: <Media weggelaten> Neutral', 'Juliet: ' + 1 * "<br/>" + 11 * '<br/>' + '<img src= "img_resized/neutral_juliet.jpg"/>' + 1 * '<br/>') \ .replace('Juliet: <Media weggelaten> Positive', 'Juliet: ' + 1 * "<br/>" + 11 * '<br/>' + '<img src= "img_resized/happy_juliet.jpg"/>' + 1 * '<br/>') \ .replace('Juliet: <Media weggelaten> Negative', 'Juliet: ' + 1 * "<br/>" + 11 * '<br/>' + '<img src= "img_resized/angry_juliet.jpg"/>' + 1 * '<br/>') \ .replace('Romeo: <Media weggelaten> Neutral', 'Romeo: ' + 1 * "<br/>" + 11 * '<br/>' + '<img src= "img_resized/neutral_romeo.jpg"/>' + 1 * '<br/>') \ .replace('Romeo: <Media weggelaten> Positive', 'Romeo: ' + 1 * "<br/>" + 11 * '<br/>' + '<img src= "img_resized/happy_romeo.jpg"/>' + 1 * '<br/>') \ .replace('Romeo: <Media weggelaten> Negative', 'Romeo: ' + 1 * "<br/>" + 11 * '<br/>' + '<img src= "img_resized/angry_romeo.jpg"/>' + 1 * '<br/>') story = [ DocAssign("currentFrame", "doc.frame.id"), DocAssign("currentPageTemplate", "doc.pageTemplate.id"), DocAssign("aW", "availableWidth"), DocAssign("aH", "availableHeight"), DocAssign("aWH", "availableWidth,availableHeight"), Paragraph("<b>Romeo and Juliet</b>" + 15 * '<br/>', title), Image('img/romeo_juliet.jpg', width=4 * inch, height=5 * inch), PageBreak(), Paragraph("<b>Introduction</b>", header), Paragraph( 2 * '<br/>' + "<i>A 2019 interpretation of the famous love story in the form of a WhatsApp dialogue. Made for NaNoGenMo.</i>", normal), PageBreak(), Paragraph(data, normal) ] doc = SimpleDocTemplate("romeo_and_juliet.pdf") doc.build(story)
def get_doc_elements(queryset, med_p=False): elements = [] summary_data = [] already_added_images = [] for qs in queryset.order_by("invoice_number"): dd = [ qs.prestations.all().order_by("date", "carecode__name")[i:i + 20] for i in range(0, len(qs.prestations.all()), 20) ] for _prestations in dd: _inv = qs.invoice_number + ( ("" + str(dd.index(_prestations) + 1) + qs.invoice_date.strftime('%m%Y')) if len(dd) > 1 else "") _result = _build_invoices(_prestations, _inv, qs.invoice_date, qs.accident_id, qs.accident_date) elements.extend(_result["elements"]) summary_data.append( (_result["invoice_number"], _result["patient_name"], _result["invoice_amount"])) elements.append(PageBreak()) if med_p and qs.medical_prescription and bool(qs.medical_prescription.file) \ and qs.medical_prescription.file.file.name not in already_added_images: elements.append( Image(qs.medical_prescription.file, width=469.88, height=773.19)) elements.append(PageBreak()) already_added_images.append( qs.medical_prescription.file.file.name) recap_data = _build_recap(summary_data) elements.extend(recap_data[0]) elements.append(PageBreak()) elements.extend(_build_final_page(recap_data[1], recap_data[2])) return elements
def _build(self, doc, component, unknowns, blanks, collate=True): ''' needs to return flowables, templates flowables: Flowable list templates: PageTemplate list ''' flowables = [ ComponentFlowable(component), PageBreak(), ] ts = self._new_style(header_line_idx=1, header_line_width=2) ts.add('SPAN', (0, 0), (-1, 0)) if collate: unknowns.extend(blanks) ans = sorted(unknowns, key=lambda x: x.timestamp) bidx = [ i for i, ai in enumerate(ans) if ai.analysis_type.startswith('blank') ] for bi in bidx: ts.add('BACKGROUND', (0, bi + 2), (-1, bi + 2), colors.lightgrey) ai = unknowns[0] title = ' '.join(map(str.capitalize, ai.analysis_type.split('_'))) t = self._make_table(ans, ts, title) flowables.append(t) else: for ans in (unknowns, blanks): ai = ans[0] title = ' '.join( map(str.capitalize, ai.analysis_type.split('_'))) t = self._make_table(ans, ts, title) flowables.append(t) flowables.append(self._new_spacer(0, 0.5)) # frames = [self._default_frame(doc)] # template = self._new_page_template(frames) return flowables, None
def endFunction(self, name, doc, sig): "Append a drawing to the story for special function names." if name[:6] != 'sample': return if VERBOSE: print 'GraphPdfDocBuilder.endFunction(%s...)' % name PdfDocBuilder0.endFunction(self, name, doc, sig) aFunc = eval('self.skeleton.moduleSpace.' + name) drawing = aFunc() self.story.append(Spacer(0 * cm, 0.5 * cm)) self._showFunctionDemoCode(aFunc) self.story.append(Spacer(0 * cm, 0.5 * cm)) self._showDrawingDemo(drawing) self.story.append(PageBreak())
def create_document(filename): import json import os from reportlab.lib.pagesizes import A4, letter from reportlab.platypus import SimpleDocTemplate, Table from reportlab.platypus.flowables import PageBreak filename = filename.strip() company_names = { 500112: 'SBIN', 500325: 'RELIANCE INDUSTRIES LTD', 532540: 'TATA CONSULTANCY SERVICES LTD', 500209: 'INFOSYS LTD', 532174: 'ICICI BANK LTD', 507685: 'WIPRO LTD', 530965: 'INDIAN OIL CORPORATION LTD', 500182: 'HERO MOTOCORP LTD', 532210: 'CITY UNION BANK LTD', 500180: 'HDFC Bank Ltd', 500680: 'PFIZER LTD' } with open(filename, "r") as fp: ipynbfile = json.load(fp) outputdata = list() get_text(ipynbfile, outputdata) if outputdata == []: return tableformat = convert_to_table_format(outputdata) filename = os.path.splitext(filename)[0] pdf = SimpleDocTemplate(filename + ".pdf", pagesize=letter) width = pdf.width height = pdf.height content = [] for table in tableformat: myw = width / len(table[0]) + 1 myh = height / len(table[1]) + 1 table = Table(table, myw, myh) content.append(table) content.append(PageBreak()) pdf.build(content)
def create_report(self, data_dict, buff=None): self.data = data_dict if not buff: buff = io.BytesIO() pages = [x for x in dir(self) if x.startswith("_page_")] story = [] for page in pages: elems = getattr(self, page)() story.extend(elems) story.append(PageBreak()) page_t = PageTemplate('normal', [ Frame( self.page_margin[0], self.page_margin[1], self.page_size[0] - self.page_margin[0] * 2, self.page_size[1] - self.page_margin[1] * 2, leftPadding=0, bottomPadding=0, rightPadding=0, topPadding=0, ) ]) doc_t = SignatureDocTemplate( buff, pagesize=letter, title=self.title, author=self.author, leftMargin=self.page_margin[0], rightMargin=self.page_margin[0], topMargin=self.page_margin[1], bottomMargin=self.page_margin[1], ) doc_t.addPageTemplates(page_t) metadata = doc_t.build(story) buff.seek(0) return { "metadata": metadata, "document": buff }