Project 'NCER-PD/scheduling-system' was moved to 'smasch/scheduling-system'. Please update any links and bookmarks that may still have the old path.
-
Carlos Vega authored
this changes prevents trying to replace placeholders not used in the file. However, if a field value is None it will still fail. We need to discuss the approach to follow if a required field is none, should it be replaced by the text None or how can we propagate an error to the frontend?
Carlos Vega authoredthis changes prevents trying to replace placeholders not used in the file. However, if a field value is None it will still fail. We need to discuss the approach to follow if a required field is none, should it be replaced by the text None or how can we propagate an error to the frontend?
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
docx_helper.py 1.93 KiB
import logging
from docx import Document
logger = logging.getLogger(__name__)
def process_file(path_to_docx, path_to_new_docx, changes_to_apply):
"""
Tries to open the docx document using given path to file.
Then, applies the transformations- replaces template tags
in format of ##name## to values specified in the second
argument.
"""
doc = Document(path_to_docx)
for placeholder, replacement in list(changes_to_apply.items()):
for paragraph in doc.paragraphs:
if placeholder in paragraph.text:
paragraph.text = paragraph.text.replace(placeholder, replacement)
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
if placeholder in paragraph.text:
paragraph.text = paragraph.text.replace(placeholder, replacement)
doc.save(path_to_new_docx)
def merge_files(files, path_to_new_docx):
"""
When combining templates into a new Document object, python-docx does not properly copy the information of the
images, then Word is not able to locate the original content referred by the XML tag in the document. To fix this
problem (see #234 ) the first file is loaded and the rest of templates are concatenated to this. This way, the
original image content and rId match and the images are shown adequately.
See issue #235
"""
first_file = files[0]
files = files[1:]
merged_document = Document(first_file) # first file
if len(files) > 0:
merged_document.add_page_break()
for index, file in enumerate(files): # rest of files if any
sub_doc = Document(file)
if index < len(files) - 1:
sub_doc.add_page_break()
for element in sub_doc.element.body:
merged_document.element.body.append(element)
merged_document.save(path_to_new_docx)