上报库-自定义word导出-解决表格中除占位符还有其他文本的情况

This commit is contained in:
liyawei
2022-10-10 17:36:49 +08:00
parent dafff274e1
commit f693c796a4
2 changed files with 48 additions and 12 deletions
@@ -1263,6 +1263,9 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl<ParamsReportDet
}
List<String> configIdList = Arrays.asList(paramsReportDetailVO.getConfigIds().split(",")); // 需要导出的配置列
List<Map<String, Object>> dataList = paramsReportDetailEOMapper.listInfoForExport(idList, paramsReportDetailVO); // 查询需要导出的数据
dataList = dataList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> (String) p.get("id")))),
ArrayList::new)); // 去重
List<ParamsReportConfigEO> paramsConfigEOList = paramsReportConfigEOService.queryList(paramsReportDetailVO.getParamsManifestId()); // 查询所有配置列
@@ -189,7 +189,7 @@ public class WordUtil {
Drawing drawing = factory.createDrawing();
drawing.getAnchorOrInline().add(inline);
run.getContent().add(drawing);
replaceTextToImage(bm, text, wordMLPackage, bytes);
replaceTextToImage(bm, "\\$\\{" + key + "\\}", text, wordMLPackage, bytes);
}
}
} catch (Exception var17) {
@@ -218,7 +218,7 @@ public class WordUtil {
byte[] bytes = (byte[]) picMap.get("bytes");
for(Text bm : textList) {
if (bm.getValue().equals("${" + key + "}")) {
if (bm.getValue().contains("${" + key + "}")) {
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
Inline inline = imagePart.createImageInline("", "", 0, 1, true);
ObjectFactory factory = new ObjectFactory();
@@ -226,7 +226,7 @@ public class WordUtil {
Drawing drawing = factory.createDrawing();
drawing.getAnchorOrInline().add(inline);
run.getContent().add(drawing);
replaceTextToImage(bm, text, wordMLPackage, bytes);
replaceTextToImage(bm, "\\$\\{" + key + "\\}", text, wordMLPackage, bytes);
}
}
}
@@ -387,7 +387,7 @@ public class WordUtil {
* @throws Exception
* @author liyawei
*/
public static void replaceTextToImage(Text bm, Object object, WordprocessingMLPackage wordMLPackage , byte[] bytes) throws Exception {
public static void replaceTextToImage(Text bm, String key, Object object, WordprocessingMLPackage wordMLPackage , byte[] bytes) throws Exception {
if (wordMLPackage == null) {
return;
}
@@ -423,16 +423,49 @@ public class WordUtil {
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
Inline inline = imagePart.createImageInline("", "", 0, 1, true);
ObjectFactory factory = Context.getWmlObjectFactory();
R run = factory.createR();
// R run = factory.createR();
Drawing drawing = factory.createDrawing();
if(text != null){
Text txt = factory.createText();
txt.setValue(text);
run.getContent().add(txt);
for(int j=0;j<r.getContent().size();j++) {
r.getContent().remove(j);
}
run.getContent().add(drawing);
drawing.getAnchorOrInline().add(inline);
theList.add(rangeStart, run); // 添加图片到原占位符位置
String values = bm.getValue().replaceAll(key,"#");
int length = values.length();
String[] valueStr = new String[length];
for(int v=0; v<length; v++) {
valueStr[v] = values.charAt(v) + "";
}
int index = 0;
for(int k=0;k<valueStr.length;k++){
if(valueStr[k].equals("#")){
if(k>0 && !valueStr[k-1].equals("#")) {
Text txt = factory.createText();
txt.setValue(values.substring(index, k));
r.getContent().add(txt);
}
if (text != null) {
Text txtp = factory.createText();
txtp.setValue(text);
r.getContent().add(txtp);
}
r.getContent().add(drawing);
drawing.getAnchorOrInline().add(inline);
index = k + 1;
}
}
if(!values.endsWith("#")) {
Text txt = factory.createText();
txt.setValue(values.substring(index));
r.getContent().add(txt);
}
theList.add(rangeStart, r); // 添加图片到原占位符位置
} else {
return;