From fd73c62d85e0758ff3b3c37e1032eec104032d76 Mon Sep 17 00:00:00 2001 From: sit002 Date: Tue, 2 Dec 2025 13:55:29 +0800 Subject: [PATCH] feat: add student info and watermark to PDF report - Auto-fill student name/class from .student_info.json - Add anti-cheating watermark with student ID and unique hash - Pass commit SHA for watermark generation - Read student info from workflow environment --- .autograde/generate_pdf_report.py | 349 ++++++++++++++++++------------ .gitea/workflows/autograde.yml | 25 ++- 2 files changed, 240 insertions(+), 134 deletions(-) diff --git a/.autograde/generate_pdf_report.py b/.autograde/generate_pdf_report.py index e58ee3b..4b8ab97 100644 --- a/.autograde/generate_pdf_report.py +++ b/.autograde/generate_pdf_report.py @@ -7,9 +7,11 @@ - 后端开发反思报告 - 前端开发反思报告 - 评分详情页 +- 防伪水印 """ import argparse +import hashlib import json import os import re @@ -72,11 +74,23 @@ def markdown_to_html(md_content): return markdown.markdown(md_content, extensions=extensions) -def generate_cover_page(student_id, assignment_name="VibeVault 期末大作业"): +def generate_watermark_id(student_id, commit_sha): + """生成唯一的水印标识""" + raw = f"{student_id}-{commit_sha}-{datetime.now().isoformat()}" + return hashlib.sha256(raw.encode()).hexdigest()[:16].upper() + + +def generate_cover_page(student_id, student_name="", class_name="", + assignment_name="VibeVault 期末大作业"): """生成封面页 HTML""" current_date = datetime.now().strftime('%Y年%m月%d日') current_semester = "2025年秋季学期" + # 如果有学生姓名,直接显示;否则留空供手写 + name_value = student_name if student_name else ' ' * 8 + class_value = class_name if class_name else ' ' * 8 + id_value = student_id if student_id else ' ' * 8 + return f'''
@@ -93,15 +107,15 @@ def generate_cover_page(student_id, assignment_name="VibeVault 期末大作业") - + - + - + @@ -155,7 +169,7 @@ def generate_grade_page(final_grade): ''' # LLM 评分详情 - def format_llm_details(section_data, section_name): + def format_llm_details(section_data): criteria = section_data.get("criteria", []) if not criteria: return f'

无详细评分

' @@ -245,12 +259,12 @@ def generate_grade_page(final_grade):

后端反思报告评分

- {format_llm_details(report, 'report')} + {format_llm_details(report)}

前端反思报告评分

- {format_llm_details(frontend, 'frontend')} + {format_llm_details(frontend)}
学  号:{student_id or ' ' * 12}{id_value}
姓  名:{name_value}
班  级:{class_value}
提交日期: