Example #1
0
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)
Example #2
0
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
Example #3
0
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
Example #4
0
    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'))
Example #5
0
    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
Example #6
0
    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
Example #7
0
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' )
Example #11
-1
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)