def simpledoc(noimagecopy=False): """Make a docx (document, relationships) for use in other docx tests""" relationships = relationshiplist() imagefiledict = {} document = newdocument() docbody = document.xpath('/w:document/w:body', namespaces=nsprefixes)[0] docbody.append(heading('Heading 1', 1)) docbody.append(heading('Heading 2', 2)) docbody.append(paragraph('Paragraph 1')) for point in ['List Item 1', 'List Item 2', 'List Item 3']: docbody.append(paragraph(point, style='ListNumber')) docbody.append(pagebreak(type='page')) docbody.append(paragraph('Paragraph 2')) docbody.append( table([['A1', 'A2', 'A3'], ['B1', 'B2', 'B3'], ['C1', 'C2', 'C3']])) docbody.append(pagebreak(type='section', orient='portrait')) if noimagecopy: relationships, picpara, imagefiledict = picture( relationships, IMAGE1_FILE, 'This is a test description', imagefiledict=imagefiledict) else: relationships, picpara = picture(relationships, IMAGE1_FILE, 'This is a test description') docbody.append(picpara) docbody.append(pagebreak(type='section', orient='landscape')) docbody.append(paragraph('Paragraph 3')) if noimagecopy: return (document, docbody, relationships, imagefiledict) else: return (document, docbody, relationships)
def append_paragraph(self, string, style='BodyText', breakbefore=False, jc='left', spacing={ 'before': 0, 'after': 6 }, font_size=12): self.body.append( docx.paragraph(string, style, breakbefore, jc, spacing, font_size))
def output_docx_glossary(glos, docxfilename): import docx # requires https://github.com/mikemaccana/python-docx items = glos.items() items.sort() relationships = docx.relationshiplist() document = docx.newdocument() docbody = document.xpath('/w:document/w:body', namespaces=docx.nsprefixes)[0] docbody.append(docx.heading("ONTORULE glossary", 1)) for k,v in items: docbody.append(docx.heading(k, 2)) docbody.append(docx.paragraph(to_docx(v))) coreprops = docx.coreproperties(title='ONTORULE glossary', subject="", creator='ONTORULE', keywords=[]) appprops = docx.appproperties() contenttypes = docx.contenttypes() websettings = docx.websettings() wordrelationships = docx.wordrelationships(relationships) docx.savedocx(document,coreprops,appprops,contenttypes,websettings,wordrelationships, docxfilename)
def generate_docx_resume(): relationships = docx.relationshiplist() document = docx.newdocument() body = document.xpath('/w:document/w:body', namespaces=docx.nsprefixes)[0] data = resume_dict() body.append(docx.heading('Resume of', 3)) body.append(docx.heading(data['resume'].name, 1)) body.append(docx.heading(data['resume'].email, 2)) body.append(docx.heading(data['resume'].url, 2)) body.append(docx.heading('PROFILE SUMMARY', 2)) for entry in data['profile_entries']: body.append(docx.paragraph(entry.entry, style='ListBullet')) body.append(docx.heading('LINKS', 2)) for link in data['important_links']: body.append(docx.paragraph('%s - %s' % ( link.description, link.url, ), style='ListBullet')) body.append(docx.heading('EXPERTISE', 2)) for entry in data['expertise_entries']: body.append(docx.paragraph(entry.entry, style='ListBullet')) # experience ret += 'EXPERIENCE'.ljust(text_width, '.') + '\n' ret += '\n' for entry in data['work_history_entries']: ret += ' ' + entry.client_name.upper() + '\n' ret += ' ' + entry.location + '\n' ret += ' ' + entry.timespan + '\n' ret += ' ' + entry.title + '\n' ret += '\n' for achievement in entry.workachievement_set.all(): wrapped = textwrap.fill( achievement.description, text_width-6, subsequent_indent=' ', ) ret += ' ' + wrapped + '\n' ret += '\n' ret += '\n\n' # contributions ret += 'COMMUNITY CONTRIBUTIONS'.ljust(text_width, '.') + '\n' ret += '\n' for project in data['projects']: ret += ' ' + project.name.upper() + '\n' wrapped = textwrap.fill( strip_tags(project.short_description), text_width-3, subsequent_indent=' ', ) ret += ' ' + wrapped + '\n' wrapped = textwrap.fill( strip_tags(project.long_description), text_width-3, subsequent_indent=' ', ) ret += ' ' + wrapped + '\n\n' if project.deployment_url: ret += ' Project Page: %s\n' % project.deployment_url ret += ' Source Code: %s\n' % project.src_url ret += '\n\n' tag_line_top = "This is my plain text resume generator" tag_line_middle = "Outputting at %s columns" % text_width tag_line_bottom = "http://github.com/ben174/bugben" ret += '-' * text_width + '\n' ret += tag_line_top.center(text_width) + '\n' ret += tag_line_middle.center(text_width) + '\n' ret += tag_line_bottom.center(text_width) + '\n' ret += '-' * text_width + '\n' # Create our properties, contenttypes, and other support files title = 'Resume of %s' % data['resume'].name subject = 'My awesome resume!' creator = data['resume'].name keywords = [] coreprops = docx.coreproperties( title=title, subject=subject, creator=creator, keywords=keywords, ) appprops = docx.appproperties() contenttypes = docx.contenttypes() websettings = docx.websettings() wordrelationships = docx.wordrelationships(relationships) data = None with tempfile.NamedTemporaryFile() as temp: docx.savedocx( document, coreprops, appprops, contenttypes, websettings, wordrelationships, temp.name ) data = open(temp.name).read() return data
def get_document_docx(filename, doc_id, start_index=1): """filename is a file like object (like an HttpResponse)""" doc = get_doc_copy_with_references(doc_id, start_index=1) H1 = partial(docx.heading,headinglevel=1) H2 = partial(docx.heading,headinglevel=2) N = partial(docx.paragraph,style='') ### Followed the example of the author of the library relationships = docx.relationshiplist() document = docx.newdocument() docbody = document.xpath('/w:document/w:body', namespaces=docx.nsprefixes)[0] docbody.append(docx.paragraph([('CERN - European Organisation for Nuclear Research','b')],jc='center')) docbody.append(docx.paragraph([('1211 Geneva 23, Switzerland', 'b')],jc='center')) ### Unable to center the table, commending it for no # docbody.append(docx.table( # [[docx.paragraph([('Invitation to tender %s' % doc_id,'b')],jc='center')]], # heading=False, # borders={'all':{'color':'auto', 'size':'1', 'val':'single'}}, # # )) story = docbody story.append(N('')) story.append(N('')) story.append(docx.paragraph([('Invitation to tender %s' % doc_id,'bu')],jc='center')) story.append(N('')) story.append(docx.paragraph([('Technical Specifications','bi')],jc='center')) story.append(N('')) if doc.get('intro', None): story.append(H1(doc['intro_header'] or 'Scope of the invitaion to Tender')) story.append(N(doc['intro'])) for sys in range(len(doc.get('systems',[]))): system = doc['systems'][sys] bt = "%d" % (start_index + sys) story.append(N('\n\n')) story.append(H1('%s. %s' % (bt, system['name']))) if system['description']: story.append(N(system['description'])) for sec in range(len(system.get('sections',[]))): section=system['sections'][sec] bt = '%d.%d' % (start_index + sys, sec+1) story.append( H2('%s. %s' % (bt, section['header'])) ) if section['description']: story.append(N(section['description'])) for q in range(len(section.get('questions',[]))): question = section['questions'][q] bt = "%d.%d.%d" % (start_index + sys, sec+1, q+1) story.append(N('\t%s. %s' % (bt, question['tech_spec']))) if doc.get('contacts', None): contacts_per_row=3 _cs = copy.deepcopy(doc.get('contacts',[])) table_data = [] # let's pad the table while len(_cs) % contacts_per_row != 0: _cs.append(dict({u'type_':'', u'name':'', u'address':'',u'tel':'',u'fax':'', u'email':''})) stack = [] for ci in range(len(_cs)): stack.append(_cs[ci]) if len(stack) == contacts_per_row: table_data.append([ u''] + [c['type_']+':' if c['type_'] else '' for c in stack]) table_data.append([u'Name'] + [c['name'] for c in stack]) table_data.append([u'Address'] + [c['address'].replace('\r','') for c in stack]) table_data.append([u'Tel'] + [c['tel'] for c in stack]) table_data.append([u'Fax'] + [c['fax'] for c in stack]) table_data.append([u'E-mail'] + [c['email'] for c in stack]) table_data.append([u'']*(contacts_per_row+1)) stack=[] story.append(docx.pagebreak()) story.append(H1('Contacts')) story.append(docx.table(table_data, heading=False)) # Create our properties, contenttypes, and other support files coreprops = docx.coreproperties(title='Invitation to tender %s' % doc_id,subject='IT %s Technical Specifications',creator='Elisiano Petrini',keywords=['tender','Office Open XML','Word','%s' % doc_id]) appprops = docx.appproperties() contenttypes = docx.contenttypes() websettings = docx.websettings() wordrelationships = docx.wordrelationships(relationships) f = tempfile.NamedTemporaryFile(delete=False) docx.savedocx(document,coreprops,appprops,contenttypes,websettings,wordrelationships, f.name) f.close() with open(f.name, 'rb') as f: filename.write(f.read()) os.unlink(f.name) return document
# Default set of relationshipships - these are the minimum components of a document relationships = dx.getRelationships() # Make a new document tree - this is the main part of a Word document document = dx.newdocument() # This xpath location is where most interesting content lives docbody = document.xpath('/w:document/w:body', namespaces=dx.nsprefixes)[0] # Append two headings and a paragraph docbody.append(dx.heading('''Welcome to Python's docx module''', 1)) docbody.append( dx.heading('Make and edit docx in 200 lines of pure Python', 2)) docbody.append( dx.paragraph( 'The module was created when I was looking for a Python support for MS Word .doc files on PyPI and Stackoverflow. Unfortunately, the only solutions I could find used:' )) # Add a numbered list for point in [ '''COM automation''', '''.net or Java''', '''Automating OpenOffice or MS Office''' ]: docbody.append(dx.paragraph(point, style='ListNumber')) docbody.append( dx.paragraph( '''For those of us who prefer something simpler, I made docx.''')) docbody.append(dx.heading('Making documents', 2)) docbody.append( dx.paragraph('''The docx module has the following features:''',
def append_paragraph(self, string, style='BodyText', breakbefore=False, jc='left', spacing={'before':0, 'after':6}, font_size=12): self.body.append(docx.paragraph(string, style, breakbefore, jc, spacing, font_size))
<h1>PDF Demo</h1> <p>lala</p> <h2>h2</h2> </body> </html> """ result = StringIO.StringIO() pdf = pisa.CreatePDF(StringIO.StringIO(html), result) f = open('generated.pdf', 'w') f.write(result.getvalue()) import odf.opendocument import odf.text textdoc = odf.opendocument.OpenDocumentText() p = odf.text.P(text="Hello World!") textdoc.text.addElement(p) textdoc.save("generated", True) import docx document = docx.newdocument() docbody = document.xpath('/w:document/w:body', namespaces=docx.nsprefixes)[0] docbody.append(docx.heading('''Welcome to Python's docx module''',1) ) docbody.append(docx.heading('Make and edit docx in 200 lines of pure Python',2)) docbody.append(docx.paragraph('The module was created when I was looking for a Python support for MS Word .doc files')) coreprops = docx.coreproperties(title='Python docx demo',subject='A practical example of making docx from Python',creator='stas',keywords=['python','Office Open XML','Word']) appprops = docx.appproperties() contenttypes = docx.contenttypes() websettings = docx.websettings() wordrelationships = docx.wordrelationships(docx.relationshiplist()) docx.savedocx(document, coreprops, appprops, contenttypes, websettings, wordrelationships, 'generated.docx')
def makeref(doc_body, row): refid = None try: refid = int(row["ID"]) except ValueError: pass authors = None if row[authorskey] and row[authorskey] not in ["", " "]: authors = ", ".join([(", ".join([aa.strip() for aa in a.split(",")])) for a in row[authorskey].split(";")]) cit_a = ((authors + " " if authors else "") + ("(" + row[yrkey] + ")" if row[yrkey] else "") + ". " if authors else "") + (row[titlekey] + ". " if row[titlekey] else "") cit_ab = "" cit_b = (row[jfullkey] if row[jfullkey] and row[jfullkey] not in ["", " "] else "") if cit_b == "": sauthors = None if row[sauthorskey] and row[sauthorskey] not in ["", " "]: sauthors = ", ".join([ (", ".join([aa.strip() for aa in a.split(",")])) for a in row[sauthorskey].split(";") ]) cit_ab = ("In " + sauthors + " (Eds.)" if sauthors else "") cit_b = (row[stitlekey] if row[stitlekey] and row[stitlekey] not in ["", " "] else "") if cit_ab != "": cit_a += cit_ab + (", " if cit_b != "" else "") cit_c = (row[volumekey] if row[volumekey] and row[volumekey] not in ["", " "] else "") + ( (" " if row[volumekey] and row[volumekey] not in ["", " "] else "") + "(" + row[issuekey] + ")" if row[issuekey] and row[issuekey] not in ["", " "] else "") cit_c = (cit_c + ", " if cit_c != "" else "") + ( row[startpagekey] + ("-" + row[otherpagekey] if row[otherpagekey] and row[otherpagekey] not in ["", " "] else "") if row[startpagekey] and row[startpagekey] not in ["", " "] else "") cit_c = (cit_c + "." if cit_c != "" else "") cit_d = "" if not (row[jfullkey] and row[jfullkey] not in ["", " "]): cit_d = (row[placekey] if row[placekey] and row[placekey] not in ["", " "] else "") + ( ": " if row[placekey] and row[placekey] not in ["", " "] and row[publisherkey] and row[publisherkey] not in ["", " "] else "") + (row[publisherkey] if row[publisherkey] and row[publisherkey] not in ["", " "] else "") par_list = [(cit_a, '')] if cit_b != "": par_list.append((cit_b, 'i')) par_list.append((((", " if cit_b != "" or cit_ab != "" else "") + cit_c if cit_c != "" else "."), '')) if cit_d != "": par_list.append((" " + cit_d + ".", '')) p = docx.paragraph(par_list) # from https://github.com/python-openxml/python-docx/issues/74 if row[linkskey] and row[linkskey] != "": run = docx.makeelement('r') rPr = docx.makeelement('rPr') run.append(rPr) t = docx.makeelement('t', tagtext=" ") t.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') run.append(t) p.append(run) add_hyperlink(p, row[linkskey]) if row[pidkey] and row[pidkey] != "": run = docx.makeelement('r') rPr = docx.makeelement('rPr') run.append(rPr) t = docx.makeelement('t', tagtext=" ") t.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') run.append(t) p.append(run) add_hyperlink(p, doralinkprefix + row[pidkey]) run = docx.makeelement('r') rPr = docx.makeelement('rPr') run.append(rPr) t = docx.makeelement('t', tagtext=" ") t.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') run.append(t) p.append(run) add_hyperlink(p, (refworksreportlinkprefix if (refid and refid < 10000) else refworkslinkprefix) + row["ID"]) doc_body.append(p) return p
doc_body.append(p) return p doc = docx.newdocument() doc_body = None for el in doc.iter(): if el.tag == '{' + docx.nsprefixes['w'] + '}body': doc_body = el break doc_body.append(docx.heading(title + " (" + str(len(outvals)) + ")", 1)) doc_body.append( docx.paragraph([ "This report contains all publication types except for \"" + (excludegenres[0] if len(excludegenres) <= 1 else "\"; \"".join( [excludegenres[k] for k in range(len(excludegenres) - 1)]) + "\" and \"" + excludegenres[len(excludegenres) - 1]) + "\"" + (", as well as publications published before " + str(yearmin) if yearmin else "") + ".", '' ])) doc_body.append(docx.heading("Statistics", 2)) stats_table = [] stats_table.append([ "", "Articles" + u" \u2013 " + rkey, "Articles" + u" \u2013 " + nrkey, "Others", "TOTAL" ]) for key in orgunits: n_rarts = len(ouarticles[key][rkey] if key in ouarticles else []) n_nrarts = len(ouarticles[key][nrkey] if key in ouarticles else []) n_oths = len(ouothers[key] if key in ouothers else []) n_tot = n_rarts + n_nrarts + n_oths stats_table.append(
def testparagraph(): """Ensure paragraph creates p elements""" testpara = paragraph('paratext', style='BodyText') assert testpara.tag == ( '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p') pass
import docx if __name__ == '__main__': # Default set of relationshipships - these are the minimum components of a document relationships = docx.relationshiplist() # Make a new document tree - this is the main part of a Word document document = docx.newdocument() # This xpath location is where most interesting content lives docbody = document.xpath( '/w:document/w:body', namespaces = docx.nsprefixes )[0] # Append two headings and a paragraph docbody.append( docx.heading( '''Welcome to Python's docx module''', 1 ) ) docbody.append( docx.heading( 'Make and edit docx in 200 lines of pure Python', 2 ) ) docbody.append( docx.paragraph( 'The module was created when I was looking for a Python support for MS Word .doc files on PyPI and Stackoverflow. Unfortunately, the only solutions I could find used:' ) ) # Add a numbered list for point in ['''COM automation''', '''.net or Java''', '''Automating OpenOffice or MS Office''']: docbody.append( docx.paragraph( point, style = 'ListNumber' ) ) docbody.append( docx.paragraph( '''For those of us who prefer something simpler, I made docx.''' ) ) docbody.append( docx.heading( 'Making documents', 2 ) ) docbody.append( docx.paragraph( '''The docx module has the following features:''' ) ) # Add some bullets for point in ['Paragraphs', 'Bullets', 'Numbered lists', 'Multiple levels of headings', 'Tables', 'Document Properties']: docbody.append( docx.paragraph( point, style = 'ListBullet' ) ) docbody.append( docx.paragraph( 'Tables are just lists of lists, like this:' ) ) # Append a table
import docx as dx if __name__ == '__main__': # Default set of relationshipships - these are the minimum components of a document relationships = dx.getRelationships() # Make a new document tree - this is the main part of a Word document document = dx.newdocument() # This xpath location is where most interesting content lives docbody = document.xpath('/w:document/w:body', namespaces=dx.nsprefixes)[0] # Append two headings and a paragraph docbody.append(dx.heading('''Welcome to Python's docx module''',1) ) docbody.append(dx.heading('Make and edit docx in 200 lines of pure Python',2)) docbody.append(dx.paragraph('The module was created when I was looking for a Python support for MS Word .doc files on PyPI and Stackoverflow. Unfortunately, the only solutions I could find used:')) # Add a numbered list for point in ['''COM automation''','''.net or Java''','''Automating OpenOffice or MS Office''']: docbody.append(dx.paragraph(point,style='ListNumber')) docbody.append(dx.paragraph('''For those of us who prefer something simpler, I made docx.''')) docbody.append(dx.heading('Making documents',2)) docbody.append(dx.paragraph('''The docx module has the following features:''', font='Arial', fontsize=10)) # Add some bullets for point in ['Paragraphs','Bullets','Numbered lists','Multiple levels of headings','Tables','Document Properties']: docbody.append(dx.paragraph(point,style='ListBullet')) docbody.append(dx.paragraph('Tables are just lists of lists, like this:')) # Append a table
def depart_list_item(self, node): dprint() text = ''.join(self.states.pop()) self.docbody.append( docx.paragraph(text, self.list_style[-1], breakbefore=True))
def testparagraph(): """Ensure paragraph creates p elements""" testpara = paragraph("paratext", style="BodyText") assert testpara.tag == ("{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p") pass
# Create and insert basic table containing input info Table_Basic=[] for i in range(n+1): Table_Basic.append([]) for j in range(n+1): Table_Basic[i].append("") for i in range(1,n+1): Table_Basic[0][i] = "x"+str(i) Table_Basic[i][0] = "x"+str(i) for i in range(1,n+1): for j in range(1, n+1): Table_Basic[i][j]=str(A[i-1][j-1]) docbody.append(table(Table_Basic,False,borders={'all':{'color':'auto','space':1,'sz':1}})) docbody.append(heading(u'Решение:',2)) docbody.append(paragraph(u'Согласно отношениям смежности, изобразим граф:')) # Insert an image of graph relationships,picpara = picture(relationships,'graph.png','',200,200) docbody.append(picpara) docbody.append(heading(u'1. Количество вершин n = %i'%(n),2)) docbody.append(heading(u'2. Количество ребер r = %i'%(r),2)) f = 2-n+r docbody.append(heading(u'3. Количество граней f = %i'%(f),2)) docbody.append(paragraph('n-r+f = 2')) docbody.append(paragraph('f = 2-n+r = 2-6+11 = 7'))
def ensure_state(self): if self.states and self.states[-1]: result = self.states[-1] self.states[-1] = [] self.docbody.append( docx.paragraph(''.join(result), breakbefore=True))
def simpledoc(noimagecopy=False): """Make a docx (document, relationships) for use in other docx tests""" relationships = relationshiplist() imagefiledict = {} document = newdocument() docbody = document.xpath("/w:document/w:body", namespaces=nsprefixes)[0] docbody.append(heading("Heading 1", 1)) docbody.append(heading("Heading 2", 2)) docbody.append(paragraph("Paragraph 1")) for point in ["List Item 1", "List Item 2", "List Item 3"]: docbody.append(paragraph(point, style="ListNumber")) docbody.append(pagebreak(type="page")) docbody.append(paragraph("Paragraph 2")) docbody.append(table([["A1", "A2", "A3"], ["B1", "B2", "B3"], ["C1", "C2", "C3"]])) docbody.append(pagebreak(type="section", orient="portrait")) if noimagecopy: relationships, picpara, imagefiledict = picture( relationships, IMAGE1_FILE, "This is a test description", imagefiledict=imagefiledict ) else: relationships, picpara = picture(relationships, IMAGE1_FILE, "This is a test description") docbody.append(picpara) docbody.append(pagebreak(type="section", orient="landscape")) docbody.append(paragraph("Paragraph 3")) if noimagecopy: return (document, docbody, relationships, imagefiledict) else: return (document, docbody, relationships)