def pdf_write(generated_pdf_path): """ 生成pdf :return: """ # 增加的字体,支持中文显示,需要自行下载支持中文的字体 font_path = current_app.config.get("SIM_SUN") pdfmetrics.registerFont(TTFont('SimSun', os.path.join(font_path, 'SimSun.ttf'))) styles = getSampleStyleSheet() styles.add(ParagraphStyle(fontName='SimSun', name='SimSun', leading=20, fontSize=12)) data = list() # 添加一段文字 paragraph = paragraph_model("测试添加一段文字") data.append(paragraph) data.append(PageBreak()) # 分页标识 # 添加table和图片 table = table_model() data.append(table) data.append(PageBreak()) # 分页标识 img = image_model() data.append(img) # 设置生成pdf的名字和编剧 pdf = SimpleDocTemplate(generated_pdf_path, rightMargin=0, leftMargin=0, topMargin=40, bottomMargin=0, ) # 设置pdf每页的大小 pdf.pagesize = (9 * inch, 10 * inch) pdf.multiBuild(data) return generated_pdf_path
def write_character_style_test(): Style=getSampleStyleSheet() filename = PROJECT_PATH + '/file_location/reportlab-character_style.pdf' # 字体的样式 bt = Style['Normal'] # bt.fontName='song' # 使用的字体 # 字号 bt.fontSize=14 # 该属性支持自动换行,』CJK『用于中文方式的换行,用于英文中会截断单词,造成 bt.wordWrap = 'CJK' # 阅读困难,可改为'Normal' # 该属性支持第一行开头的空格 bt.firstLineIndent = 32 # 该属性用于设置行距 bt.leading = 20 ct=Style['Normal'] # ct.fontName='song' ct.fontSize=12 # 居中 ct.alignment=1 ct.textColor = colors.red t = Paragraph('hello', bt) pdf=SimpleDocTemplate(filename) pdf.multiBuild([t])
def multiBuild(self, story, filename=None, canvasMaker=Canvas, maxPasses=10, onFirstPage=_doNothing, onLaterPages=_doNothing): self._calc() #in case we changed margins sizes etc frameT = Frame(self.leftMargin, self.bottomMargin, self.width, self.height, id='normal') # we add the function for the later pages to the onPageEnd of the PageTemplate because we must know the part for the page self.addPageTemplates([ PageTemplate(id='First', frames=frameT, onPage=onFirstPage, pagesize=self.pagesize), PageTemplate(id='Later', frames=frameT, onPageEnd=onLaterPages, pagesize=self.pagesize) ]) if onFirstPage is _doNothing and hasattr(self, 'onFirstPage'): self.pageTemplates[0].beforeDrawPage = self.onFirstPage if onLaterPages is _doNothing and hasattr(self, 'onLaterPages'): self.pageTemplates[1].beforeDrawPage = self.onLaterPages SimpleDocTemplate.multiBuild(self, story, self._filename, canvasMaker, maxPasses)
def generate_pdf(table_header, datas): """ 生成pdf :return: """ path = "test.pdf" data = list() # 添加table table = table_model(table_header, datas) data.append(table) data.append(PageBreak()) # 分页标识 # 设置生成pdf的名字和编剧 pdf = SimpleDocTemplate(path, rightMargin=0, leftMargin=0, topMargin=0, bottomMargin=0) # 设置pdf每页的大小 pdf.pagesize = (20 * inch, 16 * inch) pdf.multiBuild(data) # buff.seek(0) # return buff return path
def generate(output_file, starting_date, ending_date=None): if not ending_date: ending_date = datetime.datetime.utcnow() events = get_events(starting_date, ending_date) events.sort(key=lambda e: e.title) timeline_data = get_timeline_data(events) for event, periods in timeline_data: print(event.title) for period in periods: print(" "*int(80*period[0]), "#"*int(80*(period[1]-period[0]))) print() story = list() try: insert_title(story, starting_date, ending_date) for event, periods in timeline_data: event.set_timeline(TimelineItem(event.title, periods)) insert_events(story, events, with_summary=len(events) > 20) finally: doc = SimpleDocTemplate(output_file) doc.multiBuild(story) return output_file
def pdformat(self): with con: items = [] cur = con.cursor() qpaper = str(self.ui.lineEdit.text()) with open(qpaper) as fp: for line in fp: words = line.split() for word in words: cur.execute('SELECT * from kywrds WHERE kywrd like ?', [word]) result = cur.fetchall() if result: for row in result: result1 = row[0] result2 = row[1] result3 = row[2] address = 'Level: ' + str( result1 ) + ' ' + ' ' + ' ' + ' ' + 'Percentage: ' + str( result3 ) + '%' + ' ' + 'Keyword: ' + result2 items.append( platypus.Paragraph(address, PS('body'))) doc = SimpleDocTemplate('report1.pdf') doc.multiBuild(items)
def getdetails(self): with con: cur = con.cursor() pid = str(self.ui.lineEdit_3.text()) cur.execute('SELECT count(*) FROM ptestresults where pid like ? AND (ptestresults.t1 = "P" OR ptestresults.t2 = "P")',['%'+ pid + '%']); result = cur.fetchall() for row in result: tcount = row[0] # print tcount cur.execute('SELECT s1,s2,s3,s4,s5,s6,s7,s8,s9,s10 FROM psymptoms where pid like ? ',['%'+ pid + '%']); result1 = cur.fetchall() cnt1 = 0 result2 = str(" ") for row in result1: if row[0] != 'N': cnt1 = cnt1+1 result2 = result2 + str("___________________ You have Pain in Throat Region while taking the food ________________________") if row[1] != 'N': cnt1 = cnt1+1 result2 = result2 + str("____________________ You have Pain in chest to abdomen Region_________________________") if row[2] != 'N': cnt1 = cnt1+1 result2 = result2 + str("_____________ Your pain is lasting for several hours ______________") if row[3] != 'N': cnt1 = cnt1+1 result2 = result2 + str(" You have difficulty in swallowing food ") if row[4] != 'N': cnt1 = cnt1+1 result2 = result2 + str(" You are unable to swallow food") if row[5] != 'N': cnt1 = cnt1+1 result2 = result2 + str(" Food is stucking in throat and chest region") if row[6] != 'N': cnt1 = cnt1+1 result2 = result2 + str(" You have a feeling of fullness without taking food ") if row[7] != 'N': cnt1 = cnt1+1 result2 = result2 + str(" You are suffering from low to high fever ") if row[8] != 'N': cnt1 = cnt1+1 result2 = result2 + str(" You are shaking with chills") if row[9] != 'N': cnt1 = cnt1+1 result2 = result2 + str(" You are suffering from chroniic cough ") # print cnt1 if (tcount > 0): # print "Consult Specialist immediately as +ve test results are there" result2 = result2 + str("Consult Specialist immediately as +ve test results are there") if ((tcount == 0) and (cnt1 > 5)): # print "Consult Specialist immediately as above mentioned +ve symptoms are there" result2 = result2 + str("Consult Specialist immediately as above mentioned +ve symptoms are there") if ((tcount == 0) and (cnt1 <= 5)): # print "Consult Specialist as above mentioned +ve symptoms are there" result2 = result2 + str("Consult Specialist as above mentioned +ve symptoms are there") items = [] items.append(platypus.Paragraph(result2,PS('body'))) doc = SimpleDocTemplate('medrep1.pdf') doc.multiBuild(items)
def pdf_Platypus(request): response = HttpResponse(content_type='application/pdf') #tipo de rpta #pdf_name = "expedientes1.pdf" # nombre para la descarga #response['Content-Disposition'] = 'attachment; filename=%s' % pdf_name #descarga con el nombre indicado buff = BytesIO() #almacena el doc #c = canvas.Canvas(buff) doc = SimpleDocTemplate( buff, pagesize=A4, rightMargin=50, #miderecha leftMargin=50, #mi izquierda topMargin=60, bottomMargin=70, #inferior hoja ) #plantilla del doc enlazado al buffer expedientes = [] #lista para generar doc styles = getSampleStyleSheet() #estilos style = styles['Title'] style1 = styles['Normal'] style.spaceAfter = 0.3 * inch style.fontSize = 21 style.fontName = "Times-Roman" style.textColor = "Blue" #style.alignment=TA_JUSTIFY """p = ParagraphStyle('parrafos', fontSize = 28, fontName="Times-Roman")""" header = Paragraph("Listado de expedientes", style) #encabezado doc #header = Paragraph("Listado de expedientes", styles['Heading1'])#encabezado doc #header = Paragraph("Listado de expedientes", p)#encabezado doc """f=Image('static/img/admin.png', width=30, height=30) f.hAlign = 'LEFT' expedientes.append(f) expedientes.append(Spacer(1, 0.25*inch))""" expedientes.append(header) #agrega encabezado del doc a lista headings = ('Nombre', 'Anio', 'descripcion', 'Procede' ) #cabecera de tabla allclientes = [(Paragraph(p.nombre, style1), p.anio, Paragraph(p.descripcion, style1), Paragraph(str(p.serie), styles['Normal'])) for p in expediente.objects.all()] #registros t = Table([headings] + allclientes, colWidths=(50 * mm, 10 * mm, 70 * mm, 30 * mm), repeatRows=1) #crea tabla #t = Table([headings] + allclientes,repeatRows=1)#crea tabla t.setStyle( TableStyle([('GRID', (0, 0), (3, -1), 1, colors.dodgerblue), ('LINEBELOW', (0, 0), (-1, 0), 2, colors.darkblue), ('BACKGROUND', (0, 0), (-1, 0), colors.dodgerblue) ])) #estilos tabla expedientes.append(t) #agrega tabla a lista #doc.build(expedientes) #genera doc en base a lista doc.multiBuild(expedientes, canvasmaker=FooterCanvas) response.write( buff.getvalue()) #imprimimos el doc que sta en el buffer(pdf) buff.close() #cerramos buffer return response #retornamos pdf
def generate_report(self): story = [] try: doc = SimpleDocTemplate("test_report.pdf", pagesize=A4, rightMargin=5, leftMargin=5, topMargin=5, bottomMargin=5) story.append(self.generate_header_table()) story.append(self.generate_padding(10)) story.append(self.generate_info_table()) story.append(self.generate_padding(10)) if 'complete' not in self.test_type.lower(): story.append( Table([["*{}".format(self.test_type)]], colWidths=400, style=None)) story.append(self.generate_data_table()) story.append(self.generate_padding(25)) story.append(self.generate_footer_table()) doc.multiBuild(story) os.startfile(r'test_report.pdf') except Exception as e: raise e
def multiBuild(self, story, filename=None, canvasMaker=Canvas, maxPasses=10, onFirstPage=_doNothing, onLaterPages=_doNothing): self._calc() #in case we changed margins sizes etc frameT = Frame(self.leftMargin, self.bottomMargin, self.width, self.height, id='normal') # we add the function for the later pages to the onPageEnd of the PageTemplate because we must know the part for the page self.addPageTemplates([PageTemplate(id='First',frames=frameT, onPage=onFirstPage,pagesize=self.pagesize), PageTemplate(id='Later',frames=frameT, onPageEnd=onLaterPages,pagesize=self.pagesize)]) if onFirstPage is _doNothing and hasattr(self,'onFirstPage'): self.pageTemplates[0].beforeDrawPage = self.onFirstPage if onLaterPages is _doNothing and hasattr(self,'onLaterPages'): self.pageTemplates[1].beforeDrawPage = self.onLaterPages SimpleDocTemplate.multiBuild(self, story, self._filename, canvasMaker, maxPasses)
def simple_toc(): doc = SimpleDocTemplate("Ejemplo11.pdf") story = [] styles = getSampleStyleSheet() toc = TableOfContents() toc.levelStyles = [ ParagraphStyle(fontName='Helvetica', fontSize=14, name='Heading1', leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=16), ParagraphStyle(fontName='Times-Roman', fontSize=14, name='Heading2', leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=16), ] story.append(toc) ipsum = '''Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.''' para = Paragraph("The Beginning", style=styles['Heading1']) toc.addEntry(0, 'The Beginning', 1) story.append(para) para = Paragraph(ipsum, style=styles['Normal']) story.append(para) story.append(PageBreak()) para = Paragraph("The Middle", style=styles['Heading1']) toc.addEntry(0, 'The Middle', 2) story.append(para) para = Paragraph("The Middle Sub-Header", style=styles['Heading2']) toc.addEntry(1, 'The Middle Sub-Header', 2) story.append(para) para = Paragraph(ipsum, style=styles['Normal']) story.append(para) story.append(PageBreak()) para = Paragraph("The End", style=styles['Heading1']) toc.addEntry(0, 'The End', 3) story.append(para) doc.multiBuild(story)
def main(): try: path_omd = Path("%s/git/check_mk/omd/" % Path.home()) path_license_texts = path_omd / "license_sources/license_texts/" path_pdf = path_omd / "License_texts.pdf" path_cover = path_omd / "license_sources/licenses_cover.pdf" except: raise OSError registerFont(TTFont('Calibri', 'Calibri.ttf')) doc = SimpleDocTemplate( str(path_pdf), pagesize=letter, bottomMargin=.4 * inch, topMargin=.6 * inch, rightMargin=.8 * inch, leftMargin=.8 * inch) toc = TableOfContents() toc.levelStyles = [ PS(fontName='Calibri', fontSize=14, name='TOCHeading1', leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=16), PS(fontSize=12, name='TOCHeading2', leftIndent=40, firstLineIndent=-20, leading=12), ] title = PS(name='Title', fontSize=24, leading=16) h1 = PS(name='Heading1', fontSize=16, leading=16) normal = PS(name='Normal', fontSize=8) spacer = Spacer(width=0, height=2 * cm) story = [] story.append(Paragraph('<b>Content</b>', title)) story.append(spacer) story.append(toc) for file_path in sorted(path_license_texts.iterdir()): with file_path.open(encoding="utf-8") as txt_file: headline = "<b>%s</b>" % txt_file.readline().replace("\n", "<br /><br />\n") text_content = txt_file.read().replace("\n", "<br />\n") story.append(PageBreak()) story.append(heading(headline, h1)) story.append(Paragraph(text_content, normal)) doc = MyDocTemplate(str(path_pdf)) doc.multiBuild(story) pdf_merger = PdfFileMerger() pdf_merger.append(PdfFileReader(str(path_cover))) pdf_merger.append(PdfFileReader(str(path_pdf))) pdf_merger.write(str(path_pdf))
def generate_pdf_new(data_users): # List of users logo = Image('logo.jpg', 1 * inch, 1 * inch) logo.hAlign = 'LEFT' data = data_users buf = BytesIO() pdf = SimpleDocTemplate(buf, pagesize=letter) table = Table(data) # add style style = TableStyle([ ('BACKGROUND', (0, 0), (3, 0), HexColor('#C7D4DB')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.black), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ('FONTNAME', (0, 0), (-1, 0), 'Courier-Bold'), ('FONTSIZE', (0, 0), (-1, 0), 10), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.beige), ]) table.setStyle(style) # 2) Alternate backgroud color rowNumb = len(data) for i in range(1, rowNumb): bc = colors.white ts = TableStyle([('BACKGROUND', (0, i), (-1, i), bc)]) table.setStyle(ts) # 3) Add borders ts = TableStyle([ ('BOX', (0, 0), (-1, -1), -1, HexColor('#e7eaed')), ('LINEBEFORE', (2, 1), (2, -1), -1, colors.red), ('LINEABOVE', (0, 2), (-1, 2), -1, colors.green), ('GRID', (0, 0), (-1, -1), -1, HexColor('#e7eaed')), ]) table.setStyle(ts) elems = [] elems.append(logo) elems.append(table) pdf.multiBuild(elems) pdf = buf.getvalue() return pdf
def export(self, filename, data_align='LEFT', table_halign='LEFT'): """ Export the data to a PDF file. Arguments: filename - The filename for the generated PDF file. data_align - The alignment of the data inside the table (eg. 'LEFT', 'CENTER', 'RIGHT') table_halign - Horizontal alignment of the table on the page (eg. 'LEFT', 'CENTER', 'RIGHT') """ page_size = landscape(A4) doc = SimpleDocTemplate(filename, pagesize=page_size, topMargin=27*mm, leftMargin=9*mm, rightMargin=9*mm) story = [] # # Header font_size = 2 left = ParagraphStyle(name="left", font="Helvetica", alignment=TA_LEFT, font_size=font_size) right = ParagraphStyle(name="right", font="Helvetica", alignment=TA_RIGHT, font_size=font_size) # Table style = TableStyle([ ('ALIGN', (0, 0), (-1, 0), 'CENTER'), ('ALIGN',(0, 0),(0,-1), data_align), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('INNERGRID', (0, 0), (-1, -1), 0.50, colors.black), ('BOX', (0,0), (-1,-1), 0.25, colors.black), ]) font_size = 8 # self.__get_font_size(self.data, 10) converted_data = self.__convert_data(style, font_size) col_widths = self.__get_col_widths(font_size) table = Table(converted_data, colWidths=col_widths, hAlign=table_halign, repeatRows=1) table.setStyle(style) story.append(table) doc.multiBuild(story, canvasmaker=FooterCanvas, onFirstPage=self.header, onLaterPages=self.header) update_box = QMessageBox() update_box.setText("Successfully Saved.") p = QPixmap() p.load("info.png") update_box.setIconPixmap(p) if update_box.exec(): pass
def multiBuild(self, story, filename=None, canvasMaker=Canvas, maxPasses=10, onFirstPage=_doNothing, onLaterPages=_doNothing): self._calc() #in case we changed margins sizes etc frameT = Frame(self.leftMargin, self.bottomMargin, self.width, self.height, id='normal') self.addPageTemplates([ PageTemplate(id='Later', frames=frameT, onPageEnd=onLaterPages, pagesize=self.pagesize) ]) if onLaterPages is _doNothing and hasattr(self, 'onLaterPages'): self.pageTemplates[0].beforeDrawPage = self.onLaterPages SimpleDocTemplate.multiBuild(self, story, maxPasses, canvasmaker=canvasMaker) self._prepareTOC() contentFile = self.filename self.filename = FileDummy() self.pageTemplates = [] self.addPageTemplates([ PageTemplate(id='First', frames=frameT, onPage=onFirstPage, pagesize=self.pagesize) ]) if onFirstPage is _doNothing and hasattr(self, 'onFirstPage'): self.pageTemplates[0].beforeDrawPage = self.onFirstPage self.addPageTemplates([ PageTemplate(id='Later', frames=frameT, onPageEnd=self.laterPages, pagesize=self.pagesize) ]) if onLaterPages is _doNothing and hasattr(self, 'onLaterPages'): self.pageTemplates[1].beforeDrawPage = self.onLaterPages SimpleDocTemplate.multiBuild(self, self._tocStory, maxPasses, canvasmaker=canvasMaker) self.mergePDFs(self.filename, contentFile)
def __init__(self, newer_dict, pdfpath, **kwargs): #self.newer_dict = newer_dict self.pdfpath = pdfpath self.woning_naam = newer_dict['bouwheer'] self.werf_straat = newer_dict['werfadres'] self.werf_gemeente = newer_dict['werfgemeente'] self.woning_straat = newer_dict['woning straat'] self.woning_gemeente = newer_dict['woning gemeente'] self.architect_naam = newer_dict['architect'] self.architect_straat = newer_dict['architect straat'] self.architect_gemeente = newer_dict['architect gemeente'] self.aannemer_naam = newer_dict['aannemer'] self.aannemer_straat= newer_dict['aannemer straat'] self.aannemer_gemeente = newer_dict['aannemer gemeente'] self.ingenieur_naam = newer_dict['ingenieur'] self.datum = time.strftime("%d/%m/%Y") self.dossier_nummer = newer_dict['dossier_nummer'] #adding styles styles=getSampleStyleSheet() self.add_styles(styles) # Content Story = [] # voorblad self.add_header(Story, styles) self.voorblad(Story, styles) Story.append(PageBreak()) #comment out for empty page bug?? #inhoudstafel self.add_header(Story, styles) self.inhouds_tafel(Story, styles) Story.append(PageBreak()) #bundel self.add_header(Story, styles) self.beschrijving(Story, styles) # Build pdf #pdfpath = self.folder_scan[self.newer_dict['dossier']]['path'] + "//Stabiliteit//Algemene documenten//stabiliteitsbundel.pdf" doc = SimpleDocTemplate(self.pdfpath, pagesize=A4, rightMargin= 2*cm, leftMargin= 2*cm, topMargin= 2*cm, bottomMargin=100 ) doc.multiBuild(Story, canvasmaker = FooterCanvas)
def printPdf(self): filename = self.name + '_timetable.pdf' doc = SimpleDocTemplate(filename, pagesize=A4, rightMargin=30, leftMargin=30, topMargin=30, bottomMargin=18) doc.pagesize = portrait(A4) story = [] for i, day in enumerate(self.slots): data = [[''] * 5 for i in range(3)] data[0][0] = self.name data[1] = [ 'Date', 'Time', 'Course Code', 'Course Name', 'No. of\nStudents' ] data[2][0] = 'Day ' + str(i + 1) style = [('SPAN', (0, 0), (-1, 0)), ('SPAN', (0, 2), (-1, 2)), ('ALIGN', (0, 0), (-1, 1), 'CENTER'), ('VALIGN', (0, 0), (-1, 1), 'MIDDLE'), ('ALIGN', (0, 3), (-1, -1), 'CENTER'), ('VALIGN', (0, 3), (-1, -1), 'MIDDLE'), ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black)] for i, slot in enumerate(day): for sub in slot.subjects: d = slot.time_slot[0] time = '12:' if not slot.time_slot[1] // 100 in [0, 12]: time = str((slot.time_slot[1] // 100) % 12) + ':' time += str(slot.time_slot[1] % 100) time += 'PM' if (slot.time_slot[1] // 100) > 11 else 'AM' data.append([ d, time, sub.code, sub.name, sub.nbStudent(self.students) ]) start, end = len(data) - len(slot.subjects), len(data) - 1 style.append(('SPAN', (0, start), (0, end))) style.append(('SPAN', (1, start), (1, end))) if i + 1 != len(day): style.append(('SPAN', (0, end + 1), (-1, end + 1))) data.append([''] * 5) table = Table(data) table.setStyle(TableStyle(style)) story.append(table) story.append(PageBreak()) doc.multiBuild(story)
def printPdf(self, examName): for c in self.classrooms: if not c.empty(): c.printPdf(examName, self.time_slot) # Teacher table filename = examName + '_' + self.time_slot[0] + '-' + str( self.time_slot[1]) + '_teacher' + '.pdf' doc = SimpleDocTemplate(filename, pagesize=A4, rightMargin=30, leftMargin=30, topMargin=30, bottomMargin=18) doc.pagesize = portrait(A4) data = [[examName, ''], ['', '']] data[1][0] = self.time_slot[0] + ' ' + str(self.time_slot[1] // 100) + ':' +\ str(self.time_slot[1] % 100) + ' to ' + str(self.time_slot[2] // 100) +\ ':' + str(self.time_slot[2] % 100) style = [ ('SPAN', (0, 0), (-1, 0)), ('SPAN', (0, 1), (-1, 1)), ('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), ] for c in self.classrooms: if not c.empty() and c.teacher: data.append(["Classroom : " + c.name, ""]) style.append(('SPAN', (0, len(data) - 1), (-1, len(data) - 1))) data.append([ "TEACHER", c.teacher.lastname + ' ' + c.teacher.firstname ]) for t in c.tas: data.append([ 'TA', t.lastname + ' ' + t.firstname + '\n(' + t.roll_no + ')' ]) if len(c.tas) > 1: style.append(('SPAN', (0, len(data) - len(c.tas)), (0, len(data) - 1))) table = Table(data) table.setStyle(TableStyle(style)) doc.multiBuild([table])
def get_conf_pdf(conf): content = [] title = Style['Title'] title.fontName = 'song' info = Style['Normal'] info.fontName = 'song' info.alignment = 1 heading = Style['Normal'] heading.fontName = 'song' heading.fontSize = 13 heading.leading = 20 bodytext = Style['BodyText'] bodytext.fontName = 'song' bodytext.wordWrap = 'CJK' bodytext.firstLineIndent = 32 content.append(Paragraph(conf.name, title)) start_date = conf.date end_date = start_date + conf.duration info_text = str(start_date.date()) + ' ' + str( start_date.time()) + ' ~ ' + str(end_date.time()) + "\n" + conf.host content.append(Paragraph(info_text, info)) if conf.introduction is not None: content.append(Paragraph('会议简介', heading)) content.append(Paragraph(conf.introduction, bodytext)) if conf.guest_intro is not None: content.append(Paragraph('嘉宾介绍', heading)) content.append(Paragraph(conf.guest_intro, bodytext)) if conf.remark is not None: content.append(Paragraph('备注', heading)) content.append(Paragraph(conf.remark, bodytext)) filename = 'static/pdfs/' + str(conf.id) + '_' + conf.name + '.pdf' filename = os.path.join(app.root_path, filename) pdf = SimpleDocTemplate(filename) pdf.multiBuild(content) return filename
def multiBuild(self, story, filename=None, canvasMaker=Canvas, maxPasses=10, onFirstPage=_doNothing, onLaterPages=_doNothing): self._calc() #in case we changed margins sizes etc frameT = Frame(self.leftMargin, self.bottomMargin, self.width, self.height, id='normal') self.addPageTemplates([PageTemplate(id='Later',frames=frameT, onPageEnd=onLaterPages,pagesize=self.pagesize)]) if onLaterPages is _doNothing and hasattr(self,'onLaterPages'): self.pageTemplates[0].beforeDrawPage = self.onLaterPages SimpleDocTemplate.multiBuild(self, story, maxPasses, canvasmaker=canvasMaker) self._prepareTOC() contentFile = self.filename self.filename = FileDummy() self.pageTemplates = [] self.addPageTemplates([PageTemplate(id='First',frames=frameT, onPage=onFirstPage,pagesize=self.pagesize)]) if onFirstPage is _doNothing and hasattr(self,'onFirstPage'): self.pageTemplates[0].beforeDrawPage = self.onFirstPage self.addPageTemplates([PageTemplate(id='Later',frames=frameT, onPageEnd=self.laterPages,pagesize=self.pagesize)]) if onLaterPages is _doNothing and hasattr(self,'onLaterPages'): self.pageTemplates[1].beforeDrawPage = self.onLaterPages SimpleDocTemplate.multiBuild(self, self._tocStory, maxPasses, canvasmaker=canvasMaker) self.mergePDFs(self.filename, contentFile)
def main(): # setup arguments parser = argparse.ArgumentParser(description='Put description here') parser.add_argument('-o', '--outfile', help='PDF file', required="True") parser.add_argument('-t', '--template', help='Template file to write from', required="True") parser.add_argument('-i', '--image', help='Inline image, usually used for a logo') args = parser.parse_args() pdf_file = SimpleDocTemplate(args.outfile, pagesize=letter, rightMargin=72, leftMargin=72, topMargin=72, bottomMargin=18) pdf = get_template(args) pdf_file.multiBuild(pdf) print("PDF File written to: ", args.outfile)
def printPdf(self, exam_name, time_slot): filename = exam_name + '_' + time_slot[0] + '-' + str( time_slot[1]) + '_' + self.name + '.pdf' doc = SimpleDocTemplate(filename, pagesize=A4, rightMargin=30, leftMargin=30, topMargin=30, bottomMargin=18) doc.pagesize = landscape(A4) # Classroom table data = [[''] * self.n_column for i in range(self.n_row + 3)] data[0][0] = exam_name data[1][0] = 'Classroom: ' + self.name + ' ' + time_slot[0] + ' ' + \ str(time_slot[1] // 100) + ':' + str(time_slot[1] % 100) + ' to ' +\ str(time_slot[2] // 100) + ':' + str(time_slot[2] % 100) for i in range(self.n_column): data[2][i] = 'C' + str(i + 1) for i in range(self.n_row): for j in range(self.n_column): if self.map_student[i][j]: data[i + 3][j] = self.map_student[i][j].roll_no style = TableStyle([ ('SPAN', (0, 0), (-1, 0)), ('SPAN', (0, 1), (-1, 1)), ('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), ]) table = Table(data) table.setStyle(style) doc.multiBuild([table])
def contrato_maestro_pmoral_pdf(request): # Get the information for the contract cliente = Cliente.objects.get(pk=3) # documentacion = Documentacion_PMoral.objects.get(pk=pk_docu) # Create the HttpResponse object with the appropriate PDF headers. response = HttpResponse(content_type='application/pdf') pdf_name = "clientes.pdf" buff = BytesIO() doc = SimpleDocTemplate( buff, pagesize=letter, rightMargin=40, leftMargin=40, topMargin=60, bottomMargin=45, ) PAGE_HEIGHT = letter[1] PAGE_WIDTH = letter[0] # Our container for 'Flowable' objects elements = [] # A large collection of style sheets pre-made for us styles = getSampleStyleSheet() # Set some styles for paragraphs styles.add( ParagraphStyle(name='RightAlign', fontSize=10, alignment=TA_RIGHT)) styles.add(ParagraphStyle(name='CenterAlign', alignment=TA_CENTER)) styles.add(ParagraphStyle(name='LeftAlign', alignment=TA_LEFT)) styles.add(ParagraphStyle(name='Justified', alignment=TA_JUSTIFY)) # Set some styles for tables Cuadricula = TableStyle([ ('GRID', (0, 0), (-1, -1), 0.25, colors.blue), ('BOX', (0, 0), (-1, -1), 0.50, colors.blue), ('ALIGN', (1, 1), (-1, -1), 'RIGHT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ]) # Start to write document elements.append(Paragraph("Contrato No. 349", styles['RightAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph("CONTRATO MAESTRO DE ARRENDAMIENTO DE EQUIPO", styles['CenterAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """CONTRATO MAESTRO DE ARRENDAMIENTO DE EQUIPO (EL "CONTRATO DE ARRENDAMIENTO OPERATIVO Y/O ARRENDAMIENTO MAESTRO") DE FECHA 27 DE ABRIL DE 2017 QUE CELEBRAN ARRENDADORA AVANCE, SA. DE C.V. COMO EL "ARRENDADOR", Y LAS PERSONAS FISICAS Y/O MORALES QUE A CONTINUACION SE SENALAN COMO "ARRENDATARIO", DE ACUERDO CON LAS SIGUIENTES DECLARACIONES Y CLAUSULAS:""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append(Paragraph("P R O E M I O:", styles['CenterAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append(Paragraph("A) EL ARRENDATARIO", styles['LeftAlign'])) elements.append(Spacer(1, 0.3 * inch)) colwidths = (PAGE_WIDTH - (3.3 * inch), 2 * inch) rowheights = (0.3 * inch) data = ((cliente.Nombre_Empresa, "RFC: " + cliente.RFC), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) colwidths = (PAGE_WIDTH - (1.3 * inch), ) data = (("Escritura constitutiva de EL ARRENDATARIO:", ), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) x = PAGE_WIDTH - (1.3 * inch) colwidths = (x / 6, x / 6, x / 6, x / 6, x / 3) rowheights = (0.8 * inch) data = (( Paragraph("Escritura Constitutiva No.99,286", styles['LeftAlign']), Paragraph( """Ante el Licenciado: Luis Felipe del Valle Prieto Ortega""", styles['LeftAlign']), Paragraph("Notario Público No. 20 de la Ciudad de México", styles['LeftAlign']), Paragraph("Escritura de fecha: 10 de Febrero de 1992", styles['LeftAlign']), Paragraph( """Inscrita en el Registro Público de Comercio (RPPC) de: Tlalnepantla, Estado de México""", styles['LeftAlign']), ), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) colwidths = (x / 3, x * 2 / 3) rowheights = (0.4 * inch) data = (( Paragraph("Fecha de Inscripción en el RPPC: 26 de Junio de 1992", styles['LeftAlign']), Paragraph( """Datos de Registro: Partida 359, Volúmen 23, Libro Primero de Comercio""", styles['LeftAlign']), ), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) colwidths = (x / 6, x * 5 / 6) data = (( Paragraph("Poder de su representante:", styles['LeftAlign']), Paragraph("NOMBRE DEL REPRESENTANTE LEGAL: René Ramiro Pacheco Ortiz", styles['LeftAlign']), ), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) colwidths = (x / 6, x / 6, x / 6, x / 6, x / 3) rowheights = (0.8 * inch) data = (( Paragraph("Escritura Constitutiva No.99,286", styles['LeftAlign']), Paragraph("Ante el Licenciado: Luis Felipe del Valle Prieto Ortega", styles['LeftAlign']), Paragraph("Notario Público No. 20 de la Ciudad de México", styles['LeftAlign']), Paragraph("Escritura de fecha: 10 de Febrero de 1992", styles['LeftAlign']), Paragraph( "Inscrita en el Registro Público de Comercio (RPPC) de: Tlalnepantla, Estado de México", styles['LeftAlign']), ), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) colwidths = (x / 3, x * 2 / 3) rowheights = (0.4 * inch) paragraphs = [] info3 = Paragraph("Datos de Registro:", styles['LeftAlign']) info4 = Paragraph("Partida 359, Volúmen 23, Libro Primero de Comercio", styles['LeftAlign']) paragraphs.append(info3) paragraphs.append(info4) data = (( Paragraph("Fecha de Inscripción en el RPPC: 26 de Junio de 1992", styles['LeftAlign']), paragraphs, ), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) colwidths = (PAGE_WIDTH - (1.3 * inch), ) rowheights = (0.3 * inch) data = (( "Domicilio: Avenida de los Frailes 10, Colonia San Andrés Atenco Ampliación, Municipio Tlalnepantla de Baz, C.P. 54040, Estado de México", ), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) elements.append(Spacer(1, 0.3 * inch)) elements.append(Paragraph("B) EL OBLIGADO SOLIDARIO", styles['LeftAlign'])) elements.append(Spacer(1, 0.3 * inch)) colwidths = (x / 2, x / 2) rowheights = (0.28 * inch) data = ( (Paragraph("Nombre: René Ramiro Pacheco Ortiz", styles['LeftAlign']), Paragraph("Nacionalidad: Mexicana", styles['LeftAlign'])), (Paragraph("Originario de: Guanajuato", styles['LeftAlign']), Paragraph("Fecha de Nacimiento: 06 de Enero de 1950", styles['LeftAlign'])), (Paragraph("Tipo de ID: IFE: 0877008103318", styles['LeftAlign']), Paragraph("Caducidad de la ID: 2021", styles['LeftAlign'])), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) rowheights = (0.7 * inch) data = ((Paragraph("RFC: PAOR500106V63", styles['LeftAlign']), Paragraph( """Domicilio: Puerta de Hierro 21, Fraccionamiento Campestre del Lago, Municipio Cuautitlán Izcalli, C.P. 54766, Estado de México""", styles['LeftAlign'])), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) elements.append(Spacer(1, 0.3 * inch)) elements.append(Paragraph("C) EL DEPOSITARIO:", styles['LeftAlign'])) elements.append(Spacer(1, 0.3 * inch)) colwidths = (x / 2, x / 2) rowheights = (0.28 * inch) data = ( (Paragraph("Nombre: René Ramiro Pacheco Ortiz", styles['LeftAlign']), Paragraph("Nacionalidad: Mexicana", styles['LeftAlign'])), (Paragraph("Originario de: Guanajuato", styles['LeftAlign']), Paragraph("Fecha de Nacimiento: 06 de Enero de 1950", styles['LeftAlign'])), (Paragraph("Tipo de ID: IFE: 0877008103318", styles['LeftAlign']), Paragraph("Caducidad de la ID: 2021", styles['LeftAlign'])), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) rowheights = (0.7 * inch) data = ((Paragraph("RFC: PAOR500106V63", styles['LeftAlign']), Paragraph( """Domicilio: Puerta de Hierro 21, Fraccionamiento Campestre del Lago, Municipio Cuautitlán Izcalli, C.P. 54766, Estado de México""", styles['LeftAlign'])), ) t = Table(data, colwidths, rowheights, hAlign='LEFT') t.setStyle(Cuadricula) elements.append(t) elements.append(Spacer(1, 0.2 * inch)) elements.append(Paragraph("DECLARACIONES", styles['CenterAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph("I. El Arrendador declara, representa y garantiza que:", styles['LeftAlign'])) elements.append( Paragraph( """(a) Es una sociedad anónima de capital variable debidamente constituida de conformidad con las leyes de los Estados Unidos Mexicanos (“México”), según consta en la escritura pública Número 102,858 de fecha 07 de junio de 2004, otorgada ante la fe del Licenciado Cecilio González Márquez, Titular de la Notaria Pública Número 151 de la Ciudad de México, debidamente inscrita el Registro Público de la Propiedad y del Comercio de la Ciudad de México, con fecha 19 de agosto de 2004, bajo el Folio Mercantil Número 323641.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(b) Su objeto social es la compra, venta y arrendamiento de toda clase de bienes muebles y la prestación de servicios relacionados con los mismos, y por tanto, está autorizada a celebrar este Contrato de Arrendamiento Operativo.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(c) Sujeto a la suscripción del Anexo de Arrendamiento (según dicho término se define más adelante) que corresponda, está dispuesto a adquirir del proveedor, distribuidor, vendedor, fabricante o constructor que le indique el Arrendatario, el Equipo (según dicho término se define más adelante) descrito en los Anexos de Arrendamiento del presente, con el propósito de dar en arrendamiento dicho Equipo al Arrendatario, de conformidad a los términos y condiciones establecidos en el presente Contrato de Arrendamiento Operativo y los Anexos de Arrendamiento.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(d) Su representante cuenta con el poder y la capacidad necesaria para celebrar este Arrendamiento Maestro, según consta en la escritura Número 191,574 de fecha 19 de agosto de 2016, otorgada ante la fe del Licenciado Cecilio González Márquez, Titular de la Notaria Pública Número 151 de la Ciudad de México.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(e) Que su domicilio es el ubicado en: Cracovia 72 BIS, PO18, Nivel 3, Torre B, Col. San Ángel, Álvaro Obregón, Ciudad de México, C.P. 01000""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """II. El Arrendatario declara, representa y garantiza que:""", styles['LeftAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(a) Cuenta con todas las facultades necesarias para celebrar el presente Contrato de acuerdo a sus términos y condiciones.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(b) Se encuentra al corriente en el pago de todos los impuestos, derechos, contribuciones y demás obligaciones a su cargo, así como en los convenios de los cuales forma parte; """, styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(c) Es su deseo tomar en arrendamiento del Arrendador el Equipo descrito en los Anexos de Arrendamiento del presente, de conformidad con los términos y condiciones establecidos en el presente Contrato de Arrendamiento Operativo y los Anexos de Arrendamiento.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(d) Ha seleccionado el Equipo basado en su propio juicio y expresamente niega haberse basado en declaraciones hechas por el Arrendador.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(e) Declara que no participa en huelgas, no está en concurso mercantil o procedimientos similares que pudieran afectar su condición financiera.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(f) Declara que desde la fecha de la presentación de los estados financieros, estados de cuenta y/o declaraciones de impuestos (según le corresponda), cuya copia ha sido entregada a el Arrendador, a la fecha de la firma de este Contrato y del Anexo de Arrendamiento que Corresponda, no ha ocurrido cambio alguno que afecte en forma adversa en su situación financiera.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(g) En su caso, ser persona moral constituida de conformidad a las leyes de México según consta en el instrumento público descrito en el proemio del presente contrato, así mismo manifiesta que su representante Legal cuenta con el poder y la capacidad necesaria para celebrar este Contrato de Arrendamiento Operativo así como cualquiera de sus Anexos de Arrendamiento, y que las facultades que le fueron conferidas no le han sido de ninguna forma revocadas o limitadas.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(h) En términos de la Ley Federal de Protección de Datos Personales en Posesión de los Particulares y su Reglamento, el Arrendatario declara o en caso de ser persona moral su(s) apoderado(s) legal(es) declara(n) que ha(n) tenido a su disposición el aviso de privacidad del Arrendador y su respectivo contenido, el cual se le(s) ha dado a conocer previamente a la celebración del presente Contrato de Arrendamiento Operativo y que se encuentra para su consulta en la página web http://www.arrendadoraavance.com.mx/cotizador/aviso_privacidad.pdf/ , por lo que en este acto otorga(n) su consentimiento al Arrendador para el tratamiento de sus datos personales en términos de dicho aviso de privacidad. De igual manera reconoce(n) que podrá(n) verificar en dicha página, cualquier cambio en el mencionado aviso de privacidad.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """III. El Obligado Solidario y/o el Fiador declara, representa y garantiza que:""", styles['LeftAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(a) Cuenta con todas las facultades necesarias para celebrar el presente Contrato de acuerdo a sus términos y condiciones; """, styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(b) Se encuentra al corriente en el pago de todos los impuestos, derechos, contribuciones y demás obligaciones a su cargo, así como en los convenios de los cuales forma parte;""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(c) Es su deseo obligarse solidariamente y garantizar todas las obligaciones del Arrendatario en el presente Arrendamiento Maestro y sus Anexos de Arrendamiento.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(d) El Fiador garantiza el cumplimiento de las obligaciones contraídas respecto del presente Arrendamiento Maestro a cargo del Arrendatario, y las que a la fecha de firma del mismo y en el futuro se puedan derivar de la firma de sus respectivos Anexos de Arrendamiento, por lo que el Fiador renunciando expresamente a los beneficios de división orden y exclusión y a lo dispuesto en el artículo 1851 y 2487 del Código Civil o a establecer requisitos o condiciones a el Arrendador para que este pueda reclamar el cumplimiento de pago de las obligaciones contraídas bajo el Arrendamiento.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(e) Cuenta con los recursos económicos suficientes para dar cumplimiento a todas y cada una de las obligaciones, en especial las de pago, que derivan del presente Arrendamiento Maestro a cargo del Arrendatario, y las que a la fecha de firma del mismo y en el futuro se puedan derivar de la firma de sus respectivos Anexos de Arrendamiento.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(f) Declara que no participa en huelgas, no está en concurso mercantil o procedimientos similares que pudieran afectar su condición financiera.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(g) Declara que desde la fecha de presentación de los estados financieros, estados de cuenta y/o declaraciones de impuestos (según le corresponda), cuya copia ha sido entregada a el Arrendador, a la fecha de la firma de este Contrato y del Anexo de Arrendamiento que Corresponda, no ha ocurrido cambio alguno que afecte en forma adversa en su situación financiera.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(h) En su caso, ser persona moral constituida de conformidad a las leyes de México según consta en el instrumento público descrito en el proemio del presente contrato, así mismo manifiesta que su representante legal cuenta con el poder y la capacidad necesaria para celebrar este Contrato de Arrendamiento Operativo así como cualquiera de sus Anexos de Arrendamiento, y que las facultades que le fueron conferidas no le han sido de ninguna forma revocadas o limitadas.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """(i) En términos de la Ley Federal de Protección de Datos Personales en Posesión de los Particulares y su Reglamento, declaran o en caso de ser persona moral su(s) apoderado(s) legal(es) declara(n) que ha(n) tenido a su disposición el aviso de privacidad del Arrendador y su respectivo contenido, el cual se le ha dado a conocer previamente a la celebración del presente Contrato de Arrendamiento Operativo y que se encuentra para su consulta en la página web http://www.arrendadoraavance.com.mx/cotizador/aviso_privacidad.pdf/ , por lo que en este acto otorga(n) su consentimiento al Arrendador para el tratamiento de sus datos personales en términos de dicho aviso de privacidad. De igual manera reconoce(n) que podrá(n) verificar en dicha página, cualquier cambio en el mencionado aviso de privacidad.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """IV. El “DEPOSITARIO” declara, representa y garantiza que:""", styles['LeftAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """a) Cuenta con la capacidad necesaria para celebrar este Contrato de Arrendamiento Operativo y obligarse en sus términos.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """b) Protesta su legal y fiel desempeño a título gratuito, renunciando expresamente a percibir cualquier retribución al desempeño de su cargo, así como cualquier reembolso de gastos que por el desempeño de su cargo tenga que desembolsar, haciéndose sabedor de las responsabilidades civiles y penales en que incurren los depositarios sobre todo si se dispusieran de cualquiera de los bienes que recibe en su carácter de depositario.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """c) Es su deseo constituirse como depositario del Equipo objeto del presente contrato.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """d) En términos del presente Contrato de Arrendamiento Operativo el “DEPOSITARIO” se compromete y obliga frente a “El Arrendador” a hacerle entrega del Equipo en caso de presentarse un incumplimiento de “El Arrendatario” y siempre y cuando medie un requerimiento por escrito de “El Arrendador” por lo que el “DEPOSITARIO” reconoce y acepta todas las obligaciones y responsabilidades civiles y penales que la legislación mexicana le establece en su calidad de “DEPOSITARIO”.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """e) En términos de la Ley Federal de Protección de Datos Personales en Posesión de los Particulares y su Reglamento, declara que ha tenido a su disposición el aviso de privacidad del Arrendador y su respectivo contenido, el cual se le ha dado a conocer previamente a la celebración del presente Contrato de Arrendamiento Operativo y que se encuentra para su consulta en la página web http://www.arrendadoraavance.com.mx/cotizador/aviso_privacidad.pdf , por lo que en este acto otorga su consentimiento al Arrendador para el tratamiento de sus datos personales en términos de dicho aviso de privacidad. De igual manera reconoce que podrá verificar en dicha página, cualquier cambio en el mencionado aviso de privacidad.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """Conformes las partes con las Declaraciones que anteceden, convienen en las siguientes:""", styles['LeftAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append(Paragraph("""CLAUSULAS""", styles['CenterAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append(Paragraph("""PRIMERA. DEFINICIONES""", styles['LeftAlign'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """Salvo que el contexto de una frase lo requiera de otra forma, los términos que a continuación se mencionan y que sean escritos con inicial mayúscula a lo largo del presente Contrato de Arrendamiento Operativo y los Anexos de Arrendamiento, tendrán los siguientes significados, independientemente que se utilicen en singular o plural, y las palabras en género masculino se entenderán en género femenino y viceversa:""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """"Anexo de Arrendamiento" significará, cada uno de los documentos (en forma substancialmente igual a lo contenido en el anexo “A” del presente) que las partes suscriban en uno o sucesivos actos durante la vigencia del presente Contrato de Arrendamiento Maestro operativo y que contendrá la descripción del Equipo, así como todas las características del mismo, incluyendo el Certificado de Aceptación (según se define en el Arrendamiento Maestro) en la inteligencia de que cada Anexo de Arrendamiento se numerará progresivamente en forma sucesiva y se sujetará a los términos y condiciones en el presente Contrato de Arrendamiento Operativo.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Código Civil Aplicable”, significará el Código Civil para el Distrito Federal.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Código Procesal Aplicable”, significará el Código de Procedimientos Civiles para el Distrito Federal """, styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Contrato de Arrendamiento Operativo” y/o “Arrendamiento Maestro, es el contrato atípico e innominado por virtud del cual una persona moral especializada llamada arrendador otorga el uso y goce temporal de un bien mueble por plazo determinado y forzoso, a una persona física o moral llamada arrendatario la cual se obliga a pagar una contraprestación en dinero o en especie llamada renta. """, styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Día Hábil”, significará cualquier día en el cual los bancos estén abiertos para realizar operaciones bancarias ordinarias en la Ciudad de México, México y en la Ciudad de Nueva York, Nueva York, Estados Unidos de América.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Equipo”, significará el o los bienes y, en general conjuntamente, todos los activos que se describan en cada uno de los Anexos de Arrendamiento, y que son arrendados conforme a dicho Anexo de Arrendamiento y al presente, incluyendo todos los repuestos, partes, reparaciones, adiciones, agregados y accesorios que sean incorporados al mismo, ya sea que hayan sido hechos por el Arrendador o por el Arrendatario. Cualquier referencia u obligación respecto al Equipo se entenderá en todos los casos como un todo, independientemente del o los bienes y el o los activos descritos en el Anexo de Arrendamiento que corresponda.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Fecha de Inicio” significará la fecha en que el Plazo Básico Forzoso de un Anexo de Arrendamiento comience, en la inteligencia de que dicha fecha será la que se establezca en el Anexo de Arrendamiento respectivo.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph("""“IVA”, significará el Impuesto al Valor Agregado.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Pagos Periódicos”, significará los pagos parciales y consecutivos, que para efecto de conveniencia, el Arrendatario efectuará por concepto de la Renta, durante los periodos convenidos por las partes en los términos del Anexo de Arrendamiento que corresponda. """, styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Plazo Básico Forzoso”, significará el plazo durante el cual cualquier Anexo de Arrendamiento del presente Contrato de Arrendamiento Operativo estará en vigor, el cual comenzará en la Fecha de Inicio.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Reducciones”, significará cualquier retención, reducción, compensación, defensa, contrademanda o reconvención, no importa cómo se designe o la razón de la misma.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Renta”, significará la cantidad total que el Arrendatario deberá pagar al Arrendador por el arrendamiento del Equipo, tal y como se convenga en cada Anexo de Arrendamiento de Equipo, más el IVA en vigor.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Software” tiene el significado atribuido a dicho término en la Cláusula Vigésima de este Contrato de Arrendamiento Operativo.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """“Administración de arrendamiento” significará el pago distinto a las Rentas de los equipos y que el Arrendatario se obliga a pagar al Arrendador, incluyendo sin que sea limitativo, gastos de mantenimiento, alta y baja de placas, seguros, impuestos mismo que deberá ser cubierto a más tardar a los 5 (cinco) días naturales a partir de la solicitud del Arrendador.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append( Paragraph( """Todas las cantidades a que se haga referencia en este Contrato de Arrendamiento Operativo y cualquier Anexo de Arrendamiento serán en pesos, moneda de curso legal de los Estados Unidos Mexicanos.""", styles['Justified'])) elements.append(Spacer(1, 0.2 * inch)) elements.append(Paragraph("""""", styles['Justified'])) doc.multiBuild(elements, canvasmaker=ContratoCanvas) response.write(buff.getvalue()) buff.close() return response
('LINEBEFORE', (0, 0), (0, -1), 0.1, colors.grey), # 设置表格左边线颜色为灰色,线宽为0.1 ('TEXTCOLOR', (0, 0), (-1, 0), colors.royalblue), # 设置表格内文字颜色 ('TEXTCOLOR', (0, -1), (-1, -1), colors.red), # 设置表格内文字颜色 ('GRID', (0, 0), (-1, -1), 0.5, colors.grey), # 设置表格框线为grey色,线宽为0.5 ] component_table = Table(dis_list, colWidths=colWidths, style=style) return component_table Style = getSampleStyleSheet() n = Style['Normal'] data = [ [0, 1, 2, 3, 4, 5, 6, 7], [00, 11, 22, 33, 44, 55, 66, 77], [000, 111, 222, 333, 444, 555, 666, 777], [0000, 1111, 2222, 3333, 4444, 5555, 6666, 7777], ] z = table_model(data) my_str = u'''人这一生,选择往往比努力更重要!''' my_str1 = u"哈哈,恭喜,你成功了一半" t = Paragraph(my_str, bt) t1 = Paragraph(my_str1, bt) pdf = SimpleDocTemplate('ppff.pdf') pdf.multiBuild([t, t1, Paragraph('Title', n), z])
from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph, SimpleDocTemplate from reportlab.lib import colors Style = getSampleStyleSheet() bt = Style['Normal'] #字体的样式 # bt.fontName='song' #使用的字体 bt.fontSize = 14 #字号 bt.wordWrap = 'CJK' #该属性支持自动换行,'CJK'是中文模式换行,用于英文中会截断单词造成阅读困难,可改为'Normal' bt.firstLineIndent = 32 #该属性支持第一行开头空格 bt.leading = 20 #该属性是设置行距 ct = Style['Normal'] # ct.fontName='song' ct.fontSize = 12 ct.alignment = 1 #居中 ct.textColor = colors.red t = Paragraph('This', bt) pdf = SimpleDocTemplate('ppff.pdf') pdf.multiBuild([t])
# Send the data and build the file #elements.append(Spacer(1, 0.2 * inch)) #elements.append() elements.append(Paragraph("Per Acre", style1)) elements.append(table) elements.append(Spacer(1, 0.29 * inch)) elements.append(Paragraph("Total Value", style1)) elements.append(table1) elements.append(Spacer(1, 0.29 * inch)) elements.append( Paragraph( '<u>Note</u>:Both appraisers used 42 net acres as per the AOC.' ' Tim Sheehan rounded the total values.', styleN)) elements.append(Image('pic2.jpg', 8 * inch, 9 * inch)) elements.append(Paragraph("FARMLAND PRESERVATION PROGRAM NJ SADC", styleH)) elements.append(PageBreak()) elements.append(Image('pic2.jpg', 8 * inch, 9 * inch)) elements.append(Paragraph("FARMLAND PRESERVATION PROGRAM NJ SADC", styleH)) elements.append(Spacer(1, 0.5 * inch)) elements.append(PageBreak()) elements.append(Paragraph("Reviewers Comments", styleH)) elements.append(PageBreak()) elements.append(Paragraph("Certification Report", styleH)) elements.append(Spacer(1, 0.9 * inch)) elements.append(table3) #elements.append(table1) #elements.append(table1_with_style) #doc.build(elements) doc.multiBuild(elements, canvasmaker=FooterCanvas)
#pdfmetrics.registerFont(TTFont('song', r"C:\score_learn\python27\source_code\python27\GB2312.ttf")) pdfmetrics.registerFont(TTFont('song', r"C:\tools\ziti\GB2312.ttf")) from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph, SimpleDocTemplate from reportlab.lib import colors Style = getSampleStyleSheet() bt = Style['Normal'] #字体的样式 bt.fontName = 'song' #使用的字体 bt.fontSize = 10 #字号 bt.wordWrap = 'CJK' #该属性支持自动换行,CJK是中文模式下换行,用于英文会截断单词造成阅读困难,可以改成'Noraml' bt.firstLineIndent = 2 #该属性支持第一行开头空格 bt.leading = 20 #该属性是设置行距 ct = Style['Normal'] # ct.fontName='song' ct.fontSize = 12 ct.alignment = 0 #居中 ct.textColor = colors.red my_str = u'''人这一生,选择往往比努力更重要!''' my_str1 = u"哈哈,恭喜,你成功了一半" t = Paragraph(my_str, bt) t1 = Paragraph(my_str1, bt) pdf = SimpleDocTemplate('ppff.pdf') pdf.multiBuild([t, t1])
def profit_loss_pdf(pdf_name, company_name, company_address, revenue, cost_of_goods, total_salary, rental, office_supply, insurance, utilities, maintanence, telecommunication): doc = SimpleDocTemplate(pdf_name, rightMargin=72, leftMargin=72, topMargin=72, bottomMargin=18) styles = getSampleStyleSheet() styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY)) styles = getSampleStyleSheet() styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY)) styles.add(ParagraphStyle('Center', alignment=TA_LEFT, leftIndent=130)) styles.add(ParagraphStyle('one', alignment=TA_RIGHT, rightIndent=20)) styles.add(ParagraphStyle('two', alignment=TA_JUSTIFY, leftIndent=300)) styles.add(ParagraphStyle('t1', alignment=TA_JUSTIFY, leftIndent=200)) styles.add(ParagraphStyle('left', alignment=TA_LEFT)) line = MCLine(410) logo = "jibby.png" im = Image(logo, 1.3 * inch, 1 * inch) Story = [] ptext = '<font size=10><b>%s</b><br/>%s</font>' % (company_name, company_address) ptext_1 = Paragraph(ptext, styles['left']) able = [[ptext_1, '', im], ['', '', ''], ['', '', '']] t = Table(able, (5 * cm, 7 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # ('INNERGRID', (0, 0), (-1, -1), 1.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('BOX', (0, 0), (-1, -1), 1.50, colors.black), ])) Story.append(t) ptext3 = '<font size=13><b><u>Profit & Loss Statement for Jibby and Co</u></b></font>' ptext_3 = Paragraph(ptext3, styles['left']) Story.append(ptext_3) Story.append(Spacer(1, 11)) Story.append(Spacer(1, 11)) ptext1 = '<font size=11><b>Total Revenue</b></font>' ptext_1 = Paragraph(ptext1, styles['left']) ptext2 = '<font size=10>%s</font>' % str("{:,}".format(revenue)) ptext_2 = Paragraph(ptext2, styles['one']) ptext4 = '<font size=11>Cost of Goods Sold</font>' ptext_4 = Paragraph(ptext4, styles['left']) ptext3 = '<font size=10>(%s)</font>' % str("{:,}".format(cost_of_goods)) ptext_3 = Paragraph(ptext3, styles['one']) able = [[ptext_1, '', ptext_2], [ptext_4, '', ptext_3], ['', '', '']] t = Table(able, (8 * cm, 2 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # ('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('BOX', (0, 0), (-1, -1), 0.50, colors.black), ])) Story.append(t) Story.append(line) gross_profit = revenue - cost_of_goods ptext = '<font size=11><b>Gross Profit </b></font>' ptext_1 = Paragraph(ptext, styles['left']) ptext2 = '<font size=10>%s</font>' % str("{:,}".format(gross_profit)) ptext_2 = Paragraph(ptext2, styles['one']) able = [[ptext_1, '', ptext_2]] t = Table(able, (8 * cm, 2 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # ('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('BOX', (0, 0), (-1, -1), 0.50, colors.black), ])) Story.append(t) Story.append(line) ptext5 = '<font size=11><b>Operating Expenses</b></font>' ptext_5 = Paragraph(ptext5, styles['left']) ptext6 = '<font size=10>Salaries, Benefit and Wages</font>' ptext_6 = Paragraph(ptext6, styles['left']) ptext7 = '<font size=10>(%s)</font>' % str("{:,}".format(total_salary)) ptext_7 = Paragraph(ptext7, styles['one']) ptext8 = '<font size=10>Rent</font>' ptext_8 = Paragraph(ptext8, styles['left']) ptext9 = '<font size=10>(%s)</font>' % str("{:,}".format(rental)) ptext_9 = Paragraph(ptext9, styles['one']) ptext10 = '<font size=10>Office Supplies</font>' ptext_10 = Paragraph(ptext10, styles['left']) ptext11 = '<font size=10>(%s)</font>' % str("{:,}".format(office_supply)) ptext_11 = Paragraph(ptext11, styles['one']) ptext12 = '<font size=10>Insurance </font>' ptext_12 = Paragraph(ptext12, styles['left']) ptext13 = '<font size=10>(%s)</font>' % str("{:,}".format(insurance)) ptext_13 = Paragraph(ptext13, styles['one']) ptext14 = '<font size=10>Utilities </font>' ptext_14 = Paragraph(ptext14, styles['left']) ptext15 = '<font size=10>(%s)</font>' % str("{:,}".format(utilities)) ptext_15 = Paragraph(ptext15, styles['one']) ptext16 = '<font size=10>Maintanence </font>' ptext_16 = Paragraph(ptext16, styles['left']) ptext17 = '<font size=10>(%s)</font>' % str("{:,}".format(maintanence)) ptext_17 = Paragraph(ptext17, styles['one']) ptext18 = '<font size=10>Telecommunication </font>' ptext_18 = Paragraph(ptext18, styles['left']) ptext19 = '<font size=10>(%s)</font>' % str( "{:,}".format(telecommunication)) ptext_19 = Paragraph(ptext19, styles['one']) able = [['', '', ''], [ptext_5, '', ''], [ptext_6, '', ptext_7], [ptext_8, '', ptext_9], [ptext_10, '', ptext_11], [ptext_12, '', ptext_13], [ptext_14, '', ptext_15], [ptext_16, '', ptext_17], [ptext_18, '', ptext_19]] t = Table(able, (8 * cm, 2 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), #('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), #('BOX', (0, 0), (-1, -1), 0.50, colors.black), ])) Story.append(t) Story.append(Spacer(1, 11)) Story.append(line) total_expenses = total_salary + rental + office_supply + insurance + utilities + maintanence + telecommunication ptext = '<font size=11>Total Expenses</font>' ptext_1 = Paragraph(ptext, styles['left']) ptext2 = '<font size=10>(%s)</font>' % str("{:,}".format(total_expenses)) ptext_2 = Paragraph(ptext2, styles['one']) able = [[ptext_1, '', ptext_2]] t = Table(able, (8 * cm, 2 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # ('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('BOX', (0, 0), (-1, -1), 0.50, colors.black), ])) Story.append(t) Story.append(line) profit_before_tax = gross_profit - total_expenses ptext = '<font size=11><b>Profit Before Tax </b></font>' ptext_1 = Paragraph(ptext, styles['left']) ptext2 = '<font size=10>%s</font>' % str("{:,}".format(profit_before_tax)) ptext_2 = Paragraph(ptext2, styles['one']) able = [[ptext_1, '', ptext_2]] t = Table(able, (8 * cm, 2 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # ('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('BOX', (0, 0), (-1, -1), 0.50, colors.black), ])) Story.append(t) Story.append(Spacer(1, 11)) income_tax = int(profit_before_tax * 0.19) ptext = '<font size=10>Income Taxes </font>' ptext_1 = Paragraph(ptext, styles['left']) ptext2 = '<font size=10>%s</font>' % str("{:,}".format(income_tax)) ptext_2 = Paragraph(ptext2, styles['one']) able = [[ptext_1, '', ptext_2]] t = Table(able, (8 * cm, 2 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # ('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('BOX', (0, 0), (-1, -1), 0.50, colors.black), ])) Story.append(t) Story.append(line) net_profit = profit_before_tax - income_tax ptext = '<font size=10><b>Net Profit</b> </font>' ptext_1 = Paragraph(ptext, styles['left']) ptext2 = '<font size=10>%s</font>' % str("{:,}".format(net_profit)) ptext_2 = Paragraph(ptext2, styles['one']) able = [[ptext_1, '', ptext_2]] t = Table(able, (8 * cm, 2 * cm, 5 * cm)) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'CENTER'), # ('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('BOX', (0, 0), (-1, -1), 0.50, colors.black), ])) Story.append(t) Story.append(line) doc.multiBuild(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)
def rl_build(rl_object_list, file_path='output\\temp.pdf'): pdf = SimpleDocTemplate(file_path) pdf.multiBuild(rl_object_list)
return component_table Style = getSampleStyleSheet() n = Style['Normal'] data = [ [0, 1, 2, 3, 4, 5, 6, 7], [00, 11, 22, 33, 44, 55, 66, 77], [000, 111, 222, 333, 444, 555, 666, 777], [0000, 1111, 2222, 3333, 4444, 5555, 6666, 7777], ] z = table_model(data) pdf = SimpleDocTemplate('ppff.pdf') pdf.multiBuild([Paragraph('Title', n), z]) ''' Style = getSampleStyleSheet() bt = Style['Normal'] bt.fontSize = 14 bt.leading = 20 ct = Style['Normal'] ct.fontSize = 12 ct.leading = 20 ct.textColor = colors.red t = Paragraph('hello',bt) pdf = SimpleDocTemplate('ppff.pdf') pdf.multiBuild([t])
pie.simpleLabels = 0 # 0 标签在标注线的右侧;1 在线上边 pie.sameRadii = 1 # 0 饼图是椭圆;1 饼图是圆形 pie.slices.strokeColor = colors.red # 圆饼的边界颜色 pie.strokeWidth=1 # 圆饼周围空白区域的宽度 pie.strokeColor= colors.white # 整体饼图边界的颜色 pie.slices.label_pointer_piePad = 10 # 圆饼和标签的距离 pie.slices.label_pointer_edgePad = 25 # 标签和外边框的距离 pie.width = width pie.direction = 'clockwise' pie.pointerLabelMode = 'LeftRight' # for i in range(len(labels)): # pie.slices[i].fontName = 'song' #设置中文 for i, col in enumerate(use_colors): pie.slices[i].fillColor = col return pie data = [10,9,8,7,6,5,4,3,2,1] labs = ['0000000','1111111','2222222','3333333','4444444', '5555555','6666666','7777777','8888888','9999999'] color = [HexColor("#696969"),HexColor("#A9A9A9"),HexColor("#D8BFD8"), HexColor("#DCDCDC"),HexColor('#E6E6FA'),HexColor("#B0C4DE"), HexColor("#778899"),HexColor('#B0C4DE'),HexColor("#6495ED"), HexColor("#483D8B") ] z = autoLegender(draw_pie(data,labs,color),labs,color) pdf=SimpleDocTemplate('ppff.pdf') pdf.multiBuild([z])
def main(args): try: path_omd = Path(__file__).resolve().parent.parent except: raise OSError path_license_texts = path_omd / "license_sources/license_texts/" path_pdf = path_omd / "License_texts.pdf" path_logo = path_omd / "license_sources/check_mk_logo_large1.png" path_licenses_csv = path_omd / "Licenses.csv" used_licenses = used_licenses_from_csv(path_licenses_csv) registerFont(TTFont('Calibri', 'Calibri.ttf')) doc = SimpleDocTemplate(str(path_pdf), pagesize=letter, bottomMargin=.4 * inch, topMargin=.6 * inch, rightMargin=.8 * inch, leftMargin=.8 * inch) toc = TableOfContents() toc.levelStyles = [ PS(fontName='Calibri', fontSize=14, name='TOCHeading1', leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=16), PS(fontSize=12, name='TOCHeading2', leftIndent=40, firstLineIndent=-20, leading=12), ] cover = PS(name='Cover', fontSize=16, leading=22, alignment=1) title = PS(name='Title', fontSize=24, leading=16) h1 = PS(name='Heading1', fontSize=16, leading=16) normal = PS(name='Normal', fontSize=8) spacer = Spacer(width=0, height=2 * cm) cover_logo = Image(str(path_logo), width=3.5 * inch, height=1 * inch) cover_text = "Open Source licenses included in:<br /><br />\n\ Checkmk Enterprise Edition<br />\n\ Checkmk Managed Services Edition<br /><br />\n\ Version Status: %s" % args.cmk_version story = [] story.append(Spacer(width=0, height=6 * cm)) story.append(cover_logo) story.append(Spacer(width=0, height=1 * cm)) story.append(Paragraph(cover_text, cover)) story.append(PageBreak()) story.append(Paragraph('<b>Content</b>', title)) story.append(spacer) story.append(toc) for used_license in used_licenses: if used_license == "Public-Domain": continue file_path = path_license_texts / ("%s.txt" % used_license.lower()) if file_path.is_file(): with file_path.open(encoding="utf-8") as txt_file: headline = "<b>%s</b>" % txt_file.readline().replace("\n", "<br /><br />\n") text_content = txt_file.read().replace("\n", "<br />\n") story.append(PageBreak()) story.append(heading(headline, h1)) story.append(Paragraph(text_content, normal)) else: print("No license text file found for ID \"%s\" and path %s" % (used_license, file_path)) doc = MyDocTemplate(str(path_pdf)) doc.multiBuild(story, onLaterPages=add_page_number)
name = pdf_file if pdf_file.endswith('.jpg.pdf'): name = name[:-8] elif pdf_file.endswith('.pdf'): name = name[:-4] elif pdf_file.endswith('.PDF'): name = name[:-4] #if ".jpg" in pdf_file: #name = pdf_file[:-4] name = name.split('\\')[-1] print(name) t = Paragraph(name,bt) pdf=SimpleDocTemplate(temp_file) pdf.multiBuild([t]) # pdf.close() name_pdf = PdfFileReader(open(temp_file, "rb"), strict=False) output.addPage(name_pdf.getPage(0)) output.addBlankPage() # 分别将page添加到输出output中 for iPage in range(pageCount): output.addPage(input.getPage(iPage)) if pageCount % 2: output.addBlankPage() rm_targets.append(temp_file) print("合并后的总页数:%d."%outputPages) # 写入到目标PDF文件
class PDFPSReporte: def __init__(self, path): self.path = path self.styleSheet = getSampleStyleSheet() self.elements = [] # colors - Azul turkeza 367AB3 self.colorOhkaGreen0 = Color((45.0/255), (166.0/255), (153.0/255), 1) self.colorOhkaGreen1 = Color((182.0/255), (227.0/255), (166.0/255), 1) self.colorOhkaGreen2 = Color((140.0/255), (222.0/255), (192.0/255), 1) #self.colorOhkaGreen2 = Color((140.0/255), (222.0/255), (192.0/255), 1) self.colorOhkaBlue0 = Color((54.0/255), (122.0/255), (179.0/255), 1) self.colorOhkaBlue1 = Color((122.0/255), (180.0/255), (225.0/255), 1) self.colorOhkaGreenLineas = Color((50.0/255), (140.0/255), (140.0/255), 1) self.firstPage() self.nextPagesHeader(True) self.remoteSessionTableMaker() self.nextPagesHeader(False) self.inSiteSessionTableMaker() self.nextPagesHeader(False) self.extraActivitiesTableMaker() self.nextPagesHeader(False) self.summaryTableMaker() # Build self.doc = SimpleDocTemplate(path, pagesize=LETTER) self.doc.multiBuild(self.elements, canvasmaker=FooterCanvas) def firstPage(self): img = Image('static/lr.png', kind='proportional') img.drawHeight = 0.5*inch img.drawWidth = 2.4*inch img.hAlign = 'LEFT' self.elements.append(img) spacer = Spacer(30, 100) self.elements.append(spacer) img = Image('static/ohka.png') img.drawHeight = 2.5*inch img.drawWidth = 5.5*inch self.elements.append(img) spacer = Spacer(10, 250) self.elements.append(spacer) psDetalle = ParagraphStyle('Resumen', fontSize=9, leading=14, justifyBreaks=1, alignment=TA_LEFT, justifyLastLine=1) text = """REPORTE DE SERVICIOS PROFESIONALES<br/> Empresa: Nombre del Cliente<br/> Fecha de Inicio: 23-Oct-2019<br/> Fecha de actualización: 01-Abril-2020<br/> """ paragraphReportSummary = Paragraph(text, psDetalle) self.elements.append(paragraphReportSummary) self.elements.append(PageBreak()) def nextPagesHeader(self, isSecondPage): if isSecondPage: psHeaderText = ParagraphStyle('Hed0', fontSize=16, alignment=TA_LEFT, borderWidth=3, textColor=self.colorOhkaGreen0) text = 'REPORTE DE SESIONES' paragraphReportHeader = Paragraph(text, psHeaderText) self.elements.append(paragraphReportHeader) spacer = Spacer(10, 10) self.elements.append(spacer) d = Drawing(500, 1) line = Line(-15, 0, 483, 0) line.strokeColor = self.colorOhkaGreenLineas line.strokeWidth = 2 d.add(line) self.elements.append(d) spacer = Spacer(10, 1) self.elements.append(spacer) d = Drawing(500, 1) line = Line(-15, 0, 483, 0) line.strokeColor = self.colorOhkaGreenLineas line.strokeWidth = 0.5 d.add(line) self.elements.append(d) spacer = Spacer(10, 22) self.elements.append(spacer) def remoteSessionTableMaker(self): psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3, textColor=self.colorOhkaBlue0) text = 'SESIONES REMOTAS' paragraphReportHeader = Paragraph(text, psHeaderText) self.elements.append(paragraphReportHeader) spacer = Spacer(10, 22) self.elements.append(spacer) """ Create the line items """ d = [] textData = ["No.", "Fecha", "Hora Inicio", "Hora Fin", "Tiempo Total"] fontSize = 8 centered = ParagraphStyle(name="centered", alignment=TA_CENTER) for text in textData: ptext = "<font size='%s'><b>%s</b></font>" % (fontSize, text) titlesTable = Paragraph(ptext, centered) d.append(titlesTable) data = [d] lineNum = 1 formattedLineData = [] alignStyle = [ParagraphStyle(name="01", alignment=TA_CENTER), ParagraphStyle(name="02", alignment=TA_LEFT), ParagraphStyle(name="03", alignment=TA_CENTER), ParagraphStyle(name="04", alignment=TA_CENTER), ParagraphStyle(name="05", alignment=TA_CENTER)] for row in range(10): lineData = [str(lineNum), "Miércoles, 11 de diciembre de 2019", "17:30", "19:24", "1:54"] #data.append(lineData) columnNumber = 0 for item in lineData: ptext = "<font size='%s'>%s</font>" % (fontSize-1, item) p = Paragraph(ptext, alignStyle[columnNumber]) formattedLineData.append(p) columnNumber = columnNumber + 1 data.append(formattedLineData) formattedLineData = [] # Row for total totalRow = ["Total de Horas", "", "", "", "30:15"] for item in totalRow: ptext = "<font size='%s'>%s</font>" % (fontSize-1, item) p = Paragraph(ptext, alignStyle[1]) formattedLineData.append(p) data.append(formattedLineData) #print(data) table = Table(data, colWidths=[50, 200, 80, 80, 80]) tStyle = TableStyle([ #('GRID',(0, 0), (-1, -1), 0.5, grey), ('ALIGN', (0, 0), (0, -1), 'LEFT'), #('VALIGN', (0, 0), (-1, -1), 'TOP'), ("ALIGN", (1, 0), (1, -1), 'RIGHT'), ('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1), ('BACKGROUND',(0, 0), (-1, 0), self.colorOhkaGreenLineas), ('BACKGROUND',(0, -1),(-1, -1), self.colorOhkaBlue1), ('SPAN',(0,-1),(-2,-1)) ]) table.setStyle(tStyle) self.elements.append(table) def inSiteSessionTableMaker(self): self.elements.append(PageBreak()) psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3, textColor=self.colorOhkaBlue0) text = 'SESIONES EN SITIO' paragraphReportHeader = Paragraph(text, psHeaderText) self.elements.append(paragraphReportHeader) spacer = Spacer(10, 22) self.elements.append(spacer) """ Create the line items """ d = [] textData = ["No.", "Fecha", "Hora Inicio", "Hora Fin", "Tiempo Total"] fontSize = 8 centered = ParagraphStyle(name="centered", alignment=TA_CENTER) for text in textData: ptext = "<font size='%s'><b>%s</b></font>" % (fontSize, text) titlesTable = Paragraph(ptext, centered) d.append(titlesTable) data = [d] lineNum = 1 formattedLineData = [] alignStyle = [ParagraphStyle(name="01", alignment=TA_CENTER), ParagraphStyle(name="02", alignment=TA_LEFT), ParagraphStyle(name="03", alignment=TA_CENTER), ParagraphStyle(name="04", alignment=TA_CENTER), ParagraphStyle(name="05", alignment=TA_CENTER)] for row in range(10): lineData = [str(lineNum), "Miércoles, 11 de diciembre de 2019", "17:30", "19:24", "1:54"] #data.append(lineData) columnNumber = 0 for item in lineData: ptext = "<font size='%s'>%s</font>" % (fontSize-1, item) p = Paragraph(ptext, alignStyle[columnNumber]) formattedLineData.append(p) columnNumber = columnNumber + 1 data.append(formattedLineData) formattedLineData = [] # Row for total totalRow = ["Total de Horas", "", "", "", "30:15"] for item in totalRow: ptext = "<font size='%s'>%s</font>" % (fontSize-1, item) p = Paragraph(ptext, alignStyle[1]) formattedLineData.append(p) data.append(formattedLineData) #print(data) table = Table(data, colWidths=[50, 200, 80, 80, 80]) tStyle = TableStyle([ #('GRID',(0, 0), (-1, -1), 0.5, grey), ('ALIGN', (0, 0), (0, -1), 'LEFT'), #('VALIGN', (0, 0), (-1, -1), 'TOP'), ("ALIGN", (1, 0), (1, -1), 'RIGHT'), ('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1), ('BACKGROUND',(0, 0), (-1, 0), self.colorOhkaGreenLineas), ('BACKGROUND',(0, -1),(-1, -1), self.colorOhkaBlue1), ('SPAN',(0,-1),(-2,-1)) ]) table.setStyle(tStyle) self.elements.append(table) def extraActivitiesTableMaker(self): self.elements.append(PageBreak()) psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3, textColor=self.colorOhkaBlue0) text = 'OTRAS ACTIVIDADES Y DOCUMENTACIÓN' paragraphReportHeader = Paragraph(text, psHeaderText) self.elements.append(paragraphReportHeader) spacer = Spacer(10, 22) self.elements.append(spacer) """ Create the line items """ d = [] textData = ["No.", "Fecha", "Hora Inicio", "Hora Fin", "Tiempo Total"] fontSize = 8 centered = ParagraphStyle(name="centered", alignment=TA_CENTER) for text in textData: ptext = "<font size='%s'><b>%s</b></font>" % (fontSize, text) titlesTable = Paragraph(ptext, centered) d.append(titlesTable) data = [d] lineNum = 1 formattedLineData = [] alignStyle = [ParagraphStyle(name="01", alignment=TA_CENTER), ParagraphStyle(name="02", alignment=TA_LEFT), ParagraphStyle(name="03", alignment=TA_CENTER), ParagraphStyle(name="04", alignment=TA_CENTER), ParagraphStyle(name="05", alignment=TA_CENTER)] for row in range(10): lineData = [str(lineNum), "Miércoles, 11 de diciembre de 2019", "17:30", "19:24", "1:54"] #data.append(lineData) columnNumber = 0 for item in lineData: ptext = "<font size='%s'>%s</font>" % (fontSize-1, item) p = Paragraph(ptext, alignStyle[columnNumber]) formattedLineData.append(p) columnNumber = columnNumber + 1 data.append(formattedLineData) formattedLineData = [] # Row for total totalRow = ["Total de Horas", "", "", "", "30:15"] for item in totalRow: ptext = "<font size='%s'>%s</font>" % (fontSize-1, item) p = Paragraph(ptext, alignStyle[1]) formattedLineData.append(p) data.append(formattedLineData) #print(data) table = Table(data, colWidths=[50, 200, 80, 80, 80]) tStyle = TableStyle([ #('GRID',(0, 0), (-1, -1), 0.5, grey), ('ALIGN', (0, 0), (0, -1), 'LEFT'), #('VALIGN', (0, 0), (-1, -1), 'TOP'), ("ALIGN", (1, 0), (1, -1), 'RIGHT'), ('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1), ('BACKGROUND',(0, 0), (-1, 0), self.colorOhkaGreenLineas), ('BACKGROUND',(0, -1),(-1, -1), self.colorOhkaBlue1), ('SPAN',(0,-1),(-2,-1)) ]) table.setStyle(tStyle) self.elements.append(table) def summaryTableMaker(self): self.elements.append(PageBreak()) psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3, textColor=self.colorOhkaBlue0) text = 'REGISTRO TOTAL DE HORAS' paragraphReportHeader = Paragraph(text, psHeaderText) self.elements.append(paragraphReportHeader) spacer = Spacer(10, 22) self.elements.append(spacer) """ Create the line items """ tStyle = TableStyle([ ('ALIGN', (0, 0), (0, -1), 'LEFT'), #('VALIGN', (0, 0), (-1, -1), 'TOP'), ("ALIGN", (1, 0), (1, -1), 'RIGHT'), ('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1), ('BACKGROUND',(-2, -1),(-1, -1), self.colorOhkaGreen2) ]) fontSize = 8 lineData = [["Sesiones remotas", "30:15"], ["Sesiones en sitio", "00:00"], ["Otras actividades", "00:00"], ["Total de horas consumidas", "30:15"]] # for row in lineData: # for item in row: # ptext = "<font size='%s'>%s</font>" % (fontSize-1, item) # p = Paragraph(ptext, centered) # formattedLineData.append(p) # data.append(formattedLineData) # formattedLineData = [] table = Table(lineData, colWidths=[400, 100]) table.setStyle(tStyle) self.elements.append(table) # Total de horas contradas vs horas consumidas data = [] formattedLineData = [] lineData = [["Total de horas contratadas", "120:00"], ["Horas restantes por consumir", "00:00"]] # for row in lineData: # for item in row: # ptext = "<b>{}</b>".format(item) # p = Paragraph(ptext, self.styleSheet["BodyText"]) # formattedLineData.append(p) # data.append(formattedLineData) # formattedLineData = [] table = Table(lineData, colWidths=[400, 100]) tStyle = TableStyle([ ('ALIGN', (0, 0), (0, -1), 'LEFT'), ("ALIGN", (1, 0), (1, -1), 'RIGHT'), ('BACKGROUND', (0, 0), (1, 0), self.colorOhkaBlue1), ('BACKGROUND', (0, 1), (1, 1), self.colorOhkaGreen1), ]) table.setStyle(tStyle) spacer = Spacer(10, 50) self.elements.append(spacer) self.elements.append(table)
def draw_canvas(self, page_count): page = 'Page {0} of {1}'.format(self._pageNumber, page_count) x = 128 self.saveState() pdfmetrics.registerFont(TTFont('OpenSans', '/usr/share/fonts/OpenSans-Regular.ttf')) self.setFont('OpenSans', 10) self.setStrokeColorRGB(0, 0, 0) self.setLineWidth(0.5) self.drawCentredString(120, letter[1] - 30, 'Network Device Report') self.drawString(letter[0] - 120, letter[1] - 30, page) self.line(66, letter[1] - 40, letter[0] - 66, letter[1] - 40) self.line(66, 78, letter[0] - 66, 78) #self.drawCentredString(letter[0] / 2, 65, page) self.drawImage('logo-blue.jpg', letter[0] - 175, 25, height=50, width=120) #self.drawString(letter[0]-x, 25, page) self.restoreState() styles = getSampleStyleSheet() elements = [] #elements.append(Image('logo-blue.png', height=103, 250)) #elements.append(Paragraph("Hello")) #elements.append(Paragraph("World")) elements.append(PageBreak()) elements.append(PageBreak()) elements.append(PageBreak()) #elements.append(Paragraph("You are in page 2")) doc = SimpleDocTemplate("device_report.pdf", pagesize=letter) doc.multiBuild(elements, canvasmaker=FooterCanvas)
def merge_pdf2(request): pdf1 = "pdf1.pdf" pdf2 = "pdf2.pdf" pdfs = [pdf1, pdf2] buffer = BytesIO() doc = SimpleDocTemplate(buffer, pagesize=PAGE_SIZE, rightMargin=MARGIN_SIZE, leftMargin=MARGIN_SIZE, topMargin=85, bottomMargin=18) content = [] # to # fin toc # merge if not pdfs or len(pdfs) < 2: exit("Please enter at least two pdfs for merging!") legend_text = 'justification_legend' legend_text += "<br/><font color=red>%s</font>" % 'fffff' p = ParagraphStyle('normal') content.append(Paragraph(''' <para> %s </para> ''' % legend_text, p)) doc.build(content) items = [] address = 'WHATEVERYOUWNATTOTYPE' address = '<link href="' + 'http://www.hoboes.com/Mimsy/hacks/adding-links-to-pdf/' + '">' + address + '</link>' items.append(Paragraph(address, ParagraphStyle('body'))) doc.multiBuild(items) output = PdfFileWriter() num_page = 0 no_page = 0 width, height = A4 output.addBlankPage(width, height) cur = 1 cur_prev = 0 for fname in pdfs: input = PdfFileReader(open(fname, 'rb')) output.addPage(input.getPage(0)) output.addBookmark(str(no_page), num_page) num_page = num_page+1 no_page = no_page + 1 rect = RectangleObject([400, 400, 600, 600]) output.addLink(cur_prev, cur, rect) cur_prev = cur_prev + 1 cur = cur + 1 d = open("output.pdf", "wb") output.write(d) d.close() return render(request, "test.html")