diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/wps_pptx/JudgementWpsPptxServiceImpl.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/wps_pptx/JudgementWpsPptxServiceImpl.java
index 33cbfd90..09f6c510 100644
--- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/wps_pptx/JudgementWpsPptxServiceImpl.java
+++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/wps_pptx/JudgementWpsPptxServiceImpl.java
@@ -99,7 +99,7 @@ public class JudgementWpsPptxServiceImpl implements JudgementWpsPptxService {
String[] pptxInfos = examQuestionAnswer.getContent().split("\\?");
String[] chineseName = examQuestionAnswer.getContentIn().split("-");
String[] typeList = examQuestionAnswer.getImage().split("-");
- pptxInfoPointsVo.setName("判分");
+ pptxInfoPointsVo.setName(examQuestionAnswer.getContentIn());
pptxInfoPointsVo.setEnglishName(pptxInfos[0]);
pptxInfoPointsVo.setFunction(pptxInfos[1]);
pptxInfoPointsVo.setType(typeList[0]);
diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/utils/wps_pptx/SlideAnimationQueryByCursor.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/utils/wps_pptx/SlideAnimationQueryByCursor.java
new file mode 100644
index 00000000..0b86bba6
--- /dev/null
+++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/utils/wps_pptx/SlideAnimationQueryByCursor.java
@@ -0,0 +1,74 @@
+package pc.exam.pp.module.judgement.utils.wps_pptx;
+
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+
+
+public class SlideAnimationQueryByCursor {
+
+ public static String getAnimationInfoForSpid(XmlCursor cursor, String spid, String infoType) {
+ cursor.toStartDoc();
+ cursor.selectPath("declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' " +
+ "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' " +
+ "declare namespace r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' " +
+ "$this//p: ");
+
+ while (cursor.toNextSelection()) {
+ XmlObject spTgtObj = cursor.getObject();
+ XmlCursor spTgtCursor = spTgtObj.newCursor();
+ String spidAttr = spTgtCursor.getAttributeText(new javax.xml.namespace.QName("", "spid"));
+ if (!spid.equals(spidAttr)) continue;
+
+ // 当前 spTgt 的祖先就是动画节点(通常为 anim, set, 或 cTn)
+ XmlCursor animCursor = spTgtObj.newCursor();
+ animCursor.toParent(); // tgtEl
+ animCursor.toParent(); // anim, set, etc.
+
+ String tag = animCursor.getName().getLocalPart();
+ String dur = animCursor.getAttributeText(new javax.xml.namespace.QName("", "dur"));
+ String presetClass = animCursor.getAttributeText(new javax.xml.namespace.QName("", "presetClass"));
+
+ switch (infoType) {
+ case "效果":
+ return (presetClass != null && !presetClass.isEmpty()) ? presetClass : tag;
+
+ case "方向":
+ // 查找
+ cursor.toStartDoc();
+ cursor.selectPath("declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' " +
+ "$this//p:pull");
+ while (cursor.toNextSelection()) {
+ String dir = cursor.getAttributeText(new javax.xml.namespace.QName("", "dir"));
+ if (dir != null) return dir;
+ }
+ return "无方向设置";
+
+ case "触发方式":
+ animCursor.selectPath("declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' " +
+ "$this/p:stCondLst/p:cond");
+ while (animCursor.toNextSelection()) {
+ String evt = animCursor.getAttributeText(new javax.xml.namespace.QName("", "evt"));
+ String delay = animCursor.getAttributeText(new javax.xml.namespace.QName("", "delay"));
+ if (evt != null) return evt;
+ if (delay != null) return "延迟:" + delay;
+ }
+ return "无触发信息";
+
+ case "持续时间":
+ if (dur != null) return dur + " ms";
+ // 也许 有 dur
+ animCursor.selectPath("declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' " +
+ "$this//p:cTn");
+ while (animCursor.toNextSelection()) {
+ String d = animCursor.getAttributeText(new javax.xml.namespace.QName("", "dur"));
+ if (d != null) return d + " ms";
+ }
+ return "无持续时间信息";
+
+ default:
+ return "不支持的查询类型:" + infoType;
+ }
+ }
+ return "未找到 spid=" + spid + " 的动画";
+ }
+}
\ No newline at end of file
diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/utils/wps_pptx/WpsPptxUtils.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/utils/wps_pptx/WpsPptxUtils.java
index 0a1dc13a..d5c20ed6 100644
--- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/utils/wps_pptx/WpsPptxUtils.java
+++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/utils/wps_pptx/WpsPptxUtils.java
@@ -1,7 +1,12 @@
package pc.exam.pp.module.judgement.utils.wps_pptx;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
@@ -23,6 +28,8 @@ import javax.xml.namespace.QName;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -41,40 +48,43 @@ public class WpsPptxUtils {
List pptxSlidesOrgVos = new ArrayList<>();
// 获取所有相关res得记录
List