Skip to content

Commit 07566b5

Browse files
committed
add add_footer method
1 parent 34161ec commit 07566b5

File tree

1 file changed

+39
-4
lines changed

1 file changed

+39
-4
lines changed

docx/document.py

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from .oxml import OxmlElement
1212
from .oxml.header import CT_Hdr
13-
from .oxml.ns import qn
13+
from .oxml.ns import qn, nsmap
1414
from .opc.constants import RELATIONSHIP_TYPE as RT, CONTENT_TYPE as CT
1515
from .opc.packuri import PackURI
1616
from .opc.part import XmlPart
@@ -113,6 +113,13 @@ def add_header(self):
113113
self.remove_headers()
114114
return self._body.add_header()
115115

116+
def add_footer(self):
117+
"""
118+
removes all footers from doc then adds a new one
119+
"""
120+
self.remove_footers()
121+
return self._body.add_footer()
122+
116123
def remove_headers(self):
117124
"""
118125
clears existing header elements and references from document
@@ -245,15 +252,43 @@ def add_header(self):
245252
content_type = CT.WML_HEADER
246253
target = XmlPart(partname, content_type, header_elm, self._parent._part.package)
247254

248-
# TODO figure out nicer way to get this
249-
RELATIONSHIPS_SCHEMA = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'
250-
reltype = '%s/header' % RELATIONSHIPS_SCHEMA
255+
reltype = nsmap['r'] + '/header'
251256
self._parent.part.rels.add_relationship(reltype, target, rel_id)
252257

253258
sentinel_sectPr = self._body.get_or_add_sectPr()
254259
sentinel_sectPr.append(header_ref_elm)
255260
return header
256261

262+
def add_footer(self):
263+
rel_id = self._parent.part.rels._next_rId
264+
target = 'footer1.xml'
265+
266+
# make footer_ref_elm
267+
footer_ref_elm_tag = 'w:footerReference'
268+
footer_attrs = {
269+
qn('r:id'): rel_id,
270+
qn('w:type'): "default"
271+
}
272+
footer_ref_elm = OxmlElement(footer_ref_elm_tag, attrs=footer_attrs)
273+
274+
# make footer_elm
275+
footer_elm = CT_Hdr.new()
276+
277+
# make footer instance (wrapper around elm)
278+
footer = BlockItemContainer(footer_elm, self)
279+
280+
# make target part
281+
partname = PackURI('/word/footer1.xml')
282+
content_type = CT.WML_FOOTER
283+
target = XmlPart(partname, content_type, footer_elm, self._parent._part.package)
284+
285+
reltype = nsmap['r'] + '/footer'
286+
self._parent.part.rels.add_relationship(reltype, target, rel_id)
287+
288+
sentinel_sectPr = self._body.get_or_add_sectPr()
289+
sentinel_sectPr.append(footer_ref_elm)
290+
return footer
291+
257292
def remove_headers(self):
258293
"""
259294
clears existing header elements and references from sentinel sect pr

0 commit comments

Comments
 (0)