I have two functions, one creates a paragraph with a bookmark in a document, and the other one puts text given a bookmark name.
def add_medidores_bookmarks(self, medidores_list):
#esta funcion se aplica para crear marcadores de todos los medidores, a los que posteriormente se accederán para insertar tablas y gráficos
for medidor in medidores_list:
pt = self.doc.add_paragraph()
bookmark_name = f'{medidor}_title'
# get the paragraph element
element = pt._p
# add bookmark start before the first subelement
start = docx.oxml.shared.OxmlElement('w:bookmarkStart')
start.set(docx.oxml.ns.qn('w:id'), '0')
start.set(docx.oxml.ns.qn('w:name'), bookmark_name)
element.insert(0,start)
# add bookmark end after the last subelement
end = docx.oxml.shared.OxmlElement('w:bookmarkEnd')
end.set(docx.oxml.ns.qn('w:id'), '0')
end.set(docx.oxml.ns.qn('w:name'), bookmark_name)
element.append(end)
pb = self.doc.add_paragraph()
pb.alignment = WD_ALIGN_PARAGRAPH.CENTER
bookmark_name = f'{medidor}_body'
# get the paragraph element
element = pb._p
# add bookmark start before the first subelement
start = docx.oxml.shared.OxmlElement('w:bookmarkStart')
start.set(docx.oxml.ns.qn('w:id'), '0')
start.set(docx.oxml.ns.qn('w:name'), bookmark_name)
element.insert(0,start)
# add bookmark end after the last subelement
end = docx.oxml.shared.OxmlElement('w:bookmarkEnd')
end.set(docx.oxml.ns.qn('w:id'), '0')
end.set(docx.oxml.ns.qn('w:name'), bookmark_name)
element.append(end)
pb.alignment = WD_ALIGN_PARAGRAPH.CENTER # not working
self._named_bookmarks = self._get_named_bookmarks()
I’m interested in centering the text of te second paragraph. Then this is the function that adds text given the bookmark:
def insert_text_after_bookmark(
self,
text: str,
bookmark_name: str,
font_name: str = "Arial",
font_size: Length or None = Pt(12),
style: set or None = None,
text_color: tuple or None = None,
throw_error: bool = False
) -> None:
bookmark = self.get_bookmark_by_name(bookmark_name, throw_error = throw_error) # returns a xml element
if bookmark is None:
print("Advertencia: no existe una marca de posición con el nombre especificado.")
else:
paragraph = self.doc.add_paragraph()
run = paragraph.add_run(text)
if font_size is not None:
run.font.size = font_size
if font_name is not None:
run.font.name = font_name
if text_color is not None:
run.font.color.rgb = RGBColor(text_color[0],text_color[1],text_color[2])
if style is not None:
style = set([st.lower() for st in style])
if style.intersection(self._allowed_bold_styles):
run.bold = True
if style.intersection(self._allowed_italic_styles):
run.italic = True
if style.intersection(self._allowed_underline_styles):
run.underline = True
bookmark.addnext(run._element)
I’m trying to center the text in the second paragraph that the first function creates, in which I’m going to add text later. Thanks