认证-word自定义导出工具类修改
This commit is contained in:
+84
-23
@@ -1,14 +1,5 @@
|
||||
package com.jero.modules.project.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.docx4j.Docx4J;
|
||||
import org.docx4j.TraversalUtil;
|
||||
import org.docx4j.XmlUtils;
|
||||
@@ -20,23 +11,24 @@ import org.docx4j.finders.RangeFinder;
|
||||
import org.docx4j.fonts.IdentityPlusMapper;
|
||||
import org.docx4j.fonts.Mapper;
|
||||
import org.docx4j.fonts.PhysicalFonts;
|
||||
import org.docx4j.jaxb.Context;
|
||||
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
|
||||
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
|
||||
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
|
||||
import org.docx4j.wml.Body;
|
||||
import org.docx4j.wml.CTBookmark;
|
||||
import org.docx4j.wml.Document;
|
||||
import org.docx4j.wml.Drawing;
|
||||
import org.docx4j.wml.ObjectFactory;
|
||||
import org.docx4j.wml.P;
|
||||
import org.docx4j.wml.R;
|
||||
import org.docx4j.wml.Tbl;
|
||||
import org.docx4j.wml.Text;
|
||||
import org.docx4j.wml.Tr;
|
||||
import org.docx4j.wml.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class WordUtil {
|
||||
private static final Logger log = LoggerFactory.getLogger(WordUtil.class);
|
||||
|
||||
@@ -126,7 +118,7 @@ public class WordUtil {
|
||||
table.getContent().remove(rowNum - 1);
|
||||
}
|
||||
|
||||
public static void replacePicture(WordprocessingMLPackage wordMLPackage, String bookmarkName, InputStream inputStream) throws Exception {
|
||||
public static void replacePicture(WordprocessingMLPackage wordMLPackage, String bookmarkName, Object text, byte[] bytes) throws Exception {
|
||||
try {
|
||||
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
|
||||
Document wmlDoc = (Document)mainDocumentPart.getJaxbElement();
|
||||
@@ -139,23 +131,92 @@ public class WordUtil {
|
||||
while(var8.hasNext()) {
|
||||
CTBookmark bm = (CTBookmark)var8.next();
|
||||
if (bm.getName().equals(bookmarkName)) {
|
||||
byte[] bytes = IOUtils.toByteArray(inputStream);
|
||||
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
|
||||
Inline inline = imagePart.createImageInline("", "", 0, 1, true);
|
||||
P p = (P)((P)bm.getParent());
|
||||
ObjectFactory factory = new ObjectFactory();
|
||||
R run = factory.createR();
|
||||
Drawing drawing = factory.createDrawing();
|
||||
drawing.getAnchorOrInline().add(inline);
|
||||
run.getContent().add(drawing);
|
||||
p.getContent().add(run);
|
||||
replaceTextToImage(bm, text, wordMLPackage, bytes);
|
||||
}
|
||||
}
|
||||
} catch (Exception var17) {
|
||||
log.error(var17.getMessage(), var17);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 在标签处插入替换内容
|
||||
*
|
||||
* @param bm
|
||||
* @param object
|
||||
* @throws Exception
|
||||
* @author liyawei
|
||||
*/
|
||||
public static void replaceTextToImage(CTBookmark bm, Object object, WordprocessingMLPackage wordMLPackage , byte[] bytes) throws Exception {
|
||||
if (wordMLPackage == null) {
|
||||
return;
|
||||
}
|
||||
if (bm.getName() == null){
|
||||
return;
|
||||
}
|
||||
String text = object.toString();
|
||||
try {
|
||||
List<Object> theList = null;
|
||||
ParaRPr rpr = null;
|
||||
if (bm.getParent() instanceof P) {
|
||||
PPr pprTemp = ((P) (bm.getParent())).getPPr();
|
||||
if (pprTemp == null) {
|
||||
rpr = null;
|
||||
} else {
|
||||
rpr = ((P) (bm.getParent())).getPPr().getRPr();
|
||||
}
|
||||
theList = ((ContentAccessor) (bm.getParent())).getContent();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
int rangeStart = -1;
|
||||
int rangeEnd = -1;
|
||||
int i = 0;
|
||||
for (Object ox : theList) {
|
||||
Object listEntry = XmlUtils.unwrap(ox);
|
||||
if (listEntry.equals(bm)) {
|
||||
if (((CTBookmark) listEntry).getName() != null) {
|
||||
rangeStart = i + 1;
|
||||
}
|
||||
} else if (listEntry instanceof CTMarkupRange) {
|
||||
if (((CTMarkupRange) listEntry).getId().equals(bm.getId())) {
|
||||
rangeEnd = i - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
int x = i - 1;
|
||||
for (int j = x; j >= rangeStart; j--) {
|
||||
theList.remove(j);
|
||||
}
|
||||
|
||||
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
|
||||
Inline inline = imagePart.createImageInline("", "", 0, 1, true);
|
||||
ObjectFactory factory = Context.getWmlObjectFactory();
|
||||
R run = factory.createR();
|
||||
Drawing drawing = factory.createDrawing();
|
||||
if(text != null){
|
||||
Text txt = factory.createText();
|
||||
txt.setValue(text);
|
||||
run.getContent().add(txt);
|
||||
}
|
||||
run.getContent().add(drawing);
|
||||
drawing.getAnchorOrInline().add(inline);
|
||||
theList.add(rangeStart, run);
|
||||
} catch (ClassCastException cce) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static void replaceForTemplate(String templatePath, Map<String, String> map, int tableNum, List<Map<String, Object>> dataList, String outPath) throws Exception {
|
||||
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(templatePath));
|
||||
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
|
||||
|
||||
Reference in New Issue
Block a user