Ver código fonte

Merge branch 'dev0410' of https://git.oschina.net/songyue123456/comm-ques-bank.git into dev0410

weiwenhai 7 anos atrás
pai
commit
d88b1b7194

+ 56 - 61
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -697,11 +697,13 @@ public final class DocxProcessUtil {
         out.flush();
         IOUtils.closeQuietly(out);
     }
-    
+
     /**
      * 导出wordnew
-     * @param dataMap
-     * @param fileName
+     * @param dataModel
+     * @param outFile
+     * @param template
+     * @throws Exception
      */
     public static void exportWordNew(Object dataModel, File outFile,Template template)throws Exception {
     	Writer out = null;
@@ -984,67 +986,60 @@ public final class DocxProcessUtil {
             return -1;
         }
     }
-    
-    public static byte[] getWordBytesByQuestion(WordprocessingMLPackage wordMLPackage,List<String> wordXmls) throws Exception{
-    	try {
-			RelationshipsPart mainRelationshipsPart = wordMLPackage.getMainDocumentPart().getRelationshipsPart();
-	        // 获取总的资源文件存储
-	        ZipPartStore partStore = (ZipPartStore) wordMLPackage.getSourcePartStore();
-	        //创建子Word
-        	WordprocessingMLPackage subWordPackage = WordprocessingMLPackage.createPackage();
-        	MainDocumentPart subMainDocumentPart = subWordPackage.getMainDocumentPart();
-        	//向子Word中添加内容
-        	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);
+
+    public static byte[] getWordBytesByQuestion(WordprocessingMLPackage wordMLPackage, List<String> wordXmls) throws Exception {
+        RelationshipsPart mainRelationshipsPart = wordMLPackage.getMainDocumentPart().getRelationshipsPart();
+        // 获取总的资源文件存储
+        ZipPartStore partStore = (ZipPartStore) wordMLPackage.getSourcePartStore();
+        //创建子Word
+        WordprocessingMLPackage subWordPackage = WordprocessingMLPackage.createPackage();
+        MainDocumentPart subMainDocumentPart = subWordPackage.getMainDocumentPart();
+        //向子Word中添加内容
+        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();
+        List<Relationship> subRelationships = subRelationshipsPart.getRelationshipsByType(Namespaces.IMAGE);
+        List<Object> blips = subMainDocumentPart.getJAXBNodesViaXPath("//a:blip", false);
+        for (Object blip : blips) {
+            if (blip.getClass().equals(CTBlip.class)) {
+                CTBlip cTBlip = (CTBlip) blip;
+                Relationship relationship = mainRelationshipsPart.getRelationshipByID(cTBlip.getEmbed());
+                if (relationship != null) {
+                    subRelationships.add(relationship);
                 }
-        	}
-        	//向子Word中添加图片的关联关系
-        	RelationshipsPart subRelationshipsPart = subMainDocumentPart.getRelationshipsPart();
-        	List<Relationship> subRelationships = subRelationshipsPart.getRelationshipsByType(Namespaces.IMAGE);
-        	List<Object> blips = subMainDocumentPart.getJAXBNodesViaXPath("//a:blip",false);
-        	for(Object blip:blips){
-        		if (blip.getClass().equals(CTBlip.class)) {
-	        		CTBlip cTBlip = (CTBlip)blip;
-	        		Relationship relationship = mainRelationshipsPart.getRelationshipByID(cTBlip.getEmbed());
-	        		if(relationship!=null){
-	        			subRelationships.add(relationship);
-	        		}
-        		}
-        	}
-        	//向子Word中添加资源
-        	List<Part> parts = new ArrayList<Part>();
-            for (Relationship relationship : subRelationships) {
-            	if(mainRelationshipsPart.getPart(relationship)!=null){
-            		parts.add(mainRelationshipsPart.getPart(relationship));
-            	}
             }
-            for (Part p : parts) {
-            	if(p.getSourceRelationships()!=null&&
-            			p.getSourceRelationships().size()>0){
-            		String relId = p.getSourceRelationships().get(0).getId();
-                    if(mainRelationshipsPart.isRelIdOccupied(relId)){
-                    	DocxProcessUtil.copyImage(subWordPackage,partStore,p,relId);
-                    }
-            	}
+        }
+        //向子Word中添加资源
+        List<Part> parts = new ArrayList<Part>();
+        for (Relationship relationship : subRelationships) {
+            if (mainRelationshipsPart.getPart(relationship) != null) {
+                parts.add(mainRelationshipsPart.getPart(relationship));
             }
-            subWordPackage = DocxProcessUtil.getTmpPackage(subWordPackage);
-            return DocxProcessUtil.getPkgByte(subWordPackage);
-		} catch (Docx4JException e) {
-			e.printStackTrace();
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
+        }
+        for (Part p : parts) {
+            if (p.getSourceRelationships() != null &&
+                    p.getSourceRelationships().size() > 0) {
+                String relId = p.getSourceRelationships().get(0).getId();
+                if (mainRelationshipsPart.isRelIdOccupied(relId)) {
+                    DocxProcessUtil.copyImage(subWordPackage, partStore, p, relId);
+                }
+            }
+        }
+        initTmpPackage(subWordPackage);
+        byte[] writeByte = getPkgByte(subWordPackage);
+        subWordPackage = null;
+        wordXmls.clear();
+        wordXmls = null;
+        return writeByte;
     }
 
     public static int getOptionNum(String wordText){

+ 1 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -199,9 +199,7 @@ public class ImportPaperService {
         DocxProcessUtil.initPkgImage(wordMLPackage);
         // 深拷贝临时pkg与最终写入数据库pkg
         tmpWordMlPackage = DocxProcessUtil.getTmpPackage(wordMLPackage);
-        /*writePkg = DocxProcessUtil.getTmpPackage(wordMLPackage);
-        byte[] writeByte = DocxProcessUtil.getPkgByte(writePkg);*/
-        
+
         // 获取word文档中所有段落
         List<Object> pList = DocxProcessUtil.getAllElementFromObject(wordMLPackage.getMainDocumentPart(), P.class);
         // 设置试卷
@@ -302,8 +300,6 @@ public class ImportPaperService {
         clearPaper(paper, paperDetails, paperDetailUnits, questions);
         wordMLPackage = null;
         tmpWordMlPackage = null;
-        /*writePkg = null;
-        writeByte = null;*/
         FileUtils.deleteQuietly(file);
         return paper;
     }