Esempio n. 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)
Esempio n. 2
0
 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))
Esempio n. 3
0
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)
Esempio n. 4
0
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
Esempio n. 5
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
    # 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:''',
Esempio n. 7
0
 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))
Esempio n. 8
0
    <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(
Esempio n. 11
0
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
Esempio n. 14
0
 def depart_list_item(self, node):
     dprint()
     text = ''.join(self.states.pop())
     self.docbody.append(
             docx.paragraph(text, self.list_style[-1], breakbefore=True))
Esempio n. 15
0
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'))
    
    
Esempio n. 17
0
 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))
Esempio n. 18
-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)