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 testunsupportedpagebreak(): """Ensure unsupported page break types are trapped""" document = newdocument() docbody = document.xpath('/w:document/w:body', namespaces=nsprefixes)[0] try: docbody.append(pagebreak(type='unsup')) except ValueError: return # passed assert False # failed
def testunsupportedpagebreak(): """Ensure unsupported page break types are trapped""" document = newdocument() docbody = document.xpath("/w:document/w:body", namespaces=nsprefixes)[0] try: docbody.append(pagebreak(type="unsup")) except ValueError: return # passed assert False # failed
def visit_start_of_file(self, node): dprint() self.new_state() # FIXME: visit_start_of_file not close previous section. # sectionlevel keep previous and new file's heading level start with # previous + 1. # This quick hack reset sectionlevel per file. # (BTW Sphinx has heading levels per file? or entire document?) self.sectionlevel = 0 self.docbody.append(docx.pagebreak(type='page', orient='portrait'))
def __init__(self, filename, title='', subject='', creator='', keywords=[], page_margins={ 'top': 2, 'bottom': 2, 'left': 3, 'right': 2 }): self.template_dir = os.path.join( os.path.dirname(filename), "docx_template_" + os.path.splitext(os.path.basename(filename))[0]) if os.path.isdir(self.template_dir): shutil.rmtree(self.template_dir) shutil.copytree( os.path.join(os.path.dirname(__file__.replace("library.zip", '')), 'docx-template_clean'), self.template_dir) docx.template_dir = self.template_dir self.filename = filename self.title = title self.subject = subject self.creator = creator self.keywords = keywords # Default set of relationshipships - the minimum components of a document self.relationships = docx.relationshiplist() self.imagefiledict = {} # Make a new document tree - this is the main part of a Word document self.document = docx.newdocument(page_margins=page_margins) # This xpath location is where most interesting content lives self.body = self.document.xpath('/w:document/w:body', namespaces=docx.nsprefixes)[0] self.h = self.h1 = self.append_heading self.h2 = lambda s: self.append_heading(s, 2) self.h3 = lambda s: self.append_heading(s, 3) self.p = self.append_paragraph self.n = lambda s: self.append_paragraph([(s, 'ns')]) self.i = lambda s: self.append_paragraph([(s, 'i')]) self.b = lambda s: self.append_paragraph([(s, 'b')]) self.new_page = lambda: self.body.append(pagebreak()) self.table = docx.table self.paragraph = docx.paragraph self.caption = docx.caption self.heading = docx.heading
def __init__(self, filename, title='', subject='', creator='', keywords=[], page_margins={'top':2, 'bottom':2, 'left':3, 'right':2}): self.template_dir = os.path.join(os.path.dirname(filename), "docx_template_" + os.path.splitext(os.path.basename(filename))[0]) if os.path.isdir(self.template_dir): shutil.rmtree(self.template_dir) shutil.copytree(os.path.join(os.path.dirname(__file__.replace("library.zip", '')), 'docx-template_clean'), self.template_dir) docx.template_dir = self.template_dir self.filename = filename self.title = title self.subject = subject self.creator = creator self.keywords = keywords # Default set of relationshipships - the minimum components of a document self.relationships = docx.relationshiplist() self.imagefiledict = {} # Make a new document tree - this is the main part of a Word document self.document = docx.newdocument(page_margins=page_margins) # This xpath location is where most interesting content lives self.body = self.document.xpath('/w:document/w:body', namespaces=docx.nsprefixes)[0] self.h = self.h1 = self.append_heading self.h2 = lambda s : self.append_heading(s, 2) self.h3 = lambda s : self.append_heading(s, 3) self.p = self.append_paragraph self.n = lambda s : self.append_paragraph([(s, 'ns')]) self.i = lambda s : self.append_paragraph([(s, 'i')]) self.b = lambda s : self.append_paragraph([(s, 'b')]) self.new_page = lambda : self.body.append(pagebreak()) self.table = docx.table self.paragraph = docx.paragraph self.caption = docx.caption self.heading = docx.heading
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
else: print 'nope.' print 'Searching for something in a heading ...', if dx.search(docbody, '200 lines'): print 'found it!' else: print 'nope.' print 'Replacing ...', docbody = dx.replace(docbody, 'the awesomeness', 'the goshdarned awesomeness') print 'done.' # Add a pagebreak docbody.append(dx.pagebreak(type='page', orient='portrait')) docbody.append(dx.heading('Ideas? Questions? Want to contribute?', 2)) docbody.append(dx.paragraph('''Email <*****@*****.**>''')) # Create our properties, contenttypes, and other support files coreprops = dx.coreproperties( title='Python docx demo', subject='A practical example of making docx from Python', creator='Mike MacCana', keywords=['python', 'Office Open XML', 'Word']) appprops = dx.appproperties() my_contenttypes = dx.getContentTypes() my_websettings = dx.websettings() # Save our document
print 'found it!' else: print 'nope.' print 'Searching for something in a heading ...', if dx.search(docbody, '200 lines'): print 'found it!' else: print 'nope.' print 'Replacing ...', docbody = dx.replace(docbody,'the awesomeness','the goshdarned awesomeness') print 'done.' # Add a pagebreak docbody.append(dx.pagebreak(type='page', orient='portrait')) docbody.append(dx.heading('Ideas? Questions? Want to contribute?',2)) docbody.append(dx.paragraph('''Email <*****@*****.**>''')) # Create our properties, contenttypes, and other support files coreprops = dx.coreproperties( title='Python docx demo', subject='A practical example of making docx from Python', creator='Mike MacCana', keywords=['python','Office Open XML','Word']) appprops = dx.appproperties() my_contenttypes = dx.getContentTypes() my_websettings = dx.websettings() # Save our document
print 'Searching for something in a heading ...', if docx.search( docbody, '200 lines' ): print 'found it!' else: print 'nope.' print 'Replacing ...', docbody = docx.replace( docbody, 'the awesomeness', 'the goshdarned awesomeness' ) print 'done.' paratext = [ ( '\nBig blue text\n', {'bold': '', 'color': '0000FF', 'size': '18'} ), ( '\nBold text\n', {'bold': ''} ) ] docbody.append( docx.paragraph( paratext ) ) # Add a pagebreak docbody.append( docx.pagebreak( typeOfBreak = 'page', orient = 'portrait' ) ) docbody.append( docx.heading( 'Ideas? Questions? Want to contribute?', 2 ) ) docbody.append( docx.paragraph( '''Email <*****@*****.**>''' ) ) # Create our properties, contenttypes, and other support files coreprops = docx.coreproperties( title = 'Python docx demo', subject = 'A practical example of making docx from Python', creator = 'Mike MacCana', keywords = ['python', 'Office Open XML', 'Word'] ) appprops = docx.appproperties() contenttypes = docx.contenttypes() websettings = docx.websettings() wordrelationships = docx.wordrelationships( relationships ) # Save our document docx.savedocx( document, coreprops, appprops, contenttypes, websettings, wordrelationships, 'Welcome to the Python docx module.docx' )
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)