Files
JITToolBox/module/defense/doc.py
2025-05-31 16:36:34 +08:00

54 lines
1.7 KiB
Python

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__':
...