From 46f16c37f269b20fce0bc4b7980fbf3b7d39ec0d Mon Sep 17 00:00:00 2001 From: Hokori Date: Wed, 3 Jun 2026 15:05:11 +0800 Subject: [PATCH] Fix print rendering for drawing answers --- src/main/resources/templates/print.html | 29 +++++++- .../exam/templates/PrintTemplateTest.java | 67 +++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/baobaot/exam/templates/PrintTemplateTest.java diff --git a/src/main/resources/templates/print.html b/src/main/resources/templates/print.html index 4554f2b..06a11b1 100644 --- a/src/main/resources/templates/print.html +++ b/src/main/resources/templates/print.html @@ -170,6 +170,14 @@ .answer-content.wrong { color: #c00; } + .drawing-answer-image { + display: block; + max-width: 100%; + max-height: 360px; + margin-top: 6px; + border: 1px solid #ddd; + background: white; + } .score-get { color: #c00; font-weight: bold; @@ -252,7 +260,7 @@
第1题 - 选择题 + 选择题 5分
题目内容
@@ -309,6 +317,25 @@
+ + +
+
+ 答案: + 未作答 + + 画图题答案 + + +
+
+ 得分: + +
+
diff --git a/src/test/java/com/baobaot/exam/templates/PrintTemplateTest.java b/src/test/java/com/baobaot/exam/templates/PrintTemplateTest.java new file mode 100644 index 0000000..c5084a9 --- /dev/null +++ b/src/test/java/com/baobaot/exam/templates/PrintTemplateTest.java @@ -0,0 +1,67 @@ +package com.baobaot.exam.templates; + +import com.baobaot.exam.dto.CorrectDetailItem; +import com.baobaot.exam.dto.CorrectResult; +import org.junit.jupiter.api.Test; +import org.thymeleaf.spring6.SpringTemplateEngine; +import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.context.Context; +import org.springframework.context.support.GenericApplicationContext; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class PrintTemplateTest { + + private final TemplateEngine templateEngine = createTemplateEngine(); + + @Test + void rendersDrawingAnswerAsImageOnPrintPage() { + String imageData = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB"; + CorrectResult data = CorrectResult.builder() + .answerUid("answer-1") + .studentName("张三") + .examTitle("Java试卷") + .choiceScore(0) + .finalScore(0) + .isCorrected(true) + .questions(List.of(CorrectDetailItem.builder() + .exmaid(1) + .qid(100) + .type(3) + .title("画出流程图") + .score(10) + .userAnswer(imageData) + .autoScore(8) + .build())) + .build(); + + Context context = new Context(); + context.setVariable("data", data); + + String html = templateEngine.process("print", context); + + assertThat(html).contains("画图题"); + assertThat(html).contains("\n " + imageData); + } + + private static TemplateEngine createTemplateEngine() { + GenericApplicationContext applicationContext = new GenericApplicationContext(); + applicationContext.refresh(); + + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(applicationContext); + resolver.setPrefix("classpath:/templates/"); + resolver.setSuffix(".html"); + resolver.setTemplateMode("HTML"); + resolver.setCharacterEncoding("UTF-8"); + + SpringTemplateEngine engine = new SpringTemplateEngine(); + engine.setTemplateResolver(resolver); + return engine; + } +}