Ver código fonte

解决段落删除追加问题,需要模板配合

wuhonghao 4 anos atrás
pai
commit
0d96e44811

+ 8 - 3
railway-admin/src/main/java/com/railway/web/controller/business/catenary/BusJcbFdfxjyqController.java

@@ -7,6 +7,7 @@ import com.railway.common.utils.poi.WordUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -44,6 +45,9 @@ public class BusJcbFdfxjyqController extends BaseController {
     @Autowired
     private IBusJcbFdfxjyqService busJcbFdfxjyqService;
 
+    @Value("${file.path}")
+    public String filePath;
+
     @ApiOperation(value = "新增")
     @PostMapping("/add")
     public AjaxResult add(@Validated @RequestBody BusJcbFdfxjyq busJcbFdfxjyq) {
@@ -118,11 +122,12 @@ public class BusJcbFdfxjyqController extends BaseController {
         params.put("${qj}", "测试区间");
         params.put("${wd}", "85");
         try{
+
             Map<String,Object> header = new HashMap<String, Object>();
-            header.put("width", 400);
-            header.put("height", 100);
+            header.put("width", 450);
+            header.put("height", 110);
             header.put("type", "jpg");
-            header.put("content", WordUtils.inputStream2ByteArray(new FileInputStream("D:/fdjyq-20211016.png"), true));
+            header.put("content", WordUtils.inputStream2ByteArray(new FileInputStream(filePath+"/fdjyq-20211016.png"), true));
             params.put("${header}",header);
             //InputStream inputStream = this.getClass().getResourceAsStream("/word/template/DXF分段绝缘器手册.docx");
             InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("word/template/DXF分段绝缘器手册.docx");

BIN
railway-business/src/main/resources/word/template/DXF分段绝缘器手册.docx


+ 4 - 2
railway-common/src/main/java/com/railway/common/utils/poi/CustomXWPFDocument.java

@@ -2,6 +2,7 @@ package com.railway.common.utils.poi;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFRun;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlToken;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
@@ -38,12 +39,13 @@ public class CustomXWPFDocument extends XWPFDocument {
      * @param height 高
      * @param paragraph  段落
      */
-    public void createPicture(String blipId,int id, int width, int height,XWPFParagraph paragraph) throws Exception {
+    public void createPicture(XWPFRun run, String blipId, int id, int width, int height, XWPFParagraph paragraph) throws Exception {
         final int EMU = 9525;
         width *= EMU;
         height *= EMU;
+        //在docment下创建XWPFRun 图片会被添加到文档末尾
         //String blipId = getAllPictures().get(id).getPackagePart().getRelationships().getRelationship(id).getId();
-        CTInline inline = paragraph.createRun().getCTR().addNewDrawing().addNewInline();
+        CTInline inline = run.getCTR().addNewDrawing().addNewInline();
         String picXml = ""
                 +"<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"
                 +"   <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"

+ 14 - 4
railway-common/src/main/java/com/railway/common/utils/poi/WordUtils.java

@@ -84,7 +84,7 @@ public class WordUtils {
             }
 
             for (int i = start; i <= end; i++) {
-                para.removeRun(i);
+                //para.removeRun(i);
                 i--;
                 end--;
             }
@@ -95,7 +95,13 @@ public class WordUtils {
                     Object value = entry.getValue();
                     if (value instanceof String) {
                         str = str.replace(key, value.toString());
-                        para.createRun().setText(str, 0);
+                        for (int i = 0; i < runs.size(); i++) {
+                            XWPFRun run = runs.get(i);
+                            if(run.getText(0).equals(key)){
+                                run.setText(str, 0);
+                            }
+                        }
+                        //para.createRun().setText(str, 0);
                         break;
                     } else if (value instanceof Map) {
                         str = str.replace(key, "");
@@ -109,8 +115,12 @@ public class WordUtils {
                             //int ind = doc.addPicture(byteInputStream,picType);
                             //doc.createPicture(ind, width , height,para);
                             String blipId = doc.addPictureData(byteInputStream, picType);
-                            doc.createPicture(blipId,doc.getAllPictures().size() - 1, width, height, para);
-                            para.createRun().setText(str, 0);
+                            for (int i = 0; i < runs.size(); i++) {
+                                XWPFRun run = runs.get(i);
+                                doc.createPicture(run,blipId,doc.getAllPictures().size() - 1, width, height, para);
+                                run.setText(str, 0);
+                            }
+                            //para.createRun().setText(str, 0);
                             break;
                         } catch (Exception e) {
                             e.printStackTrace();