#! python3 import docx from docx.shared import Pt doc = docx.Document() styleCooperBlack = doc.styles['Normal'] fontCooperBlack = styleCooperBlack.font fontCooperBlack.name = 'Cooper Black' fontCooperBlack.size = Pt(15) styleDate = doc.styles['Normal'] font = styleDate.font font.name = 'Times New Roman' font.size = Pt(15) fileObject = open('D:\\Scripts\\guests.txt', 'r') for line in fileObject.readlines(): paragrapghObject = doc.add_paragraph( 'It would be a pleasure to have the company of') paragrapghObject.style = styleCooperBlack doc.add_paragraph(line.strip()) doc.add_paragraph('at 11010 Memory Lane on the Evening of') paragrapghObject1 = doc.add_paragraph('April 1st') paragrapghObject1.style = styleDate doc.add_paragraph('at 7 o\'clock')
from docx import Document from docx.shared import Inches, Pt import sys #for landscape from docx.enum.section import WD_SECTION from docx.enum.section import WD_ORIENT #for landscape document = Document() section = document.sections[-1] section.orientation = WD_ORIENT.LANDSCAPE section.page_width = 10693337 section.page_height = 7560945 #style style = document.styles['Normal'] font = style.font font.name = 'Arial' font.size = Pt(11) document.add_heading('Nessus Host VA', 0) #tuplehere
def createDocShedule(group, realGroup, students): columns = 26 groupReal = realGroup wordDocument = docx.Document() style = wordDocument.styles['Normal'] font = style.font font.name = 'Times New Roman' wordDocument.add_heading(f"Журнал посещения занятий группы {groupReal}", 3).alignment = 1 font.size = Pt(10) mod_document(wordDocument) table = wordDocument.add_table(rows=1, cols=columns) table.style = 'Table Grid' hdr_cells = table.rows[0].cells hdr_cells[0].text = '№ п.п.' hdr_cells[1].text = 'ФИО' hdr_cells[1].alignment = 1 hdr_cells[0].alignment = 1 row = table.add_row() row.cells[0].merge(hdr_cells[0]) row.cells[1].merge(hdr_cells[1]) i = 0 users = students k = 0 table.cell(0, 2).merge(table.cell(0, 5)).text = "Понедельник" table.cell(0, 6).merge(table.cell(0, 9)).text = "Вторник" table.cell(0, 10).merge(table.cell(0, 13)).text = "Среда" table.cell(0, 14).merge(table.cell(0, 17)).text = "Четверг" table.cell(0, 18).merge(table.cell(0, 21)).text = "Пятница" table.cell(0, 22).merge(table.cell(0, 25)).text = "Суббота" for i in range(columns): table.cell(1, i).height = Cm(5) table.cell(1, i).height_rule = WD_ROW_HEIGHT_RULE.AUTO # table.cell(1, i).text=f'\n\n\n{i}' tr = row._tr trPr = tr.get_or_add_trPr() trHeight = OxmlElement('w:trHeight') trHeight.set(qn('w:val'), "2000") trHeight.set(qn('w:hRule'), "atLeast") trPr.append(trHeight) i = 0 for user in users: i += 1 row = table.add_row() row_cells = row.cells # row_cells[0].height = Cm(0.3) # row_cells[0].height_rule = WD_ROW_HEIGHT_RULE.AT_LEAST row_cells[0].text = f'{i}' row_cells[0].width = Cm(1.19) row_cells[1].text = f'{user}' row_cells[1].width = Cm(6) for row in table.rows: row.height = Cm(0.5) row.height_rule = WD_ROW_HEIGHT_RULE.EXACTLY row = table.add_row() row_cells = row.cells for row in row_cells: row.height = Cm(5) row_cells[0].merge(row_cells[1]).text = "Подпись старосты\n\n" row = table.add_row() row_cells = row.cells row_cells[0].merge(row_cells[1]).text = "Подпись преподавателя\n\n" wordDocument.add_heading(f"Создано через бота vk.com/botraspisanie", 3).alignment = 2 wordDocument.save("starosta_blank.docx")
content = u""" 2021届毕业设计指导记录本 """ else: content = u""" 2021届毕业设计指导记录本 """ text_head = p.add_run(content) text_head.font.name = '宋体' text_head.font.size = Pt(13.5) text_head.bold = True text = p.add_run(f""" 学 院:电气与信息工程学院 学生姓名:{name} 班级名称:{Class} 指导老师:{teacher}""") text.font.name = "宋体" text.font.size = Pt(12) document.save('C:\\Users\\Tang Haolun\\Desktop\\2021届电气学院毕业设计选题封面test.docx') #a = p.add_run('bold') #a.bold = True #a.font.size = "13.5" # """
def py2docx(name_docx, name_py, *args): """ Creating Excel files with Python and python-docx. Attributes: name_docx : Microsoft Word file name. name_py : Application name. *args : Data. """ document = Document() core_properties = document.core_properties core_properties.author = 'Pedro Biel' core_properties.title = 'Wind action' core_properties.subject = 'according to FEM 2131/2132' # Margins. sections = document.sections for section in sections: section.top_margin = Cm(2.5) section.bottom_margin = Cm(1.8) section.left_margin = Cm(2.5) section.right_margin = Cm(1.8) # Style. style = document.styles['Normal'] font = style.font font.name = 'Consolas' font.size = Pt(11) paragraph_format = style.paragraph_format paragraph_format.space_before = Pt(6) paragraph_format.space_after = Pt(0) paragraph_format.line_spacing = 1.5 # Titel. document.add_heading('Wind action according to FEM 2131/2132', 0) paragraph = document.add_paragraph(name_py) paragraph = document.add_paragraph( datetime.datetime.today().strftime('%Y.%m.%d %H:%M:%S')) # Project. document.add_heading('Project', 1) paragraph = document.add_paragraph('Project \t \t \t \t : \t ') paragraph.add_run(args[0]) paragraph = document.add_paragraph('Name \t \t \t \t \t : \t ') paragraph.add_run(args[1]) paragraph = document.add_paragraph('Company \t \t \t \t : \t ') paragraph.add_run(args[2]) paragraph = document.add_paragraph('Author \t \t \t \t : \t ') paragraph.add_run(args[3]) paragraph = document.add_paragraph('Commentary \t \t \t \t : \t ') paragraph.add_run(args[4]) if len( args ) > 25: # If the length of the args file is more than 25 the commentaries, # field has more than one paragraph. extra_paragraphs = len(args) - 25 for i in range(extra_paragraphs): paragraph = document.add_paragraph('\t \t \t \t \t : \t ') paragraph.add_run(args[5 + i]) i += 1 # Wind action. document.add_heading('Wind action', 1) # In service. document.add_heading('In service', 2) paragraph = document.add_paragraph('Design wind speed \t \t : \t ') paragraph.add_run(args[-20]) paragraph.add_run(' m/s \t \t \t § 2-2.2.1') paragraph = document.add_paragraph('\t \t \t \t \t : \t ') paragraph.add_run(args[-19]) paragraph.add_run(' km/h') paragraph = document.add_paragraph('Aerodynamic wind pressure \t : \t ') paragraph.add_run(args[-18]) paragraph.add_run(' kN/m² \t \t § 2-2.2.1') paragraph = document.add_paragraph('Ratio \t \t \t \t : \t ') paragraph.add_run(args[-17]) # Travelling to storm anchoring. document.add_heading('Travelling to storm anchoring', 2) paragraph = document.add_paragraph('Design wind speed \t \t : \t ') paragraph.add_run(args[-16]) paragraph.add_run(' m/s') paragraph = document.add_paragraph('\t \t \t \t \t : \t ') paragraph.add_run(args[-15]) paragraph.add_run(' km/h') paragraph = document.add_paragraph('Aerodynamic wind pressure \t : \t ') paragraph.add_run(args[-14]) paragraph.add_run(' kN/m²') paragraph = document.add_paragraph('Ratio \t \t \t \t : \t ') paragraph.add_run(args[-13]) # Out of service. # 0 to 20 m in height document.add_heading('Out service', 2) document.add_heading('0 to 20 m in height', 3) paragraph = document.add_paragraph('Design wind speed \t \t : \t ') paragraph.add_run(args[-12]) paragraph.add_run(' m/s \t \t \t § 2-2.3.6') paragraph = document.add_paragraph('\t \t \t \t \t : \t ') paragraph.add_run(args[-11]) paragraph.add_run(' km/h') paragraph = document.add_paragraph('Aerodynamic wind pressure \t : \t ') paragraph.add_run(args[-10]) paragraph.add_run(' kN/m² \t \t § 2-2.3.6') paragraph = document.add_paragraph('Ratio \t \t \t \t : \t ') paragraph.add_run(args[-9]) # 20 to 100 m in height document.add_heading('20 to 100 m in height', 3) paragraph = document.add_paragraph('Design wind speed \t \t : \t ') paragraph.add_run(args[-8]) paragraph.add_run(' m/s \t \t \t § 2-2.3.6') paragraph = document.add_paragraph('\t \t \t \t \t : \t ') paragraph.add_run(args[-7]) paragraph.add_run(' km/h') paragraph = document.add_paragraph('Aerodynamic wind pressure \t : \t ') paragraph.add_run(args[-6]) paragraph.add_run(' kN/m² \t \t § 2-2.3.6') paragraph = document.add_paragraph('Ratio \t \t \t \t : \t ') paragraph.add_run(args[-5]) # More than 100 m in height document.add_heading('More than 100 m in height', 3) paragraph = document.add_paragraph('Design wind speed \t \t : \t ') paragraph.add_run(args[-4]) paragraph.add_run(' m/s \t \t \t § 2-2.3.6') paragraph = document.add_paragraph('\t \t \t \t \t : \t ') paragraph.add_run(args[-3]) paragraph.add_run(' km/h') paragraph = document.add_paragraph('Aerodynamic wind pressure \t : \t ') paragraph.add_run(args[-2]) paragraph.add_run(' kN/m² \t \t § 2-2.3.6') paragraph = document.add_paragraph('Ratio \t \t \t \t : \t ') paragraph.add_run(args[-1]) # Save document document.save(name_docx)
def OutputDocx(info,address): addr = '/'.join(address.strip().strip('\'').split('/')[:-1]) chdir(addr) # doc = Document(docx=path.join(getcwd(), 'default.docx')) doc = Document() if address.find('排料清单') != -1: table_title = str(address.split('\\')[-1].split('/')[-1].split('_')[0].split('-')[0].split(' ')[0]) else: table_title = str(address.split('\\')[-1].split('/')[-1].split(' ')[0]) #设置全局字体 doc.styles['Normal'].font.name = u'宋体' doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') #设置word文件的页面属性 sections = doc.sections sections[0].page_width = Mm(297) sections[0].page_height = Mm(210) #添加基本内容 tit = doc.add_paragraph('结构件下料指导书') #新设置一种名为"title_style"的新style,设置字体大小,字体样式 title_style = doc.styles.add_style('UserStyle1', WD_STYLE_TYPE.PARAGRAPH) title_style.font.size = Pt(22) title_style.font.bold =True title_style.font.name = u'宋体' title_style._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') tit.paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER #为标题应用样式 tit.style = title_style #添加内容,绘制表头 title_list = [r'序号',r'产品代号', r'零件名称', r'材料',u'厚度',u'下料净尺寸(mm)',u'数量',r'备注'] trow = len(info) + 2 tcol = len(title_list) table = doc.add_table(rows=trow, cols=tcol, style='Table Grid') table.cell(0,0).merge(table.cell(0,tcol-1)) #合并第一行 # 新设置一种名为"Bold_style"的新style,设置字体大小,字体样式 Bold_style = doc.styles.add_style('UserStyle2', WD_STYLE_TYPE.CHARACTER) Bold_style.font.size = Pt(14) Bold_style.font.bold = True Bold_style.font.name = u'宋体' Bold_style._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 为表注应用样式 run = table.cell(0,0).paragraphs[0].add_run(" 合同号:%s"%table_title+" 文件编号:JXL-%s-001"%table_title) table.cell(0, 0).vertical_alignment = WD_ALIGN_VERTICAL.CENTER run.style = Bold_style #设置表格内的字体 table.style.font.size = Pt(12) table.style.font.name = u'微软雅黑' table.style._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') #设置表格对其方式 table.alignment = WD_TABLE_ALIGNMENT.CENTER #WD_TABLE_ALIGNMENT.LEFT|WD_TABLE_ALIGNMENT.RIGHT 其他设置方式 # 新设置一种名为"tbhead"的新style,设置字体大小,字体样式 tbhead = doc.styles.add_style('UserStyle3', WD_STYLE_TYPE.CHARACTER) tbhead.font.size = Pt(12) tbhead.font.bold = True tbhead.font.name = u'宋体' tbhead._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') #设置表格的表头的样式为table_head for i, value in enumerate(title_list): run_1 = table.cell(1, i).paragraphs[0].add_run(value) table.cell(1, i).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER table.cell(1, i).vertical_alignment = WD_ALIGN_VERTICAL.CENTER run_1.style = tbhead # 设置表格内容及对其方式 y = 0 for list in info: x = 1 #设置每一行第一个单元格的数值 table.cell(y + 2, 0).text = str(y+1) table_result ='数据已处理: '+str(int((y+1)/len(info) *100 ))+ '%' print(table_result) table.cell(y + 2, 0).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER table.cell(y + 2, 0).vertical_alignment = WD_ALIGN_VERTICAL.CENTER #设置每一行的单元格的内容 table.cell(y + 2, 1).text = str(list['product_code']) table.cell(y + 2, 2).text = str(list['part_name']) table.cell(y + 2, 3).text = str(list['material']) table.cell(y + 2, 4).text = str(list['thickness']) table.cell(y + 2, 5).text = str(list['size']) table.cell(y + 2, 6).text = str(list['sum']) for x in range(tcol): table.cell(y + 2, x).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER table.cell(y + 2, x).vertical_alignment = WD_ALIGN_VERTICAL.CENTER y += 1 print('数据已处理完毕,请耐心等待') #设置列宽 table.autofit = False for i in range(trow): table.cell(i,0).width = Mm(15) table.cell(i,1).width = Mm(45) table.cell(i,2).width = Mm(30) table.cell(i,3).width = Mm(30) table.cell(i,4).width = Mm(20) table.cell(i,5).width = Mm(65) table.cell(i,6).width = Mm(18) table.cell(i,7).width = Mm(22) # 设置行高 table.rows[i].height = Mm(11) #设置表格第一行的对齐方式为左对齐 table.cell(0, 0).paragraphs[0].paragraph_format.alignment =WD_ALIGN_PARAGRAPH.LEFT par1 = doc.add_paragraph('') par2 = doc.add_paragraph('') par1.paragraph_format.space_after =0 par2.paragraph_format.space_after =0 par2.paragraph_format.space_before =Pt(6) mark1 = par1.add_run(u'\n 备注:') mark2 = par1.add_run( u'\n 完成后请做好标识,标识内容包括:合同号、产品代号、零件号、尺寸。') mark3 = par2.add_run(u' 编制:王元 %s。'%time.strftime('%Y-%m-%d',time.localtime(time.time())) +' 审核:刘光 %s。'%time.strftime('%Y-%m-%d',time.localtime(time.time()))) mark1.style = Bold_style mark2.style = Bold_style mark3.style = Bold_style #设定页边距为上18mm.下15mm doc.sections[0].top_margin = Mm(18) doc.sections[0].bottom_margin = Mm(15) #文件保存 doc.save(addr +'\\' + table_title + u'_结构件下料清单.docx') table_finish = '文件已生成' print(table_finish)
# 新建Word文档 document = Document() # 颜色 if b.g == 'boys': color = (46, 92, 155) else: color = (181, 62, 145) # 封面制作 document.add_picture(r'%s\logo.png' % fig_path, width=Inches(2.5)) document.add_paragraph('') p = document.add_paragraph('') text1 = p.add_run('0-5岁%s童身体生长情况报告' % ('女' if b.g == 'girls' else '男')) text1.font.size = Pt(24) # 字体大小 text1.bold = True # 字体是否加粗 text1.font.name = 'Times New Roman' # 控制是西文时的字体 text1.element.rPr.rFonts.set(qn('w:eastAsia'), '华文中宋') p.paragraph_format.alignment = s.WD_ALIGN_PARAGRAPH.CENTER text1.font.color.rgb = RGBColor(*color) p = document.add_paragraph('') text2 = p.add_run('基于世界卫生组织发布的0-5岁%s童生长百分位数标准曲线制作' % ('女' if b.g == 'girls' else '男')) text2.font.size = Pt(15) text2.bold = False # 字体是否加粗 text2.font.name = 'Times New Roman' text2.element.rPr.rFonts.set(qn('w:eastAsia'), '黑体') p.paragraph_format.alignment = s.WD_ALIGN_PARAGRAPH.CENTER text2.font.color.rgb = RGBColor(*color)
major = cursor9.fetchone() cursor10 = conn.cursor() cursor10.execute( "SELECT experiences FROM collection_information where stu_number=%s" % item) experiences = cursor10.fetchone() cursor11 = conn.cursor() cursor11.execute( "SELECT wishes FROM collection_information where stu_number=%s" % item) wishes = cursor11.fetchone() doc = Document() doc.styles["Normal"].font.name = u'宋体' doc.styles["Normal"].font.size = Pt(15) doc.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') head = doc.add_heading("", level=1) run = head.add_run(u"数科院学生会报名表") run.font.size = Pt(30) run.font.color.rgb = RGBColor(0, 0, 0) run.font.name = u"宋体" run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') head.alignment = WD_ALIGN_PARAGRAPH.CENTER tab = doc.add_table(rows=12, cols=2) #创建表格 tab.style = "Table Grid" cell = tab.cell(0, 0) cell.text = "姓名:" cell = tab.cell(0, 1) cell.text = "%s" % name
def 输出页(document, 目录信息, 段落信息, 表格组, 图块组, dpi): for i, x in enumerate(sorted(段落信息 + 表格组 + 图块组 + 目录信息, key=lambda i: 排序键(i))): if x in 表格组: table = document.add_table(rows=x.尺寸[0], cols=x.尺寸[1], style='Table Grid') document.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER for i in range(x.尺寸[0]): for j in range(x.尺寸[1]): if x.格内容[i][j]: table.cell(i, j).text = x.格内容[i][j] w = x.格范围(i, j) if w and w != (i, j): table.cell(i, j).merge(table.cell(*w)) document.add_paragraph('') elif x in 目录信息: 段落 = x x['内容'] = x['内容'].replace('"', ' ').replace('“', ' ') # 对tesseract的补丁 document.add_paragraph(f'(目录){x["内容"]}') elif x in 段落信息: 段落 = x p = document.add_paragraph() if 段落['样式'] == '居中': p.alignment = WD_ALIGN_PARAGRAPH.CENTER for i, 行 in enumerate(段落['行组']): 行['内容'] = 行['内容'].replace('"', ' ').replace( '“', ' ') # 对tesseract的补丁 行高 = 行['bottom'] - 行['top'] if i != len(段落['行组']) - 1: run = p.add_run(行['内容'] + '\n') else: run = p.add_run(行['内容']) 字体尺寸 = round(行高 / dpi * 72) run.font.size = Pt(字体尺寸) else: for i, 行 in enumerate(段落['行组']): 行['内容'] = 行['内容'].replace('"', ' ').replace( '“', ' ') # 对tesseract的补丁 行高 = 行['bottom'] - 行['top'] if i != len(段落['行组']) - 1: run = p.add_run( int(行['缩进'] / 行高 * 2) * ' ' + 行['内容'] + '\n') else: run = p.add_run(int(行['缩进'] / 行高 * 2) * ' ' + 行['内容']) 字体尺寸 = round(行高 / dpi * 72) run.font.size = Pt(字体尺寸) elif x in 图块组: 表 = x cv2.imwrite(f'./_temp/_.jpg', 表['内容']) document.add_picture(f'./_temp/_.jpg', width=Inches((表['right'] - 表['left']) / 600)) document.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER else: 0 / 0 document.add_page_break()
# # styles = document.styles # print("\n".join([s.name for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH])) paragraph2 = document.add_paragraph('流金岁月') paragraph2.style = 'List Bullet 2' paragraph3 = document.add_paragraph('似水流年') paragraph3.style = 'List Number 2' # character style paragraph4 = document.add_paragraph() paragraph4.add_run('No matter what we breed, ') paragraph4.add_run('We still are made of greed. ').bold = True paragraph4.add_run('This is my kingdom come').italic = True run = paragraph4.add_run('This is my kingdom come') run.style = 'Intense Emphasis' from docx.shared import Pt run.font.name = 'Sana' run.font.size = Pt(20) # Adding a page bread document.add_page_break() # Adding a table table = document.add_table(rows=9, cols=10, style='Table Grid') print() document.save('test.docx')
def write_to_word(pubmed_results: Generator[Dict, None, None], style_method: str, query: str, is_abstract: bool) -> None: """Write the PubMed results to Word Parameters ---------- pubmed_results: PubMed results stored in Bio.Entrez.Parser.ListElement style_method: the style to be written to a PDF file (citation or listview) query: a query to be searched against PubMed database is_abstract: include abstract to your search results Return ------- None """ document = Document() # styling document (font name and size) style = document.styles['Normal'] font = style.font font.name = 'Arial' font.size = Pt(12) # handling header configurations header = document.add_paragraph() header.alignment = 1 # center the title header.add_run(f'PubMed Search Results for {query.title()}') records = records_iterator(pubmed_results, is_abstract) for i, (authors, title, journal, *pub_info) in enumerate(records, 1): try: pub_date, vol_issue, doi, pmid, pmcid, abstract = pub_info except ValueError: pub_date, vol_issue, doi, pmid, pmcid = pub_info url = f"http://www.ncbi.nlm.nih.gov/pubmed/" + pmid.split()[-1] if style_method == 'citation': paragraph = document.add_paragraph( str(i) + ': ' + authors + '. ' + title + ' ' + journal + '. ' + pub_date + ';' + vol_issue + ' ' + "doi" + doi + ' ' + pmid + '; ' + pmcid + '.') # to include the url as part of the citation paragraph.paragraph_format.space_before = Pt(0) paragraph.paragraph_format.space_after = Pt(1) # for url hyperlink add_hyperlink(document.add_paragraph(), url, url, 'blue', True) else: document.add_paragraph(str(i) + ":" + " Authors: " + authors) document.add_paragraph("Title: " + title) document.add_paragraph("Journal Name: " + journal) document.add_paragraph("Publication Date: " + pub_date) document.add_paragraph("Volume, Issue, Pages: " + vol_issue) document.add_paragraph("doi" + doi) document.add_paragraph(pmid) document.add_paragraph(pmcid) add_hyperlink(document.add_paragraph('Url: '), url, url, 'blue', True) try: document.add_paragraph("Abstract: " + abstract) except UnboundLocalError: continue # write the search results information to MS Word file print(f"\nwriting in {style_method} to a MS Word file...") document.save(f'output/PubMed_Results_{style_method}.docx') print("\nDone writing.")
def save(self, fn, quizData, title='CMA Bible Quizzes', msg=None): """This method creates the quiz packet Word document. Args: fn (string): output filename of quiz quizData (dict): quizData object title (string): title in the document msg (string): optional message to write """ # # document, paragraph, section, font settings # # -- width for columns: question number, type, Q/A, reference if (quizData['type'] == 'epistle'): width = [Inches(0.375), Inches(0.375), Inches(5.25), Inches(1.)] else: width = [Inches(0.375), Inches(1), Inches(4.625), Inches(1.)] document = Document() sections = document.sections section = sections[0] section.left_margin = Inches(0.75) section.top_margin = Inches(0.5) section.bottom_margin = Inches(0.5) section.right_margin = Inches(0.5) style = document.styles['Normal'] font = style.font font.name = 'Arial' font.size = Pt(9) paragraph_format = document.styles['Normal'].paragraph_format paragraph_format.space_after = Pt(3) # # add the title # document.add_heading(title, 0) # # add the message # # if(msg==None): # if(self.quizType!='custom'): # msg={'intro':'This is a quiz packet for WGLD. The quiz packet should have these characteristics:', # 'list':['Unique questions for each quiz (if possible) in the packet', # 'Satisfaction of question minimums and maximums for each type', # '"A" division quizzes have 50% current and 50% past periods.', # '"B" division quizzes are only current content, and will therefore have repeats.'+\ # ' We have tried to keep these in the alternative questions 16A, 16B, etc. Replace as necessary.']} # else: # msg={'intro':'This is a custom quiz.'} # p = document.add_paragraph(msg['intro']) # #document.add_paragraph('Unique questions for each quiz (if possible) in the packet', style='List Bullet') # #document.add_paragraph( # # 'Satisfaction of question minimums and maximums for each type', style='List Bullet' # #) # if('list' in msg): # for m in msg['list']: # document.add_paragraph(m, style='List Bullet') # default message if (msg == None): msg=[{'type':'p','text':'This is a CM&A quiz packet. The quiz packet should have these characteristics:'}, {'type':'list','text':['Unique questions for each quiz (if possible) in the packet', 'Satisfaction of question minimums and maximums for each type (2018 rules)', '"A" division quizzes have 50% current and 50% past periods.', '"B" division quizzes are only current content, and will therefore have repeats.'+\ ' We have tried to keep these in the alternative questions 16A, 16B, etc. Replace as necessary.']}] for ii, m in enumerate(msg): if (m['type'] == 'p'): # normal paragraph p = document.add_paragraph(m['text']) elif (m['type'] == 'list'): # bulleted list for mitem in m['text']: document.add_paragraph(mitem, style='List Bullet') # # loop through quizzes # for qi, QZ in enumerate(quizData['quizzes']): chapList = sorted(QZ['CH'].unique()) logger.debug('chapters: %s' % str(chapList)) if (qi > 0): document.add_page_break() document.add_heading('Quiz %d' % (qi + 1), 1) table = document.add_table(rows=1, cols=4) #table.style = 'LightShading-Accent1' table.style = 'LightGrid-Accent1' hdr_cells = table.rows[0].cells hdr_cells[0].text = '#' hdr_cells[1].text = 'Type' hdr_cells[2].text = 'Question' hdr_cells[3].text = 'Verse' for k, cell in enumerate(hdr_cells): cell.width = width[k] # # loop through questions # ii = 0 for idx, row in QZ.iterrows(): ii += 1 row_cells = table.add_row().cells # Question Number row_cells[0].text = row.qn # Question Type row_cells[1].text = row.TYPE # https://stackoverflow.com/questions/36894424/creating-a-table-in-python-docx-and-bolding-text#36897305 # # Question/Answer cell # c = row_cells[2] q = 'Q: %s' % row.QUESTION keywords = row.QKEYWORDS.split(',') self.boldText(cell=c, text=q, keywords=keywords) c.add_paragraph() # # ANSWER # a = 'A: %s' % row.ANSWER keywords = row.AKEYWORDS.split(',') self.boldText(cell=c, text=a, keywords=keywords) # book, chapter, verse, and club (e.g. 150,300) txt = '%s %s:%s' % (row.BK, row.CH, row.VS) if (isinstance(row.VE, float)): txt += '-%s' % str(int(row.VE)) txt += '\n(' if (isinstance(row.CLUB, float)): #txt+='\n(%d)'%row.CLUB txt += '%d,' % row.CLUB if (row.SET is not None): txt += '%s' % row.SET txt += ')' # additional flags (repeats) c = row_cells[3] if ('R' in row['FLAGS']): txt += '\nrepeat' c._tc.get_or_add_tcPr().append( parse_xml(r'<w:shd {} w:fill="FFFF00"/>'.format( nsdecls('w')))) c.text = txt # adjust width for k, cell in enumerate(row_cells): cell.width = width[k] # # quiz stats # stats = quizData['stats'][qi] qdist = quizData['distribution'] if (quizData['type'] != 'custom'): # # normal quiz # # -- min distribution msg = 'Regular quiz distribution (does not include overtime); ' first = 1 # loop through all the types to show minimums for qt, cnt in stats['min'].items(): msg += '%s:%d-%d (' % (qt.upper(), cnt, stats['max'][qt]) if (first): first = 0 msg += 'req: ' msg += '%d-%d), ' % (qdist[qt]['range'][0], qdist[qt]['range'][1]) msg = msg[:-2] # get rid of trailing space and comma at end # # -- period stats # msg += '; Question counts by period (numbered): ' for period, cnts in stats['period'].items(): msg += '%s=%d; ' % (period, cnts[0]) msg = msg[:-2] else: # custom quiz msg = 'Custom quiz distribution; ' #for qt,cnt in self._countTypes(QZ).items(): for qt, cnt in countTypes(QZ, qdist).items(): msg += ' %s(%d),' % (qt, cnt) msg = msg[:-1] print(msg) # # add stats to document # document.add_paragraph(msg) # # extra question # if (quizData['type'] != 'custom'): document.add_page_break() document.add_heading('Extra Questions', level=1) msg = """This section contains extra questions of each type for use during the quiz day. Make sure to mark the questions used as you use them. """ p = document.add_paragraph(msg) for qt, v in quizData['extraQuestions'].items(): tlist = ', '.join( [x.upper() for x in quizData['distribution'][qt]['types']]) document.add_heading( '%s Extra Questions (%s)' % (quizData['distribution'][qt]['label'], tlist), level=2) table = document.add_table(rows=1, cols=4) table.style = 'LightGrid-Accent1' hdr_cells = table.rows[0].cells hdr_cells[0].text = '#' hdr_cells[1].text = 'Type' hdr_cells[2].text = 'Question' hdr_cells[3].text = 'Verse' for k, cell in enumerate(hdr_cells): cell.width = width[k] ii = 0 for idx, row in quizData['extraQuestions'][qt].iterrows(): ii += 1 row_cells = table.add_row().cells row_cells[0].text = str(ii) row_cells[0].width = width[0] row_cells[1].text = row.TYPE #row_cells[2].text = 'Q: %s\n\nA: %s'%(row.QUESTION,row.ANSWER) # # QUESTION # c = row_cells[2] q = 'Q: %s' % row.QUESTION keywords = row.QKEYWORDS.split(',') self.boldText(cell=c, text=q, keywords=keywords) c.add_paragraph() #c.add_paragraph() # # ANSWER # a = 'A: %s' % row.ANSWER keywords = row.AKEYWORDS.split(',') self.boldText(cell=c, text=a, keywords=keywords) # # VERSES # txt = '%s %s:%s' % (row.BK, row.CH, row.VS) if (isinstance(row.VE, float)): txt += '-%s' % str(int(row.VE)) if (isinstance(row.CLUB, float)): txt += '\n(%d)' % row.CLUB #if(not np.isnan(row.VE)): # txt+='-%s'%row.VE #row_cells[3].text = txt c = row_cells[3] if ('R' in row['FLAGS']): txt += '\nrepeat' c._tc.get_or_add_tcPr().append( parse_xml(r'<w:shd {} w:fill="FFFF00"/>'.format( nsdecls('w')))) c.text = txt for k, cell in enumerate(row_cells): cell.width = width[k] document.save(fn) print('Done writing quiz packet (%s)' % fn)
def write4answersheet(answer_sheet_data): ''' answer_sheet_data = { "name": paper_data["name"], "main_title": "{}-答题卡".format(paper_data["main_title"]), "testee": paper_data["testee"], "sheet": answer_sheet } answer_sheet[key].append({ "q_no": ques_no, "pic_in_card": pic_in_card, "options": [v["key"] for v in options if v.get("key")], "subques_len": len(subquestions) if subquestions else 0 }) ''' sheet = answer_sheet_data.get('sheet', {}) sheet_name = answer_sheet_data.get('name') main_title = answer_sheet_data.get('main_title') answer_path = r'nile/static/mark_pic/answersheet.docx' os.makedirs("/tmp/paper", exist_ok=True) t0 = int(round(time.time() * 1000)) tmp_path = '/tmp/paper/%d.docx' % t0 os.system('cp %s %s' % (answer_path, tmp_path)) document = Document(tmp_path) # 设置整个文档的默认字体 microsoft_font = u'宋体' # u 表示后面的字符串以 Unicode 格式进行编码 black_font = u'黑体' number_font = 'Times New Roman' area = qn('w:eastAsia') document.styles['Normal'].font.name = microsoft_font document.styles['Normal'].font.size = Pt(10.5) document.styles['Normal'].font.color.rgb = RGBColor(0, 0, 0) document.styles['Normal']._element.rPr.rFonts.set(area, number_font) # 指定段落样式 styles = document.styles # fls = time.time() # strr = 'lbj_Style%s' %fls #自定义的样式的名称 # strr = strr.replace('.', '') # strr = strr + ''.join(random.sample('zyxwvutsrqponmlkjihgfedcbaABCDEFGHIJKLMNOPQRST', 5)) s = styles.add_style('lbj_Style', WD_STYLE_TYPE.PARAGRAPH) s.font.name = microsoft_font s.font.size = Pt(10.5) s.font.color.rgb = RGBColor(0, 0, 0) s.paragraph_format.line_spacing = Pt(0) # 行距值 s.paragraph_format.space_before = Pt(0) # 段前距 s.paragraph_format.space_after = Pt(0) # 段后距 s.paragraph_format.line_spacing_rule = WD_LINE_SPACING.SINGLE # 行间距 s._element.rPr.rFonts.set(area, number_font) # 除中文外其它文字 使用的字体 ,备选项 paper_num_count_flag = 0 # 页面是否有页码条形码 run = document.paragraphs[0] run.style = s p = run.add_run(main_title) font = p.font font.name = black_font font.color.rgb = RGBColor(0, 0, 0) font.size = Pt(15) run.alignment = WD_ALIGN_PARAGRAPH.CENTER p = document.add_paragraph() p.add_run().add_picture(r'nile/static/mark_pic/prefix_2.png') p = document.add_paragraph() # p.add_run().add_break() run = p.add_run('选择题(请用2B铅笔填涂)') run.bold = True run.font.size = Pt(12) run.font.name = black_font # sub_mark_num_vec = [] # 每页竖长条表示块数量 sub_mark_num = 0 # 竖长条表示块总数量 sub_mark_choice = [] # 选择题黑块区域 sub_mark_fillin = [] # 填空题黑块区域 sub_mark_eassy = [] # 简答题黑块区域 qus_range_choice = [] # 选择题题号范围 qus_range_fillin = [] # 填空题题号范围 qus_range_eassy = [] # 简答题题号范围 paper_num = 0 # 页数 ques_no = 0 # 题号 choice_answer_cnt = [] # 选项列数 choice_line_number = [] # 每行的题目数量 choice_answer_pattern = [] # 每列选择题数目 choice_col_num = [] # 选择题每行的列数 option_len = [] choice_ques_no, mm, combine_ques_index = [], [], [] # break_page_ques_no = [] # 如果选择题分页时的题号 count_ques = 0 for key, value in sheet.items(): if key == 'choice_question_all': for k in range(len(value)): q_no = value[k].get("q_no") opt_len = len(value[k].get("options")) mm.append(q_no) if not isinstance(q_no, list): option_len.append(opt_len) else: for qq in q_no: option_len.append(opt_len) for i in range(len(mm)): if isinstance(mm[i], list): count_ques += len(mm[i]) combine_ques_index.append(i) for j in mm[i]: choice_ques_no.append(j) else: count_ques += 1 choice_ques_no.append(mm[i]) # 选项个数不一样 group_choice_count = {} group_choice_opt = {} # 各选项数对应的选项数集合 group_choice_num = {} # 各选项数对应的题号集合 for opt_i in range(len(option_len)): pre = option_len[opt_i] if not group_choice_count.get(pre): group_choice_count[pre] = 0 group_choice_num[pre] = [] group_choice_opt[pre] = [] count = group_choice_count[pre] group_choice_count[pre] = count + 1 group_choice_num[pre].append(choice_ques_no[opt_i]) group_choice_opt[pre].append(option_len[opt_i]) choice_group = sheet.get('choice_question', []) choice_len = len(choice_group) choice_len_sum = len(choice_ques_no) # 选择题总数,包括组合题中的小选择题 fillin_group = sheet.get('fillin_question', []) fillin_len = len(fillin_group) fs_num = fillin_group[0].get('q_no') if fillin_group else 0 # 填空题开始的题号 subjective_question = sheet.get('subjective_question', []) subjec_len = len(subjective_question) ss_num = subjective_question[0].get('q_no') if subjective_question else 0 # 主观题开始的题号 combine_question = sheet.get('combine_question', []) pic_in_sub = [[] for x in range(subjec_len)] pic_num = 0 for ques in subjective_question: pic_in_card = ques.get('pic_in_card', "") pic_in_sub[pic_num] = pic_in_card if pic_in_card else [] pic_num += 1 tmp = [] for i in range(len(mm)): if isinstance(mm[i], list): if tmp: qus_range_choice.append(tmp) tmp = [] qus_range_choice.append(mm[i]) else: tmp.append(mm[i]) if not combine_question: qus_range_choice.append(tmp) else: if not isinstance(mm[-1], list): qus_range_choice.append(tmp) if fillin_group: qus_range_fillin.append(fs_num) qus_range_fillin.append(fs_num + fillin_len - 1) if subjective_question: qus_range_eassy.append(ss_num) qus_range_eassy.append(ss_num + subjec_len - 1) # row_n, row_rest = divmod(choice_len_sum, 15) # choice_row_num = row_n + 1 if row_rest else row_n # 选择题行数 # choice_row_num = [choice_row_num] if choice_row_num <= 4 else [4, choice_row_num-4] choice_row_num = 0 rest = 0 break_num = 0 ap_n = 0 # choice_answer_pattern分页时的块数 for key, value in group_choice_count.items(): row_n, row_rest = divmod(value, 15) row_n5, row_rest5 = divmod(value, 5) for i in range(row_n): choice_line_number.append(5) choice_col_num.append(3) if row_rest: if row_rest > 10: choice_col_num.append(3) elif row_rest > 5: choice_line_number.append(5) choice_col_num.append(2) else: choice_line_number.append(row_rest) choice_col_num.append(1) for i in range(row_n5): choice_answer_pattern.append(5) if row_rest5: choice_answer_pattern.append(row_rest5) count_ed = row_n + 1 if row_rest else row_n choice_row_num += count_ed for i in range(count_ed): choice_answer_cnt.append(key) if choice_row_num == 4: rest = row_rest if choice_row_num > 4: if not break_num: if not rest: break_num = group_choice_num[key][value - row_rest + 1] else: break_num = group_choice_num[key][0] choice_row_num = [choice_row_num] if choice_row_num <= 4 else [4, choice_row_num - 4] choice_answer_cnt = [choice_answer_cnt] if not break_num else [choice_answer_cnt[:4], choice_answer_cnt[4:]] choice_col_num = [choice_col_num] if not break_num else [choice_col_num[:4], choice_col_num[4:]] choice_line_number = [choice_line_number] if not break_num else [choice_line_number[:4], choice_line_number[4:]] logger.info("group_choice_count========================={}".format(group_choice_count)) logger.info("choice_answer_cnt========================={}".format(choice_answer_cnt)) logger.info("choice_line_number========================={}".format(choice_line_number)) group_choice_num_ = sorted(group_choice_num.items(), key=lambda d: d[0]) group_choice_opt_ = sorted(group_choice_opt.items(), key=lambda d: d[0]) group_choice_count_ = sorted(group_choice_count.items(), key=lambda d: d[0]) # logger.info("group_choice_num_========================={}".format(group_choice_num_)) choice_num = [] for key, value in group_choice_num_: if isinstance(value, list): for i in value: choice_num.append(i) else: choice_num.append(value) choice_opt = [] for key, value in group_choice_opt_: if isinstance(value, list): for i in value: choice_opt.append(i) else: choice_opt.append(value) row0 = choice_row_num[0] if break_num: for nn in choice_col_num[0:4]: ap_n += nn choice_answer_pattern = [choice_answer_pattern[0:ap_n], choice_answer_pattern[ap_n:]] row1 = choice_row_num[1] index = choice_ques_no.index(break_num) write_option(ques_no, choice_num[0:index], choice_opt[0:index], row0, document) document.add_page_break() write_option(ques_no, choice_num[index:], choice_opt[index:], row1, document) else: choice_answer_pattern = [choice_answer_pattern] write_option(ques_no, choice_num, choice_opt, row0, document) # write_option(ques_no, choice_len_sum, option_len, choice_ques_no, document) writeline(document, black_font) num, paper_num = choice0_60(fillin_len, fs_num, document, paper_num) paper_num += num if ss_num: sub_subjective(ss_num, paper_num, document, pic_in_sub) block_num = 0 start = 0 step = 3 if choice_len_sum: for n in range(len(choice_row_num)): block_num += 1 sub_mark_choice.append(start + step * (block_num - 1) - (block_num - 1)) sub_mark_choice.append(start + step * block_num - (block_num - 1)) if fillin_len: block_num += 1 sub_mark_fillin.append(start + step * (block_num - 1) - (block_num - 1)) sub_mark_fillin.append(start + step * block_num - (block_num - 1)) if not subjec_len: index = sub_mark_fillin[-2] sub_mark_fillin.pop(-1) sub_mark_fillin.append(index + 1) else: for n in range(subjec_len): block_num += 1 sub_mark_eassy.append(start + step * (block_num - 1) - (block_num - 1)) sub_mark_eassy.append(start + step * block_num - (block_num - 1)) if subjec_len == 1: index = sub_mark_eassy[-2] sub_mark_eassy.pop(-1) sub_mark_eassy.append(index + 1) else: if subjec_len: for n in range(subjec_len): block_num += 1 sub_mark_eassy.append(start + step * (block_num - 1) - (block_num - 1)) sub_mark_eassy.append(start + step * block_num - (block_num - 1)) if subjec_len == 1: index = sub_mark_eassy[-2] sub_mark_eassy.pop(-1) sub_mark_eassy.append(index + 1) else: if sub_mark_choice: index = sub_mark_choice[-2] sub_mark_choice.pop(-1) sub_mark_choice.append(index + 1) # return sub_mark_num for i in range(len(choice_row_num)): sub_mark_num += 2 if fillin_len: sub_mark_num += 2 for num in range(subjec_len): sub_mark_num += 2 t1 = int(round(time.time() * 1000)) doc_file_name = "{}-答题卡".format(sheet_name or str(t1)) return_path = '/tmp/paper/%s.%s' % (doc_file_name, 'docx') document.save(return_path) sub_json_data = {} tmp_sub_mark_choice = [] for i in range(len(choice_row_num)): tmp_sub_mark_choice.append([sub_mark_choice[i * 2], sub_mark_choice[i * 2 + 1]]) logger.info("sub_mark_choice========================={}".format(sub_mark_choice)) sub_json_data['sub_mark_choice'] = tmp_sub_mark_choice sub_json_data['sub_mark_fillin'] = sub_mark_fillin sub_json_data['sub_mark_eassy'] = sub_mark_eassy sub_json_data['sub_mark_num'] = sub_mark_num # sub_json_data['sub_mark_num_vec'] = sub_mark_num_vec sub_json_data['page_num'] = paper_num # sub_json_data['paper_num_count_flag'] = paper_num_count_flag sub_json_data['choice_answer_cnt'] = choice_answer_cnt sub_json_data['choice_line_number'] = choice_line_number sub_json_data['choice_answer_pattern'] = choice_answer_pattern sub_json_data['choice_col_num'] = choice_col_num sub_json_data['choice_row_num'] = choice_row_num sub_json_data['qus_range_choice'] = qus_range_choice sub_json_data['qus_range_fillin'] = qus_range_fillin sub_json_data['qus_range_eassy'] = qus_range_eassy logger.info("sub_json_data========================={}".format(sub_json_data)) json_json = get_json(sub_json_data) logger.info("json_json========================={}".format(json_json)) return return_path, sub_json_data
def docCreator(): weekdays = Day_Info.objects.all().order_by('order') #theDate = datetime.date.today() #this may need to be replaced by a prompt of some kind #strDate = theDate.strftime('%m/%d/%Y') #intDay = int(theDate.day) theDay = datetime.date.today() weekList = [] weekdayNumber = theDay.weekday() wkcounter = 0 while wkcounter < 7: weekList.append(weekdayNumber) if weekdayNumber == 6: weekdayNumber = 0 else: weekdayNumber += 1 wkcounter += 1 weekdays3 = [weekdays[i] for i in weekList] theDayDay = theDay.day theDayMo = theDay.month theDayYear = theDay.year for weekday in weekdays3: #this area allows for the program to be run any day #intDay = intDay + 1 checkDate = datetime.date(theDayYear,theDayMo,theDayDay) theDayDay += 1 amJobs = Job.objects.filter(day__contains = weekday).filter(time='am') pmJobs = Job.objects.filter(day__contains = weekday).filter(time='pm') #jobs = Job.objects.all() students = Student.objects.filter(arrival_Date__lt=checkDate) arrivals = Student.objects.filter(arrival_Date = checkDate) departures = Student.objects.filter(departure_Date = checkDate) strArrivals = "" strDepartures = "" for a in arrivals: strArrivals += (a.first_Name + " ") for d in departures: strDepartures += (d.first_Name + " ") jobnames = [] jobnamesB = [] studentnames = [] strstudentnames = "" mealplace = ["a","b"] schdictAM = {} schdictPM = {} mealdict = {} for s in students: studentnames.append(s.first_Name) strstudentnames += (s.first_Name + " ") random.shuffle(studentnames) a = 0 b = 3 for j in amJobs: jobnames.append(j.work_Name) schdictAM[j.work_Name] = studentnames[a:b] del studentnames[a:b] a+=3 b+=3 q = 0 r = 3 for jb in pmJobs: jobnamesB.append(jb.work_Name) schdictPM[jb.work_Name] = studentnames[q:r] q+=3 r+=3 c = 0 d = 0 if len(studentnames) -1 > 14: d = (len(studentnames)-1) /2 else: d = len(studentnames)-1 for m in mealplace: mealdict[m] = studentnames[c:d] if d == len(studentnames)-1: break c = d d = len(studentnames)-1 # comeback lunch = "" for m in mealdict: #lunch += m for ele in mealdict[m]: lunch += (ele + " ") workAM = "" for w in schdictAM: if workAM != "": workAM += "\n" workAM += (w + "- ") for wele in schdictAM[w]: workAM += (wele + " ") # if wele == "Morning Grounds": # break workPM = "" for w in schdictPM: if workPM != "": workPM += "\n" workPM += (w + "- ") for wele in schdictPM[w]: workPM += (wele + " ") # if wele == "Morning Grounds": # break document = docx.Document()#creating document #assign day pweekday = checkDate.strftime('%A' ) + " " + checkDate.strftime('%B' ) + " " + str(checkDate.day) #pweekday = str(weekdays) + str(weekdays3) day = document.add_paragraph(pweekday) day_format = day.paragraph_format day_format.space_after = Pt(18) day_format.alignment = WD_ALIGN_PARAGRAPH.CENTER #breakfast infor breakfastTime = document.add_paragraph("8:00am Breakfast -(everyone expected)") breakfastTime_format = breakfastTime.paragraph_format breakfastTime_format.space_after = Pt(18) breakfastTime_format.alignment = WD_ALIGN_PARAGRAPH.CENTER locationB = document.add_paragraph("At Chalet Bellevue") locationB_format = locationB.paragraph_format locationB_format.space_after = Pt(18) locationB_format.alignment = WD_ALIGN_PARAGRAPH.CENTER tableB = document.add_table(rows=1, cols=1) tableB.borders={'All':Pt(.2)} row1B = tableB.rows[0] cell1B = row1B.cells[0] cell1B.text = strstudentnames arrivals = document.add_paragraph("Arrivals: " + strArrivals) arrivals_format = arrivals.paragraph_format arrivals_format.space_before = Pt(18) arrivals_format.space_after = Pt(0) arrivals_format.alignment = WD_ALIGN_PARAGRAPH.CENTER departures = document.add_paragraph("Departures: " + strDepartures) departures_format = departures.paragraph_format departures_format.space_after = Pt(18) departures_format.alignment = WD_ALIGN_PARAGRAPH.CENTER if weekday.Lunch_A != 'none': lunchTime = document.add_paragraph("1:00 Lunch-(everyone expected)") lunchTime_format = lunchTime.paragraph_format lunchTime_format.space_after = Pt(18) lunchTime_format.alignment = WD_ALIGN_PARAGRAPH.CENTER locationLa = document.add_paragraph("At Chalet " + weekday.Lunch_A)#plus the location locationLa_format = locationLa.paragraph_format locationLa_format.space_after = Pt(18) locationLa_format.alignment = WD_ALIGN_PARAGRAPH.CENTER tableLa = document.add_table(rows=1, cols=1) row1La = tableLa.rows[0] cell1La = row1La.cells[0] cell1La.text = strstudentnames else: locationLa = document.add_paragraph("Packed lunches are in the student fridge") locationLa_format = locationLa.paragraph_format locationLa_format.space_after = Pt(18) locationLa_format.alignment = WD_ALIGN_PARAGRAPH.CENTER if len(studentnames) > 14 and weekday.Lunch_B != 'none': locationLb = document.add_paragraph("At Chalet " + weekday.Lunch_B)#plus the location locationLb_format = locationLb.paragraph_format locationLb_format.space_after = Pt(18) locationLb_format.alignment = WD_ALIGN_PARAGRAPH.CENTER tableLb = document.add_table(rows=1, cols=1) row1Lb = tableLb.rows[0] cell1Lb = row1Lb.cells[0] cell1La.text = lunch[0: int(round((len(lunch)/2 -1)))] # comeback to this cell1Lb.text = lunch[ int(round((len(lunch))/2 )):len(lunch) - 1] dinnerTime = document.add_paragraph("6:30 Dinner -(everyone expected)") dinnerTime_format = dinnerTime.paragraph_format dinnerTime_format.space_before = Pt(40) dinnerTime_format.space_after = Pt(18) dinnerTime_format.alignment = WD_ALIGN_PARAGRAPH.CENTER locationD = document.add_paragraph("At Chalet Bellevue with " + weekday.dinner) locationD_format = locationD.paragraph_format locationD_format.space_after = Pt(18) locationD_format.alignment = WD_ALIGN_PARAGRAPH.CENTER tableD = document.add_table(rows=1, cols=1) row1D = tableD.rows[0] cell1D = row1D.cells[0] cell1D.text = strstudentnames workPara = document.add_paragraph("Work Assignments: if your name is not down for a work crew, you have a study day:") workPara_format = workPara.paragraph_format workPara_format.space_before = Pt(20) workPara_format.space_after = Pt(6) workPara_format.alignment = WD_ALIGN_PARAGRAPH.CENTER tablew = document.add_table(rows=1, cols=2) cell1w = tablew.rows[0].cells[0] cell1w.text = ("am\n \n 7:30 Breakfast Prep: \n 7:50 Trash out- \n 9:30am: \n \n" + workAM) cell2w = tablew.rows[0].cells[1] cell2w.text = ("pm\n \n 3:00pm:\n \n" + workPM + "\nInternet collection at dinner- \nNight Office- \nDay Off- ") document.save('oldschedules/' + pweekday +'.docx')
def format_normal(document): document.styles['Normal'].font.name = over_all_font document.styles['Normal'].font.size = Pt(15) document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
def create_word_for_syslog(db_name, add_img, save_word_name): today = time.strftime("%Y{y}%m{m}%d{d}", time.localtime()).format(y='年', m='月', d='日') document = Document() # 设置文档的基础字体 document.styles['Normal'].font.name = u'微软雅黑' document.styles['Normal'].font.size = Pt(14) # 设置文档的基础样式 document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') # 在文件最上头插入图,宽度为6英寸 document.add_picture(add_img, width=Inches(6)) # 初始化建立第一个自然段 p1 = document.add_paragraph() # 对齐方式为居中,没有这句的话默认左对齐。 p1.alignment = WD_ALIGN_PARAGRAPH.CENTER # 设置标题 run1 = p1.add_run('乾颐堂Python强化班Syslog分析') # 设置西文字体 run1.font.name = '微软雅黑' # 设置中文字体 run1._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') # 设置字体大小为20磅 run1.font.size = Pt(20) # 设置加粗 run1.font.bold = True # 段后距离1磅 p1.space_after = Pt(1) # 段前距离5磅 p1.space_before = Pt(5) # 初始化建立第二个自然段 p2 = document.add_paragraph() # 产生数据和图 syslog_result = syslog_bing(db_name, 'temp.png') # 第二个自然段主题 run2 = p2.add_run('下面是最近一个小时的Syslog的数据统计! 显示排前三的Syslog严重级别与数量') # 字体和大小 run2.font.name = '仿宋_GB2312' run2._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋_GB2312') run2.font.size = Pt(10) # 创建表 table = document.add_table(rows=4, cols=3, style='Light Grid Accent 2') # 第一行 table.cell(0, 0).text = '严重级别' table.cell(0, 1).text = '数量' table.cell(0, 2).text = '百分比' total = sum([y for x, y in syslog_result]) # 后续行 i = 1 for x, y in syslog_result[:3]: table.cell(i, 0).text = x table.cell(i, 1).text = str(int(y)) table.cell(i, 2).text = f'{(y/total)*100:.1f}' i += 1 # 初始化建立第三个自然段 p3 = document.add_paragraph() # 第二个自然段主题 run3 = p3.add_run('\r\n下面是最近一个小时的Syslog的数据统计饼状图分析!') # 字体和大小 run3.font.name = '仿宋_GB2312' run3._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋_GB2312') run3.font.size = Pt(10) # 插入图片 document.add_picture('temp.png', width=Inches(3.0), height=Inches(3.0)) # 删除图片 os.remove('temp.png') # 保存文档 document.save(save_word_name)
def format_heading_run(heading_run: Run): heading_run.font.name = over_all_font heading_run.font.size = Pt(17) heading_run._element.rPr.rFonts.set(qn('w:eastAsia'), over_all_font) heading_run.bold = True
def get_conference_schedule_file(short_name, type): """Download conference schedule.""" conference = Conference.query.filter_by(short_name=short_name).first() if type not in ['txt', 'doc']: return bad_request('Invalid file type') if conference: sessions = conference.conference_schedule.get_sessions.all() if type == 'txt': txts = [] for session in sessions: txts.append( u'{session.start_time}\t{session.end_time}\t{session.title}\t\ {session.venue}'.format(session=session)) return Response('\n'.join(txts), mimetype='text/plain', headers={ 'Content-disposition': 'attachment; \ filename={}_schedule.txt'.format( conference.short_name) }) else: # only allow chair to download the doc if (current_user.is_anonymous) or \ (not current_user.is_chair(conference)): return forbidden('Not allowed') with io.BytesIO() as doc_stream: doc_document = Document() doc_document.add_heading(conference.name, 1) for session in sessions: p = doc_document.add_paragraph( u'{session.start_time} - {session.end_time}: ' '{session.title}'.format(session=session), style='ListBullet') p.runs[0].font.size = Pt(13) p.add_run('\nVenue: ' + session.venue) speakers = session.speakers.all() if speakers: p.add_run('\nSpeakers:') for speaker in speakers: p.add_run('\n\t{speaker.full_name} ' '({speaker.organization})'.format( speaker=speaker)) moderators = session.moderators.all() if moderators: p.add_run('\nChairs:') for moderator in moderators: p.add_run('\n\t{moderator.full_name} ' '({moderator.organization})'.format( moderator=moderator)) papers = session.papers if papers != []: p.add_run('\nPapers:') for paper in papers: r = p.add_run('\n\t' + paper.title) r.italic = True r.bold = True p.add_run('\n\t\t' + ', '.join([ author.full_name for author in paper.authors_list ])) doc_document.save(doc_stream) return Response(doc_stream.getvalue(), mimetype='application/msword', headers={ 'Content-disposition': 'attachment; \ filename={}_schedule.doc'.format( conference.short_name) }) else: return bad_request('Conference not found')
# print(style.name) document.add_heading('文章标题', 0) p = document.add_paragraph('一个段落是由多个 ') p.add_run('run').bold = True p.add_run('联接') p.add_run('组成的').italic = True p = document.add_paragraph() text = '一个人的命运当然要靠自我奋斗,但是也要考虑到历史的进程' for i, ch in enumerate(text): run = p.add_run(ch) font = run.font font.name = '华文彩云' font.size = Pt(20) font.color.rgb = RGBColor(i * 10 % 200 + 55, i * 20 % 200 + 55, i * 30 % 200 + 55) document.add_heading('一级标题', level=1) document.add_paragraph('Intense quote', style='IntenseQuote') document.add_paragraph('first item in unordered list', style='ListBullet') document.add_paragraph('first item in unordered list', style='ListBullet') document.add_paragraph('first item in ordered list', style='ListNumber') document.add_paragraph('first item in ordered list', style='ListNumber') styles = document.styles document.add_heading('段落样式:', level=1) # paragraph_styles=[s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH] # for s in paragraph_styles:
def crear(): ss = openpyxl.load_workbook(ex.get() + ".xlsx") sheet = ss.get_sheet_by_name(hoja.get()) for i in sheet.iter_rows(max_row=0): n = len(i) #Extraemos datos de contrato desde Excel for j in range(6, n): nombre = sheet.cell(row=j, column=1).value nacionalidad = sheet.cell(row=j, column=2).value domicilio = sheet.cell(row=j, column=3).value curp = sheet.cell(row=j, column=4).value rfc = sheet.cell(row=j, column=5).value start = sheet.cell(row=j, column=6).value final = sheet.cell(row=j, column=7).value hrs = sheet.cell(row=j, column=8).value hrs = str(hrs) importe = sheet.cell(row=j, column=9).value importe = str(importe) importe_letra = sheet.cell(row=j, column=10).value antiguedad = sheet.cell(row=j, column=11).value #Creamos el docx doc = docx.Document() paragraph = doc.add_paragraph() run = paragraph.add_run( "CONTRATO INDIVIDUAL DE TRABAJO POR TIEMPO DETERMINADO PARA PROFESORES" ) font = run.font paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER font.color.rgb = RGBColor(0x00, 0x00, 0x00) font.name = 'Tahoma' font.size = Pt(11) font.bold = True paragraph = doc.add_paragraph() run = paragraph.add_run( "CONTRATO INDIVIDUAL DE TRABAJO POR TIEMPO DETERMINADO PARA MAESTROS QUE CELEBRAN POR UNA PARTE EL COLEGIO " ) font = run.font paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run1 = paragraph.add_run('"INSTITUTO FRANCISCO POSSENTI, A. C." ') run1.bold = TRUE font = run1.font paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run = paragraph.add_run( "CON DOMICILIO EN AV. TOLUCA No. 621 COL. OLIVAR DE LOS PADRES DEL. ALVARO OBREGON C. P. 01780 REPRESENTADO POR EL C. " ) font = run.font paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run1 = paragraph.add_run("J. ANTONIO BARRIENTOS RODRIGUEZ ") run1.bold = TRUE font = run1.font paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run = paragraph.add_run( "A QUIEN EN LO SUCESIVO SE DENOMINARA EL PATRON, Y POR LA OTRA. " + nombre + " DE NACIONALIDAD " + nacionalidad + " CON DOMICILIO " + domicilio + ", A QUIEN EN ADELANTE SE DENOMINARA EL TRABAJADOR, DE ACUERDO CON LAS SIGUIENTES:" ) font = run.font paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) clau = doc.add_paragraph() run2 = clau.add_run("C L A U S U L A S ") font = run2.font clau.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER font.color.rgb = RGBColor(0x00, 0x00, 0x00) font.name = 'Arial' font.size = Pt(11) font.bold = True paragraph2 = doc.add_paragraph() run3 = paragraph2.add_run("PRIMERA.- ") run3.bold = TRUE font = run3.font paragraph2.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph2.add_run( "El (a) Profesor (a) manifiesta, bajo protesta de decir verdad, que tiene la Clave Única de Registro de Población " + curp + " y el Registro Federal de Contribuyentes " + rfc + " que tiene la capacidad, aptitudes, facultades y conocimientos necesarios para desempeñar el trabajo que se le encomienda, así como la documentación completa y actualizada por la Secretaria de Educación Publica y/o la UNAM, así como a las disposiciones señaladas por los artículos 42 fracción VII, de la nueva Ley Federal del Trabajo publicada en el Diario Oficial de la Federación el día 30 de noviembre del 2012 que se requiere así como está de acuerdo en que el no cumplir con cualquiera de estos requisitos será causa suficiente para que el patrón le rescinda su contrato de trabajo en el momento que tenga conocimiento de la carencia de alguna de esta condiciones, así mismo se compromete a que en caso de que el profesor (a) cambie de domicilio durante la vigencia del presente contrato notificará por escrito al patrón dentro de los cinco días siguientes que cambie de domicilio. " ) font = run3.font paragraph2.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph3 = doc.add_paragraph() run3 = paragraph3.add_run("SEGUNDA.- ") run3.bold = TRUE font = run3.font paragraph3.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph3.add_run( "Este contrato por exigencias expresas de la Secretaría de Educación Pública se celebra por tiempo determinado, el cual se precisa en el Acuerdo " ) font = run3.font paragraph3.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph3.add_run("14/072020 ") run3.bold = TRUE font = run3.font paragraph2.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph3.add_run( "de la Secretaría de Educación Pública publicado en el Diario Oficial del " ) font = run3.font paragraph3.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph3.add_run("03 DE AGOSTO DEL 2020, ") run3.bold = TRUE font = run3.font paragraph2.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph3.add_run( "y sólo podrá modificarse, rescindirse o terminarse en los casos y condiciones especificados en la Ley Federal del Trabajo, o por aquellas autoridades que en su momento cuenten con facultades suficientes para modificar, rescindir o dar por terminado el presente contrato. " ) font = run3.font paragraph3.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph4 = doc.add_paragraph() run3 = paragraph4.add_run("TERCERA.- ") run3.bold = TRUE font = run3.font paragraph4.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph4.add_run( "El Patrón y el (a) Profesor (a), convienen expresamente y con fundamento en el Art. 47 Fracción I de la Ley Federal del Trabajo, que dentro de los primeros treinta días o cuando el patrón tenga conocimiento de la carencia o incumplimiento de alguna de las condiciones básicas requeridas para desempeñar el trabajo contratado, se podrá rescindir este Contrato de Trabajo sin responsabilidad para el Patrón. " ) font = run3.font paragraph4.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph5 = doc.add_paragraph() run3 = paragraph5.add_run("CUARTA.- ") run3.bold = TRUE font = run3.font paragraph5.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph5.add_run( "El (a) Profesor (a) se obliga a prestar sus servicios personales al INSTITUTO, bajo su dirección, dependencia y subordinación, las cuales consistirán precisamente en: " ) font = run3.font paragraph5.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph6 = doc.add_paragraph() run3 = paragraph6.add_run( "Proporcionar personalmente, a los alumnos que se le indiquen o le sean asignados enseñanza eficiente durante el tiempo determinado del ciclo Escolar vigente, y como lo dispone el artículo 56 Bis de la nueva Ley Federal del Trabajo publicada en el Diario Oficial de la Federación el día 30 de noviembre del 2012, sujetándose a los programas y planes de estudio correspondientes que le sean entregados por el INSTITUTO, debidamente autorizados. " ) font = run3.font paragraph6.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph6 = doc.add_paragraph() run3 = paragraph6.add_run( "El presente contrato se celebra por un tiempo que será de " + start + " y termina " + final) font = run3.font paragraph6.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph7 = doc.add_paragraph() run3 = paragraph7.add_run("QUINTA.- ") run3.bold = TRUE font = run3.font paragraph7.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraph7.add_run( "Los servicios contratados se estipulan en forma enunciativa y no limitativa; por tanto, el (a) Profesor (a) se obliga a desempeñar todas las labores anexas o conexas con su obligación principal y las demás que le ordene el Patrón o sus representantes, tales como guardias escolares, cursos de verano, de capacitación de reprogramación de estudios, exámenes extraordinarios, exámenes de diagnóstico, noche colonial, exámenes de admisión, ofrenda de día de muertos, posada navideña etc, cuya retribución económica está convenida y comprendida en la Cláusula Décima Primera del presente contrato." ) font = run3.font paragraph7.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph8 = doc.add_paragraph() run3 = paragraph8.add_run( "De la misma manera y solo para el caso de que sea aplicable y derivado de un caso fortuito o fuerza mayor las modificaciones al presente contrato referidas en las reformas al artículo 311 de la Ley Federal del Trabajo capitulo XII Bis en materia de Teletrabajo publicada en el diario Oficial de la federación el día 11 de enero del 2021. " ) font = run3.font paragraph8.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraph9 = doc.add_paragraph() run3 = paragraph9.add_run( "La desobediencia a las órdenes o indicaciones del Patrón o sus representantes para el cumplimiento del trabajo contratado, será causa de rescisión sin responsabilidad para el Patrón." ) font = run3.font paragraph9.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphA = doc.add_paragraph() run3 = paragraphA.add_run("SEXTA.- ") run3.bold = TRUE font = run3.font paragraphA.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphA.add_run( "Los servicios objeto de la relación de trabajo deben prestarse en el lugar o en los lugares que designe el Patrón o sus representantes, quedando convenido que éste tendrá derecho de cambiar el lugar de trabajo del (a) profesor (a) cuando se estime pertinente o necesario, siempre y cuando dicho cambio no se traduzca en una merma de su remuneración para el (la) mismo (a),esto incluye para aquellos casos donde las autoridades competentes establezcan el cierre de la fuente de trabajo derivado de caso fortuito o fuerza mayor así como las posibles modificaciones al presente contrato según las reformas al artículo 311 de la ley Federal del Trabajo capitulo XII Bis en materia de teletrabajo publicada en el diario oficial de la federación el día 11 de enero del 2021. " ) font = run3.font paragraphA.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphB = doc.add_paragraph() run3 = paragraphB.add_run("SEPTIMA.- ") run3.bold = TRUE font = run3.font paragraphB.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphB.add_run( "La duración de la jornada de trabajo será de: ") font = run3.font paragraphA.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphB.add_run(hrs) run3.bold = TRUE font = run3.font paragraphB.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphB.add_run(" horas, ") run3.bold = TRUE font = run3.font paragraphB.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphB.add_run( "según horario anexo. El (la) Profesor (a) está de acuerdo en que deberá asistir los días que sean necesarios para las distintas actividades que se precisan en la cláusula quinta del presente contrato. El pago correspondiente a esta jornada de trabajo, está ya integrado en el sueldo convenido que se indica en la cláusula Décima del presente instrumento." ) font = run3.font paragraphB.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphC = doc.add_paragraph() run3 = paragraphC.add_run("OCTAVA.- ") run3.bold = TRUE font = run3.font paragraphC.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphC.add_run( "El (a) Profesor (a) se obliga a desempeñar sus labores con la intensidad, cuidado y esmero apropiados en la forma, tiempo y lugar a que se refiere este Contrato y el Reglamento Interior de Trabajo. El incumplimiento de esta disposición se considera falta de probidad del (a) Profesor (a) y, de ocurrir, se sancionará con la rescisión del Contrato sin responsabilidad para el Patrón." ) font = run3.font paragraphC.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphD = doc.add_paragraph() run3 = paragraphD.add_run("NOVENA.- ") run3.bold = TRUE font = run3.font paragraphD.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphD.add_run( "El (a) Profesor (a) está obligado a checar en el reloj o firmar las listas de asistencia a la entrada y salida de sus labores, el incumplimiento de este requisito se considerará como una desobediencia para todos los efectos legales a que haya lugar, el retiro del Profesor de su lugar de Trabajo durante su jornada de labores, sin autorización, será considerado como una desobediencia y por lo tanto abandono de trabajo." ) font = run3.font paragraphD.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphE = doc.add_paragraph() run3 = paragraphE.add_run( "El registrar entradas o salidas por otra persona, será causa de rescisión del presente contrato sin responsabilidad para el Patrón." ) font = run3.font paragraphE.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphF = doc.add_paragraph() run3 = paragraphF.add_run("DECIMA.- ") run3.bold = TRUE font = run3.font paragraphF.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphF.add_run( "Se conviene como salario nominal, que el Patrón deberá pagar por los trabajos personales que reciba del(a)Profesor(a),la cantidad de: $ " + importe + " ( " + importe_letra + " 00/100 M. N.) Dicho salario mensual será cubierto por mitad al (a) profesor (a) después de sumar las prestaciones y restar los impuestos correspondientes, cada día quince y último de cada mes mediante depósito bancario tal y como lo dispone el artículo 101 de la nueva Ley Federal del Trabajo publicada en el Diario Oficial de la Federación el día 30 de noviembre del 2012, en las oficinas de la Escuela, en efectivo o en cheque, o mediante algún otro sistema de pago que las partes estimen adecuado y seguro." ) font = run3.font paragraphF.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphG = doc.add_paragraph() run3 = paragraphG.add_run( "Además del salario nominal mencionado y de todas las prestaciones que establece la Ley Federal del Trabajo como mínimas EL INSTITUTO otorgará las siguientes prestaciones." ) font = run3.font paragraphG.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphH = doc.add_paragraph() run3 = paragraphH.add_run( "10% del salario nominal por concepto de premios por asistencia siempre y cuando el profesor no falte y asista a lo convocado por el Instituto. Estos premios se entregarán en efectivo en los mismos plazos y condiciones que el salario nominal y según el Reglamento Interno de Trabajo." ) font = run3.font paragraphH.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphI = doc.add_paragraph() run3 = paragraphI.add_run( "10% del salario nominal por concepto de premio de puntualidad. Esta prestación la tendrá el profesor cuando llegue al Instituto 5 minutos antes de la primera hora-clase según su horario. También se entregará en efectivo en los mismos plazos y condiciones que el salario nominal y según el Reglamento Interno de Trabajo." ) font = run3.font paragraphI.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphJ = doc.add_paragraph() run3 = paragraphJ.add_run( "12% del salario nominal por concepto de vales de despensa como concepto de previsión social según el Plan de Previsión del Instituto Francisco, Possenti,A.C. los cuales se entregarán el día 28 de cada mes, en monedero electrónico." ) font = run3.font paragraphJ.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphK = doc.add_paragraph() run3 = paragraphK.add_run( "13% del salario nominal por concepto de aportación a un fondo de ahorro, que junto con un porcentaje igual que se retendrá al trabajador cada quincena, se depositará en una cuenta bancaria y se retirará al final del ciclo escolar" ) font = run3.font paragraphK.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphL = doc.add_paragraph() run3 = paragraphL.add_run( "Los préstamos que se otorguen a los trabajadores, serán de acuerdo a los lineamientos que regulan el Fondo de Ahorro." ) font = run3.font paragraphL.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphM = doc.add_paragraph() run3 = paragraphM.add_run( "En las cantidades anteriores queda comprendido el pago de los séptimos días, los días de descanso obligatorio, las vacaciones, los décimos sextos días del mes, así como los conceptos señalados en la Cláusula Quinta del presente contrato, así como las labores conexas o complementarias que desempeña de acuerdo a su labor principal tal y como lo dispone el artículo 56 Bis de la nueva Ley Federal del Trabajo publicada en el Diario Oficial de la Federación el día 30 de noviembre del 2012." ) font = run3.font paragraphM.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphN = doc.add_paragraph() run3 = paragraphN.add_run( "El (la) Profesor (a) está de acuerdo en que el patrón le efectúe los descuentos de cuotas al Seguro Social que le correspondan." ) font = run3.font paragraphN.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphO = doc.add_paragraph() run3 = paragraphO.add_run("DECIMA PRIMERA.- ") run3.bold = TRUE font = run3.font paragraphO.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphO.add_run( "El (a) Profesor (a) asistirá según el horario establecido en la cláusula séptima conviniéndose que si trabaja el domingo tendrá derecho a que se le pague una prima de un 25 % sobre su salario tabulado, quedando obligado a asistir a cursos de capacitación y desarrollo los días establecidos por la dirección técnica, la remuneración por estos últimos conceptos está incluida e integrado en la Cláusula Decima del presente Contrato." ) font = run3.font paragraphO.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphP = doc.add_paragraph() run3 = paragraphP.add_run("DECIMA SEGUNDA.- ") run3.bold = TRUE font = run3.font paragraphP.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphP.add_run( "Son días de descanso obligatorio de acuerdo con el Articulo 74 de la Ley Federal del Trabajo, el 1° de Enero, 5 de Febrero, 21 de Marzo, 1° de Mayo, 16 de Septiembre, 20 de Noviembre, 25 de Diciembre y 1º de Diciembre de cada seis años, cuando corresponda a la transmisión del Poder Ejecutivo Federal, quedando prohibido que el (a) Profesor (a) labore esos días, salvo permiso previo y por escrito del Patrón. El pago de estos días queda cubierto en la cantidad convenida como salario que aparece en la Cláusula Décima de este contrato. " ) font = run3.font paragraphP.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphQ = doc.add_paragraph() run3 = paragraphQ.add_run( "Las partes aceptan los cambios a estas fechas para aprovechar los “Puentes” que determine la Ley Laboral." ) font = run3.font paragraphQ.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphR = doc.add_paragraph() run3 = paragraphR.add_run("DECIMA TERCERA.- ") run3.bold = TRUE font = run3.font paragraphR.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphR.add_run( "El (a) Profesor (a) se compromete a sujetarse a los cursos de capacitación y adiestramiento a que se refieren los Artículos 153 A al 153 X de la Ley Federal del Trabajo." ) font = run3.font paragraphR.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphS = doc.add_paragraph() run3 = paragraphS.add_run("DECIMA CUARTA.- ") run3.bold = TRUE font = run3.font paragraphS.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphS.add_run( "El (a) Profesor (a) gozará EXCLUSIVAMENTE de las VACACIONES Y DE LA PRIMA VACACIONAL que le correspondan con base en los Artículos 76 y 80 de la Ley Federal del Trabajo de acuerdo con su antigüedad en la escuela. Estas vacaciones serán disfrutadas exclusivamente durante los periodos de la última quincena de Diciembre de cada año y el periodo de Semana Santa tal como lo señala y ordena el Calendario Oficial de la SEP vigente." ) font = run3.font paragraphS.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphT = doc.add_paragraph() run3 = paragraphT.add_run( "El Profesor (a) se da por enterado (a) y de acuerdo en que los periodos de Julio y Agosto corresponden a RECESO DE CLASES para los alumnos, según dictamen de la Secretaría de Educación Pública y/o UNAM, y que por lo tanto, estos periodos en ningún caso corresponde a vacaciones para el personal docente y del Colegio en general." ) font = run3.font paragraphT.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphU = doc.add_paragraph() run3 = paragraphU.add_run("DECIMA QUINTA.- ") run3.bold = TRUE font = run3.font paragraphU.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphU.add_run( "Todos los estudios, planes, programas, datos y en general cualquier documentación e información que el Profesor reciba o que elabore en el desempeño de sus servicios o por el encargo específico de la Escuela, serán propiedad de ésta última, en cuya virtud se obliga a devolverlos en el momento de ser requeridos para ello o al terminar este Contrato, o sea el " + final) font = run3.font paragraphU.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphV = doc.add_paragraph() run3 = paragraphV.add_run("DECIMA SEXTA.- ") run3.bold = TRUE font = run3.font paragraphV.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphV.add_run( "El (a) Profesor (a) está de acuerdo en no divulgar con ninguna persona o en otra Institución los datos, documentos, conocimientos e informes que haya obtenido con motivo de la prestación de sus servicios en la Escuela, ya que tienen el carácter de confidenciales, en caso de hacerlo será considerada su conducta como falta de probidad, además de las consecuencias legales que de esto origine." ) font = run3.font paragraphV.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphW = doc.add_paragraph() run3 = paragraphW.add_run("DECIMA SEPTIMA.- ") run3.bold = TRUE font = run3.font paragraphW.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphW.add_run( "Los contratantes declaran que conocen el Reglamento Interior de Trabajo del Colegio, al cual se sujetarán en todas sus Cláusulas, por haberlo firmado protestando su estricto y legal cumplimiento." ) font = run3.font paragraphW.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphX = doc.add_paragraph() run3 = paragraphX.add_run("DECIMA OCTAVA.- ") run3.bold = TRUE font = run3.font paragraphX.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphX.add_run( "El patrón reconoce al trabajador una antigüedad a partir del " + antiguedad + ". En todo lo no previsto, en el presente Contrato, se estará a las disposiciones de la Ley Federal del Trabajo vigente." ) font = run3.font paragraphX.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphY = doc.add_paragraph() run3 = paragraphY.add_run("DECIMA NOVENA.- ") run3.bold = TRUE font = run3.font paragraphY.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphY.add_run( "El Instituto Francisco Possenti, A. C., le informa que sus datos personales, incluyendo los sensibles se utilizarán para identificar, informar, operar, gestionar y demás acciones que sean necesarias para la prestación de servicios laborales subordinados en el Instituto. El derecho de acceso, rectificación, cancelación oposición, limitación o la revocación de uso de sus datos personales, que para tal fin nos haya otorgado, a través de los procedimientos que hemos implementado, podrá solicitarse por escrito en dependencias gubernamentales como, la SEP, el SAT, IMSS, INFONAVIT, Secretaría del Trabajo etc., le informamos que si usted no manifiesta su oposición para que sus datos personales sean utilizados por el Instituto, significa que ha leído, entendido y aceptado los términos antes expuestos otorgando su consentimiento para ello." ) font = run3.font paragraphY.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphZ = doc.add_paragraph() run3 = paragraphZ.add_run("VIGÉCIMA.- ") run3.bold = TRUE font = run3.font paragraphZ.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphZ.add_run( "Ambas partes acuerdan que en caso de suspensión de las actividades escolares por causas de fuerza mayor o caso fortuito se estará a las disposiciones que señalen las autoridades competentes." ) font = run3.font paragraphZ.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphA1 = doc.add_paragraph() run3 = paragraphA1.add_run("VIGÉCIMA PRIMERA.- ") run3.bold = TRUE font = run3.font paragraphA1.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphA1.add_run( "Ambas partes manifiestan que tienen pleno conocimiento y cumplimiento de los alcances de la NOM-035-STPS-2018, factores de riesgo psicosocial en el trabajo, identificación, análisis y prevención, publicada en el Diario Oficial de la Federación el 23 de octubre del 2018, en términos de los dispuesto por los artículos 40, fracciones I y XI, de la Ley Orgánica de la Administración Pública Federal; 512, 523, fracción I, 524 y 527, último párrafo, de la Ley Federal del Trabajo; 1º.,3º., fracción XI, 38, fracción II, 40, fracción VII, 41,47, fracción IV,51, primer párrafo, 62,68, y 87 de la Ley Federal sobre Metrología y Normalización ; 28 del Reglamento de la ley federal sobre Metrología y Normalización; 5º., fracción III,7, fracciones I,II, III,IV,V, VII,IX,XI y XII, 8, fracciones I, III, V, VIII, X y XI,10, 32, fracción XI, 43,44, fracción VIII, y 55, del Reglamento Federal de Seguridad y Salud en el Trabajo, y 5, fracción III, y 24 del Reglamento Interior de la Secretaría del Trabajo y Previsión Social." ) font = run3.font paragraphA1.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphA2 = doc.add_paragraph() run3 = paragraphA2.add_run("VIGÉCIMA SEGUNDA.- ") run3.bold = TRUE font = run3.font paragraphA2.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) run3 = paragraphA2.add_run( "Ambas partes están de acuerdo que en caso de que hubiera una contingencia sanitaria conforme a los artículos 42 Bis, 429 fracción l y IV de la Ley Federal del Trabajo o declaración de emergencia sanitaria derivada de cualquier tipo de virus o bacteria, o situación derivada de cualquier tipo de “caso fortuito” o de “fuerza mayor” y como consecuencia de ello se tuviera que suspender la relación de trabajo o cerrar por tiempo determinado o indeterminado la fuente de trabajo, incluyendo la suspensión de la actividad escolar por tiempo definido o indefinido, Patrón y profesor(a) acuerdan que durante el periodo de dicha suspensión el salario quincenal integrado se ajustará de conformidad con las posibilidades económicas del Patrón, lo anterior con el objetivo de que los recursos económicos (ingresos) de dicho patrón pueden ser repartidos de forma equitativa entre todos los trabajadores, incluyendo el hacer frente al pago de las obligaciones fiscales, gastos fijos y administrativos de la escuela y de seguridad social de cada Trabajador. A su vez y derivado de caso fortuito o fuerza mayor cuando las autoridades competentes nos obliguen a modificar en todo o en parte el presente contrato se tomará en cuenta lo establecido en el decreto por el que se reforma el artículo 311 y se adiciona el capitulo XII Bis de la Ley Federal de Trabajo en materia de Teletrabajo publicado en el Diario Oficial de la Federación el día 11 de enero 2021 para aquellos casos o situaciones que apliquen en el presente contrato y relación de trabajo." ) font = run3.font paragraphA2.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphA3 = doc.add_paragraph() run3 = paragraphA3.add_run( "Leído que fue por ambas partes este documento y sabedoras de las obligaciones que contraen, lo firman de conformidad por duplicado en el lugar y fecha señalados a continuación." ) font = run3.font paragraphA3.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY font.name = 'Arial' font.size = Pt(11) paragraphA2 = doc.add_paragraph() run3 = paragraphA2.add_run("CIUDAD DE MEXICO, A " + start) run3.bold = TRUE font = run3.font paragraphA2.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT font.name = 'Arial' font.size = Pt(11) table = doc.add_table(rows=3, cols=3) cell1 = table.cell(2, 0) cell1.text = ' EL PATRÓN C. J. ANTONIO BARRIENTOS R. Representante Legal' run = cell1.paragraphs[0].runs[0] run.font.bold = True run.font.name = "Arial" run.font.size = Pt(9) cell1.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER tc = cell1._tc tcPr = tc.get_or_add_tcPr() tcBorders = OxmlElement('w:tcBorders') top = OxmlElement('w:top') top.set(qn('w:val'), 'single') tcBorders.append(top) tcPr.append(tcBorders) cell3 = table.cell(2, 2) cell3.text = 'EL (A) PROFESOR (A) ' + nombre run = cell3.paragraphs[0].runs[0] run.font.bold = True run.font.name = "Arial" run.font.size = Pt(9) cell3.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER tc = cell3._tc tcPr = tc.get_or_add_tcPr() tcBorders = OxmlElement('w:tcBorders') top = OxmlElement('w:top') top.set(qn('w:val'), 'single') tcBorders.append(top) tcPr.append(tcBorders) doc.save("Contrato " + nombre + ".docx")
#Verificando archivo a editar if ( not path.exists(outputFile) ): #No existe outputfile, abriendo plantilla document = Document(inputFile) else: #Abriendo outputfile document = Document(outputFile) #Si el archivo de salida existe, no se agrega portada if ( not path.exists(outputFile) ): #Creando Portada parrafo = document.add_paragraph() run = parrafo.add_run('Reporte de Actualizaciones Windows') font = run.font font.size = Pt(24) font.bold = True formato_parrafo = parrafo.paragraph_format formato_parrafo.alignment = WD_ALIGN_PARAGRAPH.CENTER document.add_paragraph() #TODO Obtener de AWX/Ansible el nombre del inventario y colocarlo en la portada # parrafo = document.add_paragraph() # run = parrafo.add_run('Inventario: Prueba') # font = run.font # font.size = Pt(24) # font.bold = True # formato_parrafo = parrafo.paragraph_format # formato_parrafo.alignment = WD_ALIGN_PARAGRAPH.CENTER
def generate_excel(): filename = filedialog.askopenfilename(filetypes=(("Excel Files", "*.xlsx"), ("All files", "*.*"))) # open the excel document and extract the data df = pd.read_excel(filename) lawyer = df["Attorney"] client = df["Client"] service = df["Service"] compensation_value = df["Compensation Value"] deposit_value = df["Deposit Value"] refundable_deposit_value = df["Refundable Deposit Value"] nonrefundable_deposit_value = df["Nonrefundable Deposit Value"] deposit_date = df["Deposit Date"] jurisdiction = df["Jurisdiction"] # start generating the document in a for. one document for each entry in the excel for i in range(len(lawyer)): doc = docx.Document() # title para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.CENTER run = para.add_run(title) run.font.name = "Times New Roman" run.font.size = Pt(20) run.font.bold = True # parties para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(parties % (lawyer[i], client[i])) run.font.name = "Times New Roman" run.font.size = Pt(12) # service para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(services % service[i]) run.font.name = "Times New Roman" run.font.size = Pt(12) # responsibilities para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(responsibilities) run.font.name = "Times New Roman" run.font.size = Pt(12) # compensation para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation % compensation_value[i]) run.font.name = "Times New Roman" run.font.size = Pt(12) para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation2) run.font.name = "Times New Roman" run.font.size = Pt(12) para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation3) run.font.name = "Times New Roman" run.font.size = Pt(12) para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation4) run.font.name = "Times New Roman" run.font.size = Pt(12) # costs para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(costs) run.font.name = "Times New Roman" run.font.size = Pt(12) # deposit para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run( deposit % (deposit_value[i], deposit_date[i], refundable_deposit_value[i], nonrefundable_deposit_value[i])) run.font.name = "Times New Roman" run.font.size = Pt(12) # provisions para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(provisions % jurisdiction[i]) run.font.name = "Times New Roman" run.font.size = Pt(12) # effective date para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(effective_date) run.font.name = "Times New Roman" run.font.size = Pt(12) # foregoing para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(foregoing) run.font.name = "Times New Roman" run.font.size = Pt(12) # signatures para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(signatures) run.font.name = "Times New Roman" run.font.size = Pt(12) # save the doc, with the client as file name doc.save(client[i] + " Contract.docx") lb_status.config(text="Generated %s files" % len(lawyer))
from docx.shared import Cm from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.shared import Pt import re def add_logo(p): p.add_run().add_picture('./logo.jpg', width=Inches(2)) p.add_run(text='\n') document = Document('./template.docx') style = document.styles['Normal'] font = style.font font.size = Pt(12) font.name = 'Leelawadee UI' photos = open("photo.txt", "w", encoding="utf8") with open("input.txt", "r", encoding="utf8") as f: lines = f.readlines() p = document.add_paragraph('') p.style = document.styles['Normal'] p.paragraph_format.keep_together = True order = 0 enter = False first_enter = False for l in lines: print(l) if l == '\n': if first_enter:
def generate(): # get all the information from the entry text and generate the file lawyer = et_lawyer_text.get() client = et_client_text.get() service = et_service_text.get() compensation_value = et_compensation_text.get() deposit_value = et_deposit_text.get() refundable_deposit_value = et_refundable_text.get() nonrefundable_deposit_value = et_non_refundable_text.get() deposit_date = et_deposit_date_text.get() jurisdiction = et_jurisdiction_text.get() # start generating the document doc = docx.Document() # title para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.CENTER run = para.add_run(title) run.font.name = "Times New Roman" run.font.size = Pt(20) run.font.bold = True # parties para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(parties % (lawyer, client)) run.font.name = "Times New Roman" run.font.size = Pt(12) # service para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(services % service) run.font.name = "Times New Roman" run.font.size = Pt(12) # responsibilities para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(responsibilities) run.font.name = "Times New Roman" run.font.size = Pt(12) # compensation para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation % compensation_value) run.font.name = "Times New Roman" run.font.size = Pt(12) para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation2) run.font.name = "Times New Roman" run.font.size = Pt(12) para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation3) run.font.name = "Times New Roman" run.font.size = Pt(12) para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(compensation4) run.font.name = "Times New Roman" run.font.size = Pt(12) # costs para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(costs) run.font.name = "Times New Roman" run.font.size = Pt(12) # deposit para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(deposit % (deposit_value, deposit_date, refundable_deposit_value, nonrefundable_deposit_value)) run.font.name = "Times New Roman" run.font.size = Pt(12) # provisions para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(provisions % jurisdiction) run.font.name = "Times New Roman" run.font.size = Pt(12) # effective date para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(effective_date) run.font.name = "Times New Roman" run.font.size = Pt(12) # foregoing para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(foregoing) run.font.name = "Times New Roman" run.font.size = Pt(12) # signatures para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.LEFT run = para.add_run(signatures) run.font.name = "Times New Roman" run.font.size = Pt(12) # save the doc doc.save(client + " Contract.docx") # update the status bar lb_status.config(text="Generated file " + client + " Contract.docx")
#生成报告 # 从文件中读取的开始试验时间和结束试验时间 start_time_string = format_datetime(datetimes[0], locale='zh_CN') end_time_string = format_datetime(datetimes[-1], locale='zh_CN') report = Document() title = report.add_paragraph() title.alignment = WD_ALIGN_PARAGRAPH.CENTER # 设定标题字体和内容 run = title.add_run() run.font.name = '宋体' run.font.size = Pt(12) r = run._element r.rPr.rFonts.set(qn('w:eastAsia'), '宋体') run.add_text('试验名称:XXX试验插入损耗变化量在线监测') # 生成表格 table = report.add_table(rows=4, cols=6) #设定单元格字体和内容 def set_cell_text(cell, text): p = cell.paragraphs[0] run = p.add_run() run.font.name = '宋体' run.font.size = Pt(10.5) r = run._element
#设置run字体 def set_font(run): run.font.name = '微软雅黑' run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑') return # 获取json文件数据 with open('ContractGenerator' + os.sep + 'contract_data.json', 'rb') as f: contract_data = json.load(f) # 设置正文全局字体 doc.styles['Normal'].font.name = '微软雅黑' doc.styles['Normal'].font.size = Pt(12) doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑') # 写合同号 doc._body.clear_content() contract_number = contract_data['contract_number'] contract_number_run = doc.add_paragraph(f'合同号:{contract_number}') contract_number_run.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.RIGHT # 写标题 doc.add_heading(level=0).add_run(contract_data['exhibition_title']) doc.add_heading(level=0).add_run('合作协议') # 写正文 doc.add_paragraph(f'甲方:{contract_data["party_a"]}') doc.add_paragraph(f'乙方:{contract_data["party_b"]}')
for filename in filenames: if filename[0] == '2': file_number += 1 filepath = in_dir + '/' + filename print(filepath) ID = filename.split('_') NAME = ID[-1].split('.d') my_doc.add_heading(u'分数:', 0) # my_doc.add_paragraph('分数:') my_doc.add_paragraph('姓名:' + NAME[0]) my_doc.add_paragraph('学号:' + ID[0]) my_doc.add_paragraph('\n') #遍历单个文件,读取行数 docx_file = docx.Document(filepath) docx_paragraphs = docx_file.paragraphs ps_detail = [(x.text, x.style.name) for x in docx_paragraphs] for line in ps_detail: my_doc.add_paragraph(line[0]) #f.write(line[0] + '\t' + line[1] + '\n\n') #f.write('\n') my_doc.add_page_break() #关闭文件 print('contact files finished.') print('一共提交作业:', file_number) #f.close() chg_font(my_doc.styles['Normal'], fontname='宋体', size=Pt(11)) my_doc.save(out_contact_file)
def __init__(self, config=None, doc=None, frog_data_folder=None, export_tabs=None, bulk_exports=None): try: if config is None: raise Exception("Config is None") if doc is None: raise Exception("Doc is None") if frog_data_folder is None: raise Exception("frog_data_folder is None") if export_tabs is None: raise Exception("Export_tabs is None") if bulk_exports is None: raise Exception("Bulk exports is None") export_tabs = [ i for i in export_tabs['export_tabs'] if not (i['active'] == 0) ] bulk_exports = [ i for i in bulk_exports['bulk_exports'] if not (i['active'] == 0) ] crawl_files = export_tabs + bulk_exports doc.add_heading('Crawl overzichten', 0) doc.add_paragraph( "Hier vind u alle informatie behorende bij het algemene overzicht. " "Deze informatie geeft u meer inzicht in wat u inhoudelijk aan uw " "pagina's dient te wijzigen om betere SEO resultaten te krijgen." ) for cf in crawl_files: doc.add_paragraph() file = os.path.join(frog_data_folder, cf['file']) c = ParceCSV(file) for key, val in c.ready_data.items(): if len(val['data']) == 0: continue if cf['id'] == "": doc.add_heading(key, 1) else: doc.add_heading(cf['id'], 1) try: doc.add_paragraph(cf['description']) except Exception: pass try: kolommen = len(cf['columns']) except Exception as e: print(e) sys.exit() table = doc.add_table(rows=1, cols=kolommen, style="Grid Table 4 Accent 5") hdr_cells = table.rows[0].cells self.set_repeat_table_header(table.rows[0]) i = 0 for h in cf['columns']: cell = hdr_cells[i] paragraph = cell.paragraphs[0] runner = paragraph.add_run(h) runner.font.size = Pt(9) i += 1 for d in val['data']: row_cells = table.add_row().cells i = 0 for h in cf['columns']: cell = row_cells[i] paragraph = cell.paragraphs[0] runner = paragraph.add_run(str(d[h])) runner.font.size = Pt(9) i += 1 self.auto_cell(table) except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] logging.warning( str(e) + " | " + str(exc_type) + " | " + str(fname) + " | " + str(exc_tb.tb_lineno)) return None
import sys import random from docx import Document from docx.shared import Pt from docx.enum.style import WD_STYLE_TYPE document = Document('master.docx') obj_styles = document.styles obj_reportStyle = obj_styles.add_style('ReportStyle', WD_STYLE_TYPE.CHARACTER) obj_font = obj_reportStyle.font obj_font.size = Pt(10) obj_font.name = 'Calibri' obj_nameStyle = obj_styles.add_style('NameStyle', WD_STYLE_TYPE.CHARACTER) obj_name_font = obj_nameStyle.font obj_name_font.name = 'Calibri' if len(sys.argv) < 9: print("ERROR: Not enough information. Please provide First Name, Last Name, Gender - f for female, m for male," " RE, English, Phonics, Maths, Science" "- where 1 is bad, 2 is ok, 3 is good attainment or behaviour.") exit() firstName = sys.argv[1] lastName = sys.argv[2] fullName = firstName + " " + lastName gender = sys.argv[3] religStudy = int(sys.argv[4][0])
def cm(self, docx): paragraph = docx.add_paragraph() paragraph.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY paragraph.paragraph_format.space_after = Pt(0) paragraph.add_run(self.str_council_header + ' ') self.cm_answer(paragraph)