import pathlib from copy import deepcopy from docx import Document from docx.shared import Cm from module.schema import Course, Student class DocPaper: def __init__(self, filename: str = 'Paper', template_path: str = '../template/template.docx'): self._doc = Document() self._template = Document(template_path) self._filename = filename section = self._doc.sections[0] section.top_margin = Cm(2) section.bottom_margin = Cm(2) section.left_margin = Cm(2) section.right_margin = Cm(2) def add_paper(self, course: Course, student: Student): temp_table = self._template.tables[0] new_table = deepcopy(temp_table) para = self._doc.add_paragraph() para._p.addprevious(new_table._element) data_list = { '%CNAME%': course.name, '%CLASS%': student.class_name, '%SNAME%': student.name, '%NO%': student.no, '%SO%': student.so, '%Q1%': student.picked_questions[0].topic, '%Q2%': student.picked_questions[1].topic, '%Q3%': student.picked_questions[2].topic } # 替换表格中的占位符 for row in new_table.rows: for cell in row.cells: for para in cell.paragraphs: for run in para.runs: for key, val in data_list.items(): if key in run.text: run.text = run.text.replace(key, val) break def save(self, path: str = './'): self._doc.save(str(pathlib.Path(path) / f"{self._filename}.docx")) if __name__ == '__main__': ...