diff --git a/.autograde/generate_pdf_report.py b/.autograde/generate_pdf_report.py index 2938797..6ce6be8 100644 --- a/.autograde/generate_pdf_report.py +++ b/.autograde/generate_pdf_report.py @@ -1 +1,156 @@ -print("PDF generation skipped") +#!/usr/bin/env python3 +"""Generate PDF report from REPORT.md and FRONTEND.md""" + +import os +import sys +import argparse +import json + +def read_file_content(path): + if not path or not os.path.exists(path): + return "" + with open(path, 'r', encoding='utf-8') as f: + return f.read() + +def main(): + parser = argparse.ArgumentParser(description='Generate PDF grade report') + parser.add_argument('--report', default='REPORT.md', help='Path to REPORT.md') + parser.add_argument('--frontend', default='FRONTEND.md', help='Path to FRONTEND.md') + parser.add_argument('--grade', default='final_grade.json', help='Path to grade JSON') + parser.add_argument('--images', default='images', help='Path to images directory') + parser.add_argument('--out', default='grade_report.pdf', help='Output PDF path') + parser.add_argument('--student-id', default='', help='Student ID') + parser.add_argument('--student-name', default='', help='Student name') + parser.add_argument('--class-name', default='', help='Class name') + parser.add_argument('--commit-sha', default='', help='Commit SHA') + args = parser.parse_args() + + # Read grade data + grade_data = {} + if os.path.exists(args.grade): + with open(args.grade, 'r', encoding='utf-8') as f: + grade_data = json.load(f) + + # Read markdown content + report_content = read_file_content(args.report) + frontend_content = read_file_content(args.frontend) + + if not report_content and not frontend_content: + print("No report content found, skipping PDF generation") + return + + try: + import markdown + from weasyprint import HTML + + # Build HTML content + html_parts = [] + + # Header with student info + header = f""" +
学号: {args.student_id or 'N/A'}
+姓名: {args.student_name or 'N/A'}
+班级: {args.class_name or 'N/A'}
+Commit: {args.commit_sha[:7] if args.commit_sha else 'N/A'}
+| 项目 | 得分 |
|---|---|
| 编程测试 | {grade_data.get('programming', 0)}/60 |
| 报告 | {grade_data.get('report', 0)}/10 |
| 前端 | {grade_data.get('frontend', 0)}/10 |
| 总分 | {grade_data.get('total', 0)}/80 |