Parcourir la source

在导入Word 时,将每道题拆分成单个Word二进制数据存入question对象中

chenken il y a 7 ans
Parent
commit
e7821dbd34

+ 13 - 5
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -39,6 +39,8 @@ import org.docx4j.openpackaging.parts.relationships.Namespaces;
 import org.docx4j.openpackaging.parts.relationships.RelationshipsPart;
 import org.docx4j.relationships.Relationship;
 import org.docx4j.wml.*;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
 import org.dom4j.Namespace;
 import org.dom4j.io.SAXReader;
 import org.jsoup.Jsoup;
@@ -965,7 +967,7 @@ public final class DocxProcessUtil {
         }
     }
     
-    public static byte[] getWordBytesByQuestion(WordprocessingMLPackage wordMLPackage,List<String> wordxmls) throws Exception{
+    public static byte[] getWordBytesByQuestion(WordprocessingMLPackage wordMLPackage,List<String> wordXmls) throws Exception{
     	try {
 			RelationshipsPart mainRelationshipsPart = wordMLPackage.getMainDocumentPart().getRelationshipsPart();
 	        // 获取总的资源文件存储
@@ -974,9 +976,15 @@ public final class DocxProcessUtil {
         	WordprocessingMLPackage subWordPackage = WordprocessingMLPackage.createPackage();
         	MainDocumentPart subMainDocumentPart = subWordPackage.getMainDocumentPart();
         	//向子Word中添加内容
-        	for(String xml:wordxmls){
-        		Object obj = XmlUtils.unmarshalString(xml);
-                subMainDocumentPart.addObject(obj);
+        	for(String wordXml:wordXmls){
+        		wordXml = "<myElement>"+wordXml+"</myElement>";
+        		Document document = DocumentHelper.parseText(wordXml);    
+                org.dom4j.Element rootElement = document.getRootElement();
+                List<org.dom4j.Element> nodes = rootElement.elements();
+                for(org.dom4j.Element element:nodes){
+                	Object obj = XmlUtils.unmarshalString(element.asXML());
+                    subMainDocumentPart.addObject(obj);
+                }
         	}
         	//向子Word中添加图片的关联关系
         	RelationshipsPart subRelationshipsPart = subMainDocumentPart.getRelationshipsPart();
@@ -1007,7 +1015,7 @@ public final class DocxProcessUtil {
                     }
             	}
             }
-            
+            subWordPackage = DocxProcessUtil.getTmpPackage(subWordPackage);
             return DocxProcessUtil.getPkgByte(subWordPackage);
 		} catch (Docx4JException e) {
 			e.printStackTrace();

+ 8 - 7
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -190,7 +190,7 @@ public class ImportPaperService {
     public Paper processImportPaper(Paper paper,AccessUser user,File file) throws Exception {
         WordprocessingMLPackage wordMLPackage;
         WordprocessingMLPackage tmpWordMlPackage;
-        WordprocessingMLPackage writePkg;
+        //WordprocessingMLPackage writePkg;
         ImportPaperCheck importPaperCheck = new ImportPaperCheck();
 
         wordMLPackage = WordprocessingMLPackage.load(file);
@@ -198,8 +198,8 @@ public class ImportPaperService {
         DocxProcessUtil.initPkgImage(wordMLPackage);
         // 深拷贝临时pkg与最终写入数据库pkg
         tmpWordMlPackage = DocxProcessUtil.getTmpPackage(wordMLPackage);
-        writePkg = DocxProcessUtil.getTmpPackage(wordMLPackage);
-        byte[] writeByte = DocxProcessUtil.getPkgByte(writePkg);
+        /*writePkg = DocxProcessUtil.getTmpPackage(wordMLPackage);
+        byte[] writeByte = DocxProcessUtil.getPkgByte(writePkg);*/
         
         // 获取word文档中所有段落
         List<Object> pList = DocxProcessUtil.getAllElementFromObject(wordMLPackage.getMainDocumentPart(), P.class);
@@ -274,8 +274,8 @@ public class ImportPaperService {
                     processQuesTail(pList, importPaperCheck.index, subQuesNum, question, paperDetailUnit,importPaperCheck, tmpWordMlPackage, false);
                 }
                 // 设置WordMlPackage二进制数据
-                question.setQuesPkg(writeByte);
-                //question.setQuesPkg(getZipResource(writePkg,question));
+                //question.setQuesPkg(writeByte);
+                question.setQuesPkg(getZipResource(wordMLPackage,question));
                 // 设置question与Unit集合数据
                 question.setCourse(paper.getCourse());
                 question.setOrgId(user.getRootOrgId().toString());
@@ -301,8 +301,8 @@ public class ImportPaperService {
         clearPaper(paper, paperDetails, paperDetailUnits, questions);
         wordMLPackage = null;
         tmpWordMlPackage = null;
-        writePkg = null;
-        writeByte = null;
+        /*writePkg = null;
+        writeByte = null;*/
         FileUtils.deleteQuietly(file);
         return paper;
     }
@@ -328,6 +328,7 @@ public class ImportPaperService {
     			wordXmls.add(quesOption.getOptionBodyWord());
     		}
     	}
+    	wordXmls.add(question.getQuesAnswerWord());
     	return wordXmls;
     }