认证-word自定义导出工具类修改
This commit is contained in:
+84
-23
@@ -1,14 +1,5 @@
|
|||||||
package com.jero.modules.project.util;
|
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.Docx4J;
|
||||||
import org.docx4j.TraversalUtil;
|
import org.docx4j.TraversalUtil;
|
||||||
import org.docx4j.XmlUtils;
|
import org.docx4j.XmlUtils;
|
||||||
@@ -20,23 +11,24 @@ import org.docx4j.finders.RangeFinder;
|
|||||||
import org.docx4j.fonts.IdentityPlusMapper;
|
import org.docx4j.fonts.IdentityPlusMapper;
|
||||||
import org.docx4j.fonts.Mapper;
|
import org.docx4j.fonts.Mapper;
|
||||||
import org.docx4j.fonts.PhysicalFonts;
|
import org.docx4j.fonts.PhysicalFonts;
|
||||||
|
import org.docx4j.jaxb.Context;
|
||||||
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
|
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
|
||||||
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
|
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
|
||||||
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
|
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
|
||||||
import org.docx4j.wml.Body;
|
import org.docx4j.wml.*;
|
||||||
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.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.util.FileCopyUtils;
|
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 {
|
public class WordUtil {
|
||||||
private static final Logger log = LoggerFactory.getLogger(WordUtil.class);
|
private static final Logger log = LoggerFactory.getLogger(WordUtil.class);
|
||||||
|
|
||||||
@@ -126,7 +118,7 @@ public class WordUtil {
|
|||||||
table.getContent().remove(rowNum - 1);
|
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 {
|
try {
|
||||||
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
|
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
|
||||||
Document wmlDoc = (Document)mainDocumentPart.getJaxbElement();
|
Document wmlDoc = (Document)mainDocumentPart.getJaxbElement();
|
||||||
@@ -139,23 +131,92 @@ public class WordUtil {
|
|||||||
while(var8.hasNext()) {
|
while(var8.hasNext()) {
|
||||||
CTBookmark bm = (CTBookmark)var8.next();
|
CTBookmark bm = (CTBookmark)var8.next();
|
||||||
if (bm.getName().equals(bookmarkName)) {
|
if (bm.getName().equals(bookmarkName)) {
|
||||||
byte[] bytes = IOUtils.toByteArray(inputStream);
|
|
||||||
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
|
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
|
||||||
Inline inline = imagePart.createImageInline("", "", 0, 1, true);
|
Inline inline = imagePart.createImageInline("", "", 0, 1, true);
|
||||||
P p = (P)((P)bm.getParent());
|
|
||||||
ObjectFactory factory = new ObjectFactory();
|
ObjectFactory factory = new ObjectFactory();
|
||||||
R run = factory.createR();
|
R run = factory.createR();
|
||||||
Drawing drawing = factory.createDrawing();
|
Drawing drawing = factory.createDrawing();
|
||||||
drawing.getAnchorOrInline().add(inline);
|
drawing.getAnchorOrInline().add(inline);
|
||||||
run.getContent().add(drawing);
|
run.getContent().add(drawing);
|
||||||
p.getContent().add(run);
|
replaceTextToImage(bm, text, wordMLPackage, bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception var17) {
|
} 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 {
|
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));
|
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(templatePath));
|
||||||
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
|
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
|
||||||
|
|||||||
Reference in New Issue
Block a user