日期修复问题
This commit is contained in:
parent
b937018241
commit
ab4b0d2c3b
|
@ -237,6 +237,7 @@ public class BlStuAnswerController extends JeecgController<BlStuAnswer, IBlStuAn
|
||||||
updateWp.lambda().eq(BlStuInfo::getId, id);
|
updateWp.lambda().eq(BlStuInfo::getId, id);
|
||||||
updateWp.lambda().set(BlStuInfo::getFilePath,exportWordPath);
|
updateWp.lambda().set(BlStuInfo::getFilePath,exportWordPath);
|
||||||
blStuInfoService.update(updateWp);
|
blStuInfoService.update(updateWp);
|
||||||
|
log.info("更新后的文档地址: {}", exportWordPath);
|
||||||
return Result.OK("生成成功");
|
return Result.OK("生成成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -466,6 +466,8 @@
|
||||||
and z.major = n.major
|
and z.major = n.major
|
||||||
and z.major = t.major
|
and z.major = t.major
|
||||||
GROUP BY z.major
|
GROUP BY z.major
|
||||||
|
order by CONVERT(z.major USING gbk) COLLATE gbk_chinese_ci
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="b2_1_1" resultType="String">
|
<select id="b2_1_1" resultType="String">
|
||||||
|
@ -528,7 +530,7 @@
|
||||||
select
|
select
|
||||||
major as 'key',
|
major as 'key',
|
||||||
round(sum(SXZZK_SATI2)/count(*)) as '01'
|
round(sum(SXZZK_SATI2)/count(*)) as '01'
|
||||||
from bl_stu_answer where main_id = #{id} GROUP BY MAJOR
|
from bl_stu_answer where main_id = #{id} GROUP BY MAJOR order by CONVERT(major USING gbk) COLLATE gbk_chinese_ci
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="i2_5" resultType="java.util.LinkedHashMap">
|
<select id="i2_5" resultType="java.util.LinkedHashMap">
|
||||||
|
@ -796,7 +798,7 @@
|
||||||
round(sum(ZYK_ADVANCED2)/count('x'),2) as '04',
|
round(sum(ZYK_ADVANCED2)/count('x'),2) as '04',
|
||||||
round(sum(ZYK_INTERN2)/count('x'),2) as '05',
|
round(sum(ZYK_INTERN2)/count('x'),2) as '05',
|
||||||
round(sum(ZYK_EFFORT2)/count('x'),2) as '06'
|
round(sum(ZYK_EFFORT2)/count('x'),2) as '06'
|
||||||
from bl_stu_answer GROUP BY major order by CONVERT(major USING gbk) COLLATE gbk_chinese_ci;
|
from bl_stu_answer GROUP BY major order by CONVERT(major USING gbk) COLLATE gbk_chinese_ci
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="i2_12" resultType="java.util.LinkedHashMap">
|
<select id="i2_12" resultType="java.util.LinkedHashMap">
|
||||||
|
@ -1223,6 +1225,7 @@
|
||||||
and a.major = c.MAJOR
|
and a.major = c.MAJOR
|
||||||
and a.major = d.MAJOR
|
and a.major = d.MAJOR
|
||||||
and a.major = e.major
|
and a.major = e.major
|
||||||
|
order by CONVERT(a.major USING gbk) COLLATE gbk_chinese_ci
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="i2_26" resultType="java.util.LinkedHashMap">
|
<select id="i2_26" resultType="java.util.LinkedHashMap">
|
||||||
|
@ -1833,7 +1836,7 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="t3_8" resultType="java.util.LinkedHashMap">
|
<select id="t3_8" resultType="java.util.LinkedHashMap">
|
||||||
select major as 'key',round(sum(TEACHERSATI_ZONGTI2)/count(*))as '01' from bl_stu_answer where main_id = #{id} GROUP BY MAJOR
|
select major as 'key',round(sum(TEACHERSATI_ZONGTI2)/count(*))as '01' from bl_stu_answer where main_id = #{id} GROUP BY MAJOR order by CONVERT(major USING gbk) COLLATE gbk_chinese_ci
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="i3_9" resultType="java.util.LinkedHashMap">
|
<select id="i3_9" resultType="java.util.LinkedHashMap">
|
||||||
|
@ -2539,7 +2542,7 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="t5_4" resultType="java.util.LinkedHashMap">
|
<select id="t5_4" resultType="java.util.LinkedHashMap">
|
||||||
select major as 'key',round(sum(SATI_ZONGTI2)/count(*)) as '01' from bl_stu_answer where main_id = #{id} GROUP BY MAJOR
|
select major as 'key',round(sum(SATI_ZONGTI2)/count(*)) as '01' from bl_stu_answer where main_id = #{id} GROUP BY MAJOR order by CONVERT(major USING gbk) COLLATE gbk_chinese_ci
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
|
@ -550,7 +550,8 @@ public class BlStuAnswerServiceImpl extends ServiceImpl<BlStuAnswerMapper, BlStu
|
||||||
final WordOperator wo = ExportWord.getWordOperator(templateName);
|
final WordOperator wo = ExportWord.getWordOperator(templateName);
|
||||||
Map<String, Object> result = Maps.newHashMap();
|
Map<String, Object> result = Maps.newHashMap();
|
||||||
|
|
||||||
i1_13(wo, result, id);
|
//i1_13(wo, result, id);
|
||||||
|
b1_2(wo, result, id);
|
||||||
|
|
||||||
WordOperator wo2 = WordOperator.twoReplaceWord(wo);
|
WordOperator wo2 = WordOperator.twoReplaceWord(wo);
|
||||||
wo2.replaceTextPlus(result);
|
wo2.replaceTextPlus(result);
|
||||||
|
@ -640,9 +641,9 @@ public class BlStuAnswerServiceImpl extends ServiceImpl<BlStuAnswerMapper, BlStu
|
||||||
data: %s
|
data: %s
|
||||||
},
|
},
|
||||||
yAxis: { type: 'value' },
|
yAxis: { type: 'value' },
|
||||||
axisLabel: { color:'#000', fontSize: 20 },
|
axisLabel: { color:'#000', fontSize: 20, fontFamily: '宋体' },
|
||||||
barWidth: '25%%',
|
barWidth: '25%%',
|
||||||
series: [ { label: { show: true, color: '#000', position: 'top' }, type: 'bar', data: %s } ]
|
series: [ { label: { show: true, color: '#000', position: 'top', fontFamily: '宋体' }, type: 'bar', data: %s } ]
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
json = json.formatted(JSONUtil.toJsonStr(xAxisData), JSONUtil.toJsonStr(yAxisData));
|
json = json.formatted(JSONUtil.toJsonStr(xAxisData), JSONUtil.toJsonStr(yAxisData));
|
||||||
|
@ -673,17 +674,17 @@ public class BlStuAnswerServiceImpl extends ServiceImpl<BlStuAnswerMapper, BlStu
|
||||||
//标准最简单横向柱状图
|
//标准最简单横向柱状图
|
||||||
var json = """
|
var json = """
|
||||||
{
|
{
|
||||||
title: { right: '30', text: '(%%)', textStyle: { fontSize: 30 } },
|
title: { right: '30', text: '(%%)', textStyle: { fontSize: 30, fontFamily: '宋体' } },
|
||||||
grid: { left: '12%%', right: '3%%', bottom: '0%%', containLabel: true },
|
grid: { left: '12%%', right: '3%%', bottom: '0%%', containLabel: true },
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'value', position: 'top', max: %s,
|
type: 'value', position: 'top', max: %s,
|
||||||
axisLabel: { textStyle: { color: '#000', fontSize: 20 }, },
|
axisLabel: { textStyle: { color: '#000', fontSize: 20, fontFamily: '宋体' }, },
|
||||||
axisLine: { show: true, },
|
axisLine: { show: true, },
|
||||||
axisTick: { show: true, inside: true, }
|
axisTick: { show: true, inside: true, }
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
type: 'category',
|
type: 'category', inverse: true,
|
||||||
axisLabel: { textStyle: { color: '#000', fontSize: 20 }, },
|
axisLabel: { textStyle: { color: '#000', fontSize: 20, fontFamily: '宋体' }, },
|
||||||
axisTick: { show: true, inside: true, },
|
axisTick: { show: true, inside: true, },
|
||||||
data: %s,
|
data: %s,
|
||||||
},
|
},
|
||||||
|
@ -749,13 +750,13 @@ public class BlStuAnswerServiceImpl extends ServiceImpl<BlStuAnswerMapper, BlStu
|
||||||
};
|
};
|
||||||
var seriesTemp = """
|
var seriesTemp = """
|
||||||
{
|
{
|
||||||
name: '%s', type: 'bar', stack: 'total', label: { show: true, textStyle: { fontSize: 20, color: '#FFF' } },
|
name: '%s', type: 'bar', stack: 'total', label: { show: true, textStyle: { fontSize: 20, fontFamily: '宋体', color: '#FFF' } },
|
||||||
//emphasis: { focus: 'series' },
|
//emphasis: { focus: 'series' },
|
||||||
data: %s,
|
data: %s,
|
||||||
barWidth: 50,itemStyle: {color: '%s'}
|
barWidth: 50,itemStyle: {color: '%s'}
|
||||||
},
|
},
|
||||||
""";
|
""";
|
||||||
var yAxisTemp = "{ value: '%s', textStyle: { color: '#000', fontSize: 20 } },";
|
var yAxisTemp = "{ value: '%s', textStyle: { color: '#000', fontSize: 20, fontFamily: '宋体' } },";
|
||||||
var yAxisData = Lists.newArrayList();
|
var yAxisData = Lists.newArrayList();
|
||||||
List<String> nameList = Lists.newArrayList();
|
List<String> nameList = Lists.newArrayList();
|
||||||
var seriesList = Lists.newArrayList();
|
var seriesList = Lists.newArrayList();
|
||||||
|
@ -823,7 +824,7 @@ public class BlStuAnswerServiceImpl extends ServiceImpl<BlStuAnswerMapper, BlStu
|
||||||
//横向层叠柱状图
|
//横向层叠柱状图
|
||||||
var json = """
|
var json = """
|
||||||
{
|
{
|
||||||
title: { right: '30', text: '(%%)', textStyle: { fontSize: 30 } },
|
title: { right: '30', text: '(%%)', textStyle: { fontSize: 30, fontFamily: '宋体' } },
|
||||||
tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
|
tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
|
||||||
legend: {},
|
legend: {},
|
||||||
grid: { left: '%s%%', right: '3%%', bottom: '0%%', containLabel: true },
|
grid: { left: '%s%%', right: '3%%', bottom: '0%%', containLabel: true },
|
||||||
|
@ -874,71 +875,52 @@ public class BlStuAnswerServiceImpl extends ServiceImpl<BlStuAnswerMapper, BlStu
|
||||||
String indicatorDataTemp = "{ name: '%s', max: " + maxNumber + " },";
|
String indicatorDataTemp = "{ name: '%s', max: " + maxNumber + " },";
|
||||||
List<String> nameList = Lists.newArrayList();
|
List<String> nameList = Lists.newArrayList();
|
||||||
List<String> seriesDataList = Lists.newArrayList();
|
List<String> seriesDataList = Lists.newArrayList();
|
||||||
List<String> maxSeriesDataList = Lists.newArrayList();
|
//List<String> maxSeriesDataList = Lists.newArrayList();
|
||||||
if(map != null && !map.isEmpty()) {
|
if(map != null && !map.isEmpty()) {
|
||||||
Set<String> keys = Sets.filter(map.keySet(), key -> !KEY.equals(key));
|
Set<String> keys = Sets.filter(map.keySet(), key -> !KEY.equals(key));
|
||||||
for(String key: keys){
|
for(String key: keys){
|
||||||
nameList.add(indicatorDataTemp.formatted(key));
|
nameList.add(indicatorDataTemp.formatted(key));
|
||||||
seriesDataList.add(getMapStr(map.get(key)));
|
seriesDataList.add(getMapStr(map.get(key)));
|
||||||
maxSeriesDataList.add(maxNumber);
|
//maxSeriesDataList.add(maxNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Map<String, String> runJs = Maps.newHashMap();
|
Map<String, String> runJs = Maps.newHashMap();
|
||||||
var runBeforeTemp = "let dataList = %s;";
|
var runBeforeTemp = "let dataList = %s;";
|
||||||
runJs.put("runBefore",runBeforeTemp.formatted(JSONUtil.toJsonStr(seriesDataList)));
|
runJs.put("runBefore",runBeforeTemp.formatted(JSONUtil.toJsonStr(seriesDataList)));
|
||||||
var title = "title: { right: '30', text: '" + titleText + "', textStyle: { fontSize: 30 } },";
|
var title = "title: { right: '30', text: '" + titleText + "', textStyle: { fontSize: 30, fontFamily: '宋体' } },";
|
||||||
//雷达图
|
//雷达图
|
||||||
var json = """
|
var json = """
|
||||||
{
|
{
|
||||||
%s
|
%s
|
||||||
legend: { data: [] },
|
polar: { radius: '50%%', },
|
||||||
radar: {
|
angleAxis: {
|
||||||
radius: '50%%',
|
show: false, min: 0, max: %s, interval: 1, inverse: true,
|
||||||
indicator: %s,
|
axisLine: { lineStyle: { color: 'rgba(0,0,0,0)', }, }, axisTick: { show: false, inside: true, },
|
||||||
axisName: {
|
axisLabel: { textStyle: { color: '#000', fontSize: 20, fontFamily: '宋体' }, formatter: (i) => dataList[i], },
|
||||||
fontSize: 15, color: '#000', padding: 70,
|
|
||||||
formatter: (v) => {
|
|
||||||
let l = String(v).split('');let r = '';
|
|
||||||
l.forEach((x,i) => { if((i+1) %% 12 == 0){ r += x + '\\n'; } else { r += x; } });
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
},
|
radiusAxis: { show: false, },
|
||||||
series: [
|
radar: {
|
||||||
{
|
radius: '50%%',
|
||||||
name: 'data',
|
axisName: {
|
||||||
type: 'radar',
|
fontSize: 15, fontFamily: '宋体', color: '#000', padding: 70,
|
||||||
label: { position: 'top' },
|
formatter: (v) => {
|
||||||
data: [{ name: 'alxc', value: dataList }]
|
let l = String(v).split('');let r = '';
|
||||||
|
l.forEach((x,i) => { if((i+1) %% 12 == 0){ r += x + '\\n'; } else { r += x; } });
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
indicator: %s,
|
||||||
},
|
},
|
||||||
{
|
series: [ { name: 'data', type: 'radar', label: { position: 'top' }, data: [ { value: dataList, name: 'value', }, ] } ]
|
||||||
type: 'radar',
|
|
||||||
data: [
|
|
||||||
{
|
|
||||||
name: 'max',
|
|
||||||
itemStyle: { color: '#000' },
|
|
||||||
lineStyle: { type: 'dashed', color: '#000' },
|
|
||||||
label: {
|
|
||||||
show: true,
|
|
||||||
fontSize: 20,
|
|
||||||
formatter: (params) => {
|
|
||||||
return dataList[params.dimensionIndex];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
value: %s
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
var nameListSb = new StringBuilder();
|
var nameListSb = new StringBuilder();
|
||||||
nameListSb.append("[");
|
nameListSb.append("[");
|
||||||
nameList.forEach(nameListSb::append);
|
nameList.forEach(nameListSb::append);
|
||||||
nameListSb.append("]");
|
nameListSb.append("]");
|
||||||
json = json.formatted(title, nameListSb.toString(), JSONUtil.toJsonStr(maxSeriesDataList));
|
json = json.formatted(title, nameList.size(), nameListSb.toString());
|
||||||
|
|
||||||
return WebDriverUtil.getImgByte(json,"echarts500.html", runJs);
|
return WebDriverUtil.getImgByte(json,"echarts600.html", runJs);
|
||||||
}
|
}
|
||||||
public void t1_1(WordOperator wo, Map<String, Object> result, String id) {
|
public void t1_1(WordOperator wo, Map<String, Object> result, String id) {
|
||||||
var list1 = baseMapper.t1_1_1(id);
|
var list1 = baseMapper.t1_1_1(id);
|
||||||
|
@ -2226,8 +2208,7 @@ public class BlStuAnswerServiceImpl extends ServiceImpl<BlStuAnswerMapper, BlStu
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
fontSize: '30',
|
fontSize: '30',
|
||||||
//fontWeight: 'bold',
|
fontFamily: '宋体',
|
||||||
//textStyle: {fontSize: 50}
|
|
||||||
position: 'center',
|
position: 'center',
|
||||||
formatter: (e) => e.name + '\\n' + e.value +'%%'
|
formatter: (e) => e.name + '\\n' + e.value +'%%'
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,7 +12,10 @@ import org.jeecg.modules.tools.CommonUtil;
|
||||||
import org.jeecg.modules.tools.FileUtils;
|
import org.jeecg.modules.tools.FileUtils;
|
||||||
import org.jeecg.modules.tools.Global;
|
import org.jeecg.modules.tools.Global;
|
||||||
import org.jeecg.modules.tools.IdGen;
|
import org.jeecg.modules.tools.IdGen;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -28,33 +31,33 @@ import java.util.Map;
|
||||||
*/
|
*/
|
||||||
public class WordOperator {
|
public class WordOperator {
|
||||||
|
|
||||||
private static Logger logger = LoggerFactory.getLogger(WordOperator.class);
|
private static final Logger logger = LoggerFactory.getLogger(WordOperator.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模板替换标签开头
|
* 模板替换标签开头
|
||||||
*/
|
*/
|
||||||
private final static String LABEL_STR = "{";
|
private static final String LABEL_STR = "{";
|
||||||
/**
|
/**
|
||||||
* 模板替换标签结尾
|
* 模板替换标签结尾
|
||||||
*/
|
*/
|
||||||
private final static String LABEL_END = "}";
|
private static final String LABEL_END = "}";
|
||||||
/**
|
/**
|
||||||
* 模板替换图片标签开头(List)
|
* 模板替换图片标签开头(List)
|
||||||
*/
|
*/
|
||||||
private final static String LABEL_IMAGE_STR = "<";
|
private static final String LABEL_IMAGE_STR = "<";
|
||||||
/**
|
/**
|
||||||
* 模板替换图片标签结尾(List)
|
* 模板替换图片标签结尾(List)
|
||||||
*/
|
*/
|
||||||
private final static String LABEL_IMAGE_END = ">";
|
private static final String LABEL_IMAGE_END = ">";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模板替换图片标签开头(List)
|
* 模板替换图片标签开头(List)
|
||||||
*/
|
*/
|
||||||
private final static String LABEL_RICH_TEXT_STR = "<richText[";
|
private static final String LABEL_RICH_TEXT_STR = "<richText[";
|
||||||
/**
|
/**
|
||||||
* 模板替换图片标签结尾(List)
|
* 模板替换图片标签结尾(List)
|
||||||
*/
|
*/
|
||||||
private final static String LABEL_RICH_TEXT_END = "]richText>";
|
private static final String LABEL_RICH_TEXT_END = "]richText>";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载word对象
|
* 加载word对象
|
||||||
|
@ -69,8 +72,6 @@ public class WordOperator {
|
||||||
this.doc = doc;
|
this.doc = doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private int picturesSize = 0;
|
private int picturesSize = 0;
|
||||||
|
|
||||||
public int getPicturesSize() {
|
public int getPicturesSize() {
|
||||||
|
@ -93,8 +94,6 @@ public class WordOperator {
|
||||||
public WordOperator(InputStream is) throws Exception {
|
public WordOperator(InputStream is) throws Exception {
|
||||||
doc = new XWPFDocument(is);
|
doc = new XWPFDocument(is);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 要替换标签的KV对
|
* 要替换标签的KV对
|
||||||
|
@ -122,41 +121,38 @@ public class WordOperator {
|
||||||
*/
|
*/
|
||||||
public void createPicture(XWPFParagraph pic, String picPath, int width, int height, String picAttch){
|
public void createPicture(XWPFParagraph pic, String picPath, int width, int height, String picAttch){
|
||||||
pic.setAlignment(ParagraphAlignment.CENTER);
|
pic.setAlignment(ParagraphAlignment.CENTER);
|
||||||
|
|
||||||
XWPFRun run = pic.createRun();
|
XWPFRun run = pic.createRun();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(StringUtils.isBlank(picPath) || picPath.lastIndexOf(".") == -1){
|
if(StringUtils.isBlank(picPath) || picPath.lastIndexOf(".") == -1){
|
||||||
logger.error("文件路径错误:");
|
logger.error("文件路径错误: {}", picPath);
|
||||||
logger.error(picPath);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//根据文件后缀名设置图片格式
|
//根据文件后缀名设置图片格式
|
||||||
String picType = picPath.substring(picPath.lastIndexOf("\\.")+1);
|
String picType = picPath.substring(picPath.lastIndexOf("\\.")+1);
|
||||||
int res = XWPFDocument.PICTURE_TYPE_PICT;
|
int res = Document.PICTURE_TYPE_PICT;
|
||||||
if(picType != null){
|
if(StringUtils.isNotBlank(picType)){
|
||||||
if(picType.equalsIgnoreCase("png")){
|
if(picType.equalsIgnoreCase("png")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_PNG;
|
res = Document.PICTURE_TYPE_PNG;
|
||||||
}else if(picType.equalsIgnoreCase("gif")) {
|
}else if(picType.equalsIgnoreCase("gif")) {
|
||||||
res = XWPFDocument.PICTURE_TYPE_GIF;
|
res = Document.PICTURE_TYPE_GIF;
|
||||||
}else if(picType.equalsIgnoreCase("emf")){
|
}else if(picType.equalsIgnoreCase("emf")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_EMF;
|
res = Document.PICTURE_TYPE_EMF;
|
||||||
}else if(picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")){
|
}else if(picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_JPEG;
|
res = Document.PICTURE_TYPE_JPEG;
|
||||||
}else if(picType.equalsIgnoreCase("wmf")){
|
}else if(picType.equalsIgnoreCase("wmf")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_WMF;
|
res = Document.PICTURE_TYPE_WMF;
|
||||||
}else if(picType.equalsIgnoreCase("pict")){
|
// }else if(picType.equalsIgnoreCase("pict")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_PICT;
|
//res = Document.PICTURE_TYPE_PICT;
|
||||||
}else if(picType.equalsIgnoreCase("dib")){
|
}else if(picType.equalsIgnoreCase("dib")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_DIB;
|
res = Document.PICTURE_TYPE_DIB;
|
||||||
}else if(picType.equalsIgnoreCase("tiff")){
|
}else if(picType.equalsIgnoreCase("tiff")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_TIFF;
|
res = Document.PICTURE_TYPE_TIFF;
|
||||||
}else if(picType.equalsIgnoreCase("eps")){
|
}else if(picType.equalsIgnoreCase("eps")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_EPS;
|
res = Document.PICTURE_TYPE_EPS;
|
||||||
}else if(picType.equalsIgnoreCase("bmp")){
|
}else if(picType.equalsIgnoreCase("bmp")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_BMP;
|
res = Document.PICTURE_TYPE_BMP;
|
||||||
}else if(picType.equalsIgnoreCase("wpg")){
|
}else if(picType.equalsIgnoreCase("wpg")){
|
||||||
res = XWPFDocument.PICTURE_TYPE_WPG;
|
res = Document.PICTURE_TYPE_WPG;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//塞进文档中
|
//塞进文档中
|
||||||
|
@ -386,19 +382,17 @@ public class WordOperator {
|
||||||
private void replaceTextPlus(List<XWPFParagraph> paragraphList) {
|
private void replaceTextPlus(List<XWPFParagraph> paragraphList) {
|
||||||
//InputStream imageFileIs = null;
|
//InputStream imageFileIs = null;
|
||||||
// 取出word模板里的全部段落,遍历
|
// 取出word模板里的全部段落,遍历
|
||||||
for (int i = 0; i < paragraphList.size(); i++) {
|
for (XWPFParagraph paragraph : paragraphList) {
|
||||||
XWPFParagraph paragraph = paragraphList.get(i);
|
|
||||||
// 拿出每一个段落,判断内容里是否包含字符串"{"和"}",只有两者同时存在了才执行替换标签的逻辑
|
// 拿出每一个段落,判断内容里是否包含字符串"{"和"}",只有两者同时存在了才执行替换标签的逻辑
|
||||||
String paragraphText = paragraph.getText();
|
String paragraphText = paragraph.getText();
|
||||||
if (!StringUtils.isBlank(paragraphText) && StringUtils.indexOf(paragraphText,LABEL_STR) != -1 && StringUtils.indexOf(paragraphText,LABEL_END) != -1) {
|
if (!StringUtils.isBlank(paragraphText) && StringUtils.contains(paragraphText, LABEL_STR) && StringUtils.contains(paragraphText, LABEL_END)) {
|
||||||
// 每一个段落分很多小段文本,官方API只能通过XWPFRun对象执行替换文本功能
|
// 每一个段落分很多小段文本,官方API只能通过XWPFRun对象执行替换文本功能
|
||||||
List<XWPFRun> runList = paragraph.getRuns();
|
List<XWPFRun> runList = paragraph.getRuns();
|
||||||
// 组装replaceMap的key
|
// 组装replaceMap的key
|
||||||
String key = "";
|
String key = "";
|
||||||
// 是否检测到有"{"字符串,有为true,没有为false
|
// 是否检测到有"{"字符串,有为true,没有为false
|
||||||
boolean include = false;
|
boolean include = false;
|
||||||
for (int j = 0; j < runList.size(); j++) {
|
for (XWPFRun run : runList) {
|
||||||
XWPFRun run = runList.get(j);
|
|
||||||
//颜色
|
//颜色
|
||||||
// run.setColor("F3C917");
|
// run.setColor("F3C917");
|
||||||
//加粗
|
//加粗
|
||||||
|
@ -413,9 +407,11 @@ public class WordOperator {
|
||||||
// 取出每一个小段里标签头和尾的角标
|
// 取出每一个小段里标签头和尾的角标
|
||||||
//是否存在两个{
|
//是否存在两个{
|
||||||
boolean isParagraphReplaceAllText = false;
|
boolean isParagraphReplaceAllText = false;
|
||||||
if(StringUtils.ordinalIndexOf(text,LABEL_STR,2) != -1){
|
//etxt是否存在两个以上的{
|
||||||
|
if (StringUtils.ordinalIndexOf(text, LABEL_STR, 2) != -1) {
|
||||||
isParagraphReplaceAllText = true;
|
isParagraphReplaceAllText = true;
|
||||||
text = paragraphReplaceAllText(text,replaceMap);
|
//进入同行匹配模式,返回结果
|
||||||
|
text = paragraphReplaceAllText(text, replaceMap);
|
||||||
}
|
}
|
||||||
int labelStrIndex = StringUtils.indexOf(text, LABEL_STR);
|
int labelStrIndex = StringUtils.indexOf(text, LABEL_STR);
|
||||||
int labelEndIndex = StringUtils.indexOf(text, LABEL_END);
|
int labelEndIndex = StringUtils.indexOf(text, LABEL_END);
|
||||||
|
@ -434,34 +430,34 @@ public class WordOperator {
|
||||||
String textAfter = text.substring(labelEndIndex + 1);
|
String textAfter = text.substring(labelEndIndex + 1);
|
||||||
key += textBefore;
|
key += textBefore;
|
||||||
//Object value = replaceMap.get(key);
|
//Object value = replaceMap.get(key);
|
||||||
String value = (String)replaceMap.get(key);
|
String value = (String) replaceMap.get(key);
|
||||||
if (StringUtils.isBlank(value)) value = "";
|
if (StringUtils.isBlank(value)) value = "";
|
||||||
WordTextStyle style = (WordTextStyle)replaceMap.get(key + "_style");
|
WordTextStyle style = (WordTextStyle) replaceMap.get(key + "_style");
|
||||||
//添加样式
|
//添加样式
|
||||||
if(style != null) style.run(run);
|
if (style != null) style.run(run);
|
||||||
if (StringUtils.isBlank(value)) value = "";
|
if (StringUtils.isBlank(value)) value = "";
|
||||||
value = StringEscapeUtils.unescapeHtml4(value);
|
value = StringEscapeUtils.unescapeHtml4(value);
|
||||||
key = "";
|
key = "";
|
||||||
//--2020-04修改
|
//--2020-04修改
|
||||||
String[] values = value.split("\n");
|
String[] values = value.split("\n");
|
||||||
if(values.length > 1) {
|
if (values.length > 1) {
|
||||||
run.setText(values[0],0);
|
run.setText(values[0], 0);
|
||||||
for (int x = 1; x < values.length; x++) {
|
for (int x = 1; x < values.length; x++) {
|
||||||
//存在分段则新建一个run
|
//存在分段则新建一个run
|
||||||
XWPFRun newrun = paragraph.createRun();
|
XWPFRun newRun = paragraph.createRun();
|
||||||
//copy样式
|
//copy样式
|
||||||
newrun.getCTR().setRPr(run.getCTR().getRPr());
|
newRun.getCTR().setRPr(run.getCTR().getRPr());
|
||||||
//换行
|
//换行
|
||||||
newrun.addBreak();
|
newRun.addBreak();
|
||||||
//缩进
|
//缩进
|
||||||
//newrun.addTab();
|
//newRun.addTab();
|
||||||
if(x == values.length - 1) {
|
if (x == values.length - 1) {
|
||||||
newrun.setText(values[x] + textAfter);
|
newRun.setText(values[x] + textAfter);
|
||||||
}else {
|
} else {
|
||||||
newrun.setText(values[x]);
|
newRun.setText(values[x]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else {
|
} else {
|
||||||
run.setText(value + textAfter, 0);
|
run.setText(value + textAfter, 0);
|
||||||
}
|
}
|
||||||
include = false;
|
include = false;
|
||||||
|
@ -472,9 +468,9 @@ public class WordOperator {
|
||||||
key += text;
|
key += text;
|
||||||
run.setText("", 0);
|
run.setText("", 0);
|
||||||
}
|
}
|
||||||
if(isParagraphReplaceAllText){
|
if (isParagraphReplaceAllText) {
|
||||||
//替换文本
|
//替换文本
|
||||||
run.setText(text,0);
|
run.setText(text, 0);
|
||||||
}
|
}
|
||||||
// 两个都存在,这种情况比较复杂。经过多次试验,XWPFRun切割内容,只会同时各出现1次而已
|
// 两个都存在,这种情况比较复杂。经过多次试验,XWPFRun切割内容,只会同时各出现1次而已
|
||||||
} else {
|
} else {
|
||||||
|
@ -484,32 +480,32 @@ public class WordOperator {
|
||||||
String textBefore = text.substring(0, labelStrIndex);
|
String textBefore = text.substring(0, labelStrIndex);
|
||||||
String textMiddle = text.substring(labelStrIndex + 1, labelEndIndex);
|
String textMiddle = text.substring(labelStrIndex + 1, labelEndIndex);
|
||||||
String textAfter = text.substring(labelEndIndex + 1);
|
String textAfter = text.substring(labelEndIndex + 1);
|
||||||
String value = (String)replaceMap.get(textMiddle);
|
String value = (String) replaceMap.get(textMiddle);
|
||||||
if (StringUtils.isBlank(value)) value = "";
|
if (StringUtils.isBlank(value)) value = "";
|
||||||
WordTextStyle style = (WordTextStyle)replaceMap.get(textMiddle + "_style");
|
WordTextStyle style = (WordTextStyle) replaceMap.get(textMiddle + "_style");
|
||||||
//添加样式
|
//添加样式
|
||||||
if(style != null) style.run(run);
|
if (style != null) style.run(run);
|
||||||
value = StringEscapeUtils.unescapeHtml4(value);
|
value = StringEscapeUtils.unescapeHtml4(value);
|
||||||
//--2020-04修改
|
//--2020-04修改
|
||||||
String[] values = value.split("\n");
|
String[] values = value.split("\n");
|
||||||
if(values.length > 1) {
|
if (values.length > 1) {
|
||||||
run.setText(textBefore + values[0],0);
|
run.setText(textBefore + values[0], 0);
|
||||||
for (int x = 1; x < values.length; x++) {
|
for (int x = 1; x < values.length; x++) {
|
||||||
//存在分段则新建一个run
|
//存在分段则新建一个run
|
||||||
XWPFRun newrun = paragraph.createRun();
|
XWPFRun newRun = paragraph.createRun();
|
||||||
//copy样式
|
//copy样式
|
||||||
newrun.getCTR().setRPr(run.getCTR().getRPr());
|
newRun.getCTR().setRPr(run.getCTR().getRPr());
|
||||||
//换行
|
//换行
|
||||||
newrun.addBreak();
|
newRun.addBreak();
|
||||||
//缩进
|
//缩进
|
||||||
//newrun.addTab();
|
//newRun.addTab();
|
||||||
if(x == values.length - 1) {
|
if (x == values.length - 1) {
|
||||||
newrun.setText(values[x] + textAfter,0);
|
newRun.setText(values[x] + textAfter, 0);
|
||||||
}else {
|
} else {
|
||||||
newrun.setText(values[x]);
|
newRun.setText(values[x]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else {
|
} else {
|
||||||
run.setText(textBefore + value + textAfter, 0);
|
run.setText(textBefore + value + textAfter, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -522,32 +518,32 @@ public class WordOperator {
|
||||||
String textMiddle = text.substring(labelEndIndex + 1, labelStrIndex);
|
String textMiddle = text.substring(labelEndIndex + 1, labelStrIndex);
|
||||||
String textAfter = text.substring(labelStrIndex + 1);
|
String textAfter = text.substring(labelStrIndex + 1);
|
||||||
key += textBefore;
|
key += textBefore;
|
||||||
String value = (String)replaceMap.get(key);
|
String value = (String) replaceMap.get(key);
|
||||||
if (value == null || StringUtils.isBlank(value.toString())) value = "";
|
if (value == null || StringUtils.isBlank(value)) value = "";
|
||||||
WordTextStyle style = (WordTextStyle)replaceMap.get(textMiddle + "_style");
|
WordTextStyle style = (WordTextStyle) replaceMap.get(textMiddle + "_style");
|
||||||
//添加样式
|
//添加样式
|
||||||
if(style != null) style.run(run);
|
if (style != null) style.run(run);
|
||||||
value = StringEscapeUtils.unescapeHtml4(value);
|
value = StringEscapeUtils.unescapeHtml4(value);
|
||||||
//--2020-04修改
|
//--2020-04修改
|
||||||
String[] values = value.toString().split("\n");
|
String[] values = value.split("\n");
|
||||||
if(values.length > 1) {
|
if (values.length > 1) {
|
||||||
run.setText(values[0],0);
|
run.setText(values[0], 0);
|
||||||
for (int x = 1; x < values.length; x++) {
|
for (int x = 1; x < values.length; x++) {
|
||||||
//存在分段则新建一个run
|
//存在分段则新建一个run
|
||||||
XWPFRun newrun = paragraph.createRun();
|
XWPFRun newRun = paragraph.createRun();
|
||||||
//copy样式
|
//copy样式
|
||||||
newrun.getCTR().setRPr(run.getCTR().getRPr());
|
newRun.getCTR().setRPr(run.getCTR().getRPr());
|
||||||
//换行
|
//换行
|
||||||
newrun.addBreak();
|
newRun.addBreak();
|
||||||
//缩进
|
//缩进
|
||||||
//newrun.addTab();
|
//newRun.addTab();
|
||||||
if(x == values.length - 1) {
|
if (x == values.length - 1) {
|
||||||
newrun.setText(values[x] + textMiddle,0);
|
newRun.setText(values[x] + textMiddle, 0);
|
||||||
}else {
|
} else {
|
||||||
newrun.setText(values[x]);
|
newRun.setText(values[x]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else {
|
} else {
|
||||||
run.setText(value + textMiddle, 0);
|
run.setText(value + textMiddle, 0);
|
||||||
}
|
}
|
||||||
key = textAfter;
|
key = textAfter;
|
||||||
|
@ -555,31 +551,30 @@ public class WordOperator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//富文本标签(转成图片的富文本)
|
//富文本标签(转成图片的富文本)
|
||||||
} else if(StringUtils.isNotBlank(paragraphText) && paragraphText.indexOf(LABEL_RICH_TEXT_STR) != -1 && paragraphText.indexOf(LABEL_RICH_TEXT_END) != -1){
|
} else if (StringUtils.isNotBlank(paragraphText) && StringUtils.contains(paragraphText, LABEL_RICH_TEXT_STR) && StringUtils.contains(paragraphText, LABEL_RICH_TEXT_END)) {
|
||||||
System.out.println("paragraphText="+paragraphText);
|
logger.info("paragraphText={}", paragraphText);
|
||||||
//如果匹配到‘<’和‘>’则开始替换为图片
|
//如果匹配到‘<’和‘>’则开始替换为图片
|
||||||
// 每一个段落分很多小段文本,官方API只能否通过XWPFRun对象执行替换文本功能
|
// 每一个段落分很多小段文本,官方API只能否通过XWPFRun对象执行替换文本功能
|
||||||
List<XWPFRun> runList = paragraph.getRuns();
|
List<XWPFRun> runList = paragraph.getRuns();
|
||||||
//组装replaceMap的key
|
//组装replaceMap的key
|
||||||
String key = "";
|
String key = "";
|
||||||
|
|
||||||
//<richText[课题设计论证]richText>
|
//<richText[课题设计论证]richText>
|
||||||
//摘出key
|
//摘出key
|
||||||
int $labelStrIndex = StringUtils.indexOf(paragraphText, LABEL_RICH_TEXT_STR);
|
int $labelStrIndex = StringUtils.indexOf(paragraphText, LABEL_RICH_TEXT_STR);
|
||||||
int $labelEndIndex = StringUtils.indexOf(paragraphText, LABEL_RICH_TEXT_END);
|
int $labelEndIndex = StringUtils.indexOf(paragraphText, LABEL_RICH_TEXT_END);
|
||||||
|
|
||||||
//必须存在开始和结束标签
|
//必须存在开始和结束标签
|
||||||
if($labelStrIndex != -1 && $labelEndIndex != -1){
|
if ($labelStrIndex != -1 && $labelEndIndex != -1) {
|
||||||
key = paragraphText;
|
key = paragraphText;
|
||||||
key = key.substring($labelStrIndex + LABEL_RICH_TEXT_STR.length());
|
key = key.substring($labelStrIndex + LABEL_RICH_TEXT_STR.length());
|
||||||
$labelEndIndex = StringUtils.indexOf(key, LABEL_RICH_TEXT_END);
|
$labelEndIndex = StringUtils.indexOf(key, LABEL_RICH_TEXT_END);
|
||||||
key = key.substring(0,$labelEndIndex);
|
key = key.substring(0, $labelEndIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
//去除整行(整个paragraph)
|
//去除整行(整个paragraph)
|
||||||
for (int j = 0; j < runList.size(); j++) {
|
for (XWPFRun run : runList) {
|
||||||
XWPFRun run = runList.get(j);
|
|
||||||
run.setText("", 0);
|
run.setText("", 0);
|
||||||
}
|
}
|
||||||
//添加图片
|
//添加图片
|
||||||
|
@ -591,18 +586,18 @@ public class WordOperator {
|
||||||
}
|
}
|
||||||
String imagePath = getHtmlImage(value.toString());
|
String imagePath = getHtmlImage(value.toString());
|
||||||
//try {
|
//try {
|
||||||
//imageFileIs = new FileInputStream(new File(imagePath));
|
//imageFileIs = new FileInputStream(new File(imagePath));
|
||||||
//$run.addPicture(imageFileIs, 6, "image", 595,842);
|
//$run.addPicture(imageFileIs, 6, "image", 595,842);
|
||||||
//} catch (InvalidFormatException | IOException e) {
|
//} catch (InvalidFormatException | IOException e) {
|
||||||
//logger.error("图片读取或添加错误!");
|
//logger.error("图片读取或添加错误!");
|
||||||
//logger.error(e.getMessage(),e);
|
//logger.error(e.getMessage(),e);
|
||||||
//e.printStackTrace();
|
//e.printStackTrace();
|
||||||
//}
|
//}
|
||||||
createPicturePlus(paragraph,imagePath,595,842,"");
|
createPicturePlus(paragraph, imagePath, 595, 842, "");
|
||||||
//FileUtils.deleteFile(imagePath);
|
//FileUtils.deleteFile(imagePath);
|
||||||
//$run.setText();
|
//$run.setText();
|
||||||
//图片标签
|
//图片标签
|
||||||
}else if(StringUtils.isNotBlank(paragraphText) && paragraphText.indexOf(LABEL_IMAGE_STR) != -1 && paragraphText.indexOf(LABEL_IMAGE_END) != -1){
|
} else if (StringUtils.isNotBlank(paragraphText) && StringUtils.contains(paragraphText, LABEL_IMAGE_STR) && StringUtils.contains(paragraphText, LABEL_IMAGE_END)) {
|
||||||
//如果匹配到‘<’和‘>’则开始替换为图片
|
//如果匹配到‘<’和‘>’则开始替换为图片
|
||||||
// 每一个段落分很多小段文本,官方API只能否通过XWPFRun对象执行替换文本功能
|
// 每一个段落分很多小段文本,官方API只能否通过XWPFRun对象执行替换文本功能
|
||||||
List<XWPFRun> runList = paragraph.getRuns();
|
List<XWPFRun> runList = paragraph.getRuns();
|
||||||
|
@ -612,8 +607,9 @@ public class WordOperator {
|
||||||
WordImageLabel wordImageLabel = null;
|
WordImageLabel wordImageLabel = null;
|
||||||
// 是否检测到有"<"字符串,有为true,没有为false
|
// 是否检测到有"<"字符串,有为true,没有为false
|
||||||
boolean include = false;
|
boolean include = false;
|
||||||
for (int j = 0; j < runList.size(); j++) {
|
for (int i = 0; i < runList.size(); i++) {
|
||||||
XWPFRun run = runList.get(j);
|
//for (XWPFRun run : runList) {
|
||||||
|
XWPFRun run = runList.get(i);
|
||||||
String text = run.getText(0);
|
String text = run.getText(0);
|
||||||
// 取出每一个小段里标签头和尾的角标
|
// 取出每一个小段里标签头和尾的角标
|
||||||
int labelStrIndex = StringUtils.indexOf(text, LABEL_IMAGE_STR);
|
int labelStrIndex = StringUtils.indexOf(text, LABEL_IMAGE_STR);
|
||||||
|
@ -643,7 +639,7 @@ public class WordOperator {
|
||||||
//创建图片
|
//创建图片
|
||||||
run.setText("", 0);
|
run.setText("", 0);
|
||||||
// run.setText(value + textAfter, 0);
|
// run.setText(value + textAfter, 0);
|
||||||
createPicturePlus(paragraph,(String)value,wordImageLabel.getWidth(),wordImageLabel.getHeight(),wordImageLabel.getPicAttch());
|
createPicturePlus(paragraph, (String) value, wordImageLabel.getWidth(), wordImageLabel.getHeight(), wordImageLabel.getPicAttch());
|
||||||
include = false;
|
include = false;
|
||||||
// 两个都没有
|
// 两个都没有
|
||||||
} else if (labelStrIndex == -1 && labelEndIndex == -1) {
|
} else if (labelStrIndex == -1 && labelEndIndex == -1) {
|
||||||
|
@ -667,7 +663,7 @@ public class WordOperator {
|
||||||
}
|
}
|
||||||
run.setText("", 0);
|
run.setText("", 0);
|
||||||
// run.setText(textBefore + value + textAfter, 0);
|
// run.setText(textBefore + value + textAfter, 0);
|
||||||
createPicturePlus(paragraph,(String)value,wordImageLabel.getWidth(),wordImageLabel.getHeight(),wordImageLabel.getPicAttch());
|
createPicturePlus(paragraph, (String) value, wordImageLabel.getWidth(), wordImageLabel.getHeight(), wordImageLabel.getPicAttch());
|
||||||
key = "";
|
key = "";
|
||||||
include = false;
|
include = false;
|
||||||
// >在前,<在后
|
// >在前,<在后
|
||||||
|
@ -683,15 +679,15 @@ public class WordOperator {
|
||||||
value = "";
|
value = "";
|
||||||
}
|
}
|
||||||
run.setText("", 0);
|
run.setText("", 0);
|
||||||
createPicturePlus(paragraph,(String)value,wordImageLabel.getWidth(),wordImageLabel.getHeight(),wordImageLabel.getPicAttch());
|
createPicturePlus(paragraph, (String) value, wordImageLabel.getWidth(), wordImageLabel.getHeight(), wordImageLabel.getPicAttch());
|
||||||
key = textAfter;
|
key = textAfter;
|
||||||
include = true;
|
include = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -710,23 +706,21 @@ public class WordOperator {
|
||||||
*/
|
*/
|
||||||
private void replaceTextAndCreatePicture(List<XWPFParagraph> paragraphList) {
|
private void replaceTextAndCreatePicture(List<XWPFParagraph> paragraphList) {
|
||||||
// 取出word模板里的全部段落,遍历
|
// 取出word模板里的全部段落,遍历
|
||||||
for (int i = 0; i < paragraphList.size(); i++) {
|
for (XWPFParagraph paragraph : paragraphList) {
|
||||||
XWPFParagraph paragraph = paragraphList.get(i);
|
|
||||||
// 拿出每一个段落,判断内容里是否包含字符串"{"和"}",只有两者同时存在了才执行替换标签的逻辑
|
// 拿出每一个段落,判断内容里是否包含字符串"{"和"}",只有两者同时存在了才执行替换标签的逻辑
|
||||||
String paragraphText = paragraph.getText();
|
String paragraphText = paragraph.getText();
|
||||||
if (!StringUtils.isBlank(paragraphText)) {
|
if (!StringUtils.isBlank(paragraphText)) {
|
||||||
//判断是否为唯一的image关键字
|
//判断是否为唯一的image关键字
|
||||||
if(StringUtils.equals(paragraphText, "{IMAGE}") && paragraphText.indexOf(LABEL_STR) != -1 && paragraphText.indexOf(LABEL_END) != -1){
|
if (StringUtils.equals(paragraphText, "{IMAGE}") && StringUtils.contains(paragraphText, LABEL_STR) && StringUtils.contains(paragraphText, LABEL_END)) {
|
||||||
//去掉关键字标记
|
//去掉关键字标记
|
||||||
List<XWPFRun> runList = paragraph.getRuns();
|
List<XWPFRun> runList = paragraph.getRuns();
|
||||||
for (int j = 0; j < runList.size(); j++) {
|
for (XWPFRun run : runList) {
|
||||||
XWPFRun run = runList.get(j);
|
|
||||||
run.setText("", 0);
|
run.setText("", 0);
|
||||||
}
|
}
|
||||||
//获取图片地址
|
//获取图片地址
|
||||||
String picPath = (String) replaceMap.get("IMAGE");
|
String picPath = (String) replaceMap.get("IMAGE");
|
||||||
//创建图片
|
//创建图片
|
||||||
createPicture(paragraph,picPath,83,83," ");
|
createPicture(paragraph, picPath, 83, 83, " ");
|
||||||
//创建后不需要普通的文字替换了,跳过本段落
|
//创建后不需要普通的文字替换了,跳过本段落
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -736,8 +730,7 @@ public class WordOperator {
|
||||||
String key = "";
|
String key = "";
|
||||||
// 是否检测到有"{"字符串,有为true,没有为false
|
// 是否检测到有"{"字符串,有为true,没有为false
|
||||||
boolean include = false;
|
boolean include = false;
|
||||||
for (int j = 0; j < runList.size(); j++) {
|
for (XWPFRun run : runList) {
|
||||||
XWPFRun run = runList.get(j);
|
|
||||||
String text = run.getText(0);
|
String text = run.getText(0);
|
||||||
// 取出每一个小段里标签头和尾的角标
|
// 取出每一个小段里标签头和尾的角标
|
||||||
int labelStrIndex = text.indexOf(LABEL_STR);
|
int labelStrIndex = text.indexOf(LABEL_STR);
|
||||||
|
|
|
@ -418,7 +418,7 @@
|
||||||
学生学习主动性评价各项占比
|
学生学习主动性评价各项占比
|
||||||
|
|
||||||
在落实推进学生刻苦读书学习,增强学习主动性方面,该校学生评价自身"课前运用网络课程平台、教材或资料进行自主预学,梳理知识并发现问题"的符合程度得分为{b1_1_1}分,"课堂上能跟上老师的讲解,主动提问或参与讨论,每节课学有所获"的符合程度得分为{b1_1_2}分,"课后复习笔记及总结课堂教学相关知识"的符合程度得分为{b1_1_3}分,"除了阅读教材,还延伸阅读教师推荐的其他相关书目"的符合程度得分为{b1_1_4}分。
|
在落实推进学生刻苦读书学习,增强学习主动性方面,该校学生评价自身"课前运用网络课程平台、教材或资料进行自主预学,梳理知识并发现问题"的符合程度得分为{b1_1_1}分,"课堂上能跟上老师的讲解,主动提问或参与讨论,每节课学有所获"的符合程度得分为{b1_1_2}分,"课后复习笔记及总结课堂教学相关知识"的符合程度得分为{b1_1_3}分,"除了阅读教材,还延伸阅读教师推荐的其他相关书目"的符合程度得分为{b1_1_4}分。
|
||||||
<i1_2,400,210>
|
<i1_2,400,250>
|
||||||
各环节学生学习主动性
|
各环节学生学习主动性
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -621,7 +621,7 @@ Z
|
||||||
思政课程各分项满意度评价的各项占比
|
思政课程各分项满意度评价的各项占比
|
||||||
|
|
||||||
该校学生对本校思想政治课程的教学内容满意度为{b2_1_6}%,对教学形式的满意度为{b2_1_7}%,对教学质量的满意度为{b2_1_8}%,对教学效果的满意度为{b2_1_9}%。
|
该校学生对本校思想政治课程的教学内容满意度为{b2_1_6}%,对教学形式的满意度为{b2_1_7}%,对教学质量的满意度为{b2_1_8}%,对教学效果的满意度为{b2_1_9}%。
|
||||||
<i2_6,400,170>
|
<i2_6,400,250>
|
||||||
思政课程各分项满意度
|
思政课程各分项满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -647,7 +647,7 @@ Z
|
||||||
专业课"两性一度"评价各项占比
|
专业课"两性一度"评价各项占比
|
||||||
|
|
||||||
在落实课堂教学改革、提高课程两性一度方面,该校学生对专业课程的评价如下:高阶性方面,"课程将知识、能力、素养进行了有机融合"的符合程度得分为{b2_2_1}分,"课程教学培养了我解决复杂问题的综合能力"的符合程度得分为{b2_2_2}分;创新性方面,"课程内容注重学科间的交叉与融合"的符合程度得分为{b2_2_3}分,"课程内容反映了学科发展的前沿内容"的符合程度得分为{b2_2_4}分,"课程教学内容重视实践与理论的结合"的符合程度得分为{b2_2_5}分;挑战度方面,"需要非常努力才能达到课程要求"的符合程度得分为{b2_2_6}分。
|
在落实课堂教学改革、提高课程两性一度方面,该校学生对专业课程的评价如下:高阶性方面,"课程将知识、能力、素养进行了有机融合"的符合程度得分为{b2_2_1}分,"课程教学培养了我解决复杂问题的综合能力"的符合程度得分为{b2_2_2}分;创新性方面,"课程内容注重学科间的交叉与融合"的符合程度得分为{b2_2_3}分,"课程内容反映了学科发展的前沿内容"的符合程度得分为{b2_2_4}分,"课程教学内容重视实践与理论的结合"的符合程度得分为{b2_2_5}分;挑战度方面,"需要非常努力才能达到课程要求"的符合程度得分为{b2_2_6}分。
|
||||||
<i2_9,400,170>
|
<i2_9,400,250>
|
||||||
学生对专业课"两性一度"评价
|
学生对专业课"两性一度"评价
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -699,7 +699,7 @@ Z
|
||||||
专业课教学方式评价各项占比
|
专业课教学方式评价各项占比
|
||||||
|
|
||||||
在推动"以学为中心、以教为主导"的课堂教学改革方面,该校学生对专业课程的教学方法使用情况评价如下,"课程以传统的教师讲授为主"的符合程度得分为{b2_3_1}分,"课堂中加入互动环节,注重学生参与(提问、讨论)"的符合程度得分为{b2_3_2}分,"提供案例或实例讨论"的符合程度得分为{b2_3_3}分,"采用小组合作的项目式教学方式"的符合程度得分为{b2_3_4}分。
|
在推动"以学为中心、以教为主导"的课堂教学改革方面,该校学生对专业课程的教学方法使用情况评价如下,"课程以传统的教师讲授为主"的符合程度得分为{b2_3_1}分,"课堂中加入互动环节,注重学生参与(提问、讨论)"的符合程度得分为{b2_3_2}分,"提供案例或实例讨论"的符合程度得分为{b2_3_3}分,"采用小组合作的项目式教学方式"的符合程度得分为{b2_3_4}分。
|
||||||
<i2_13,400,170>
|
<i2_13,400,250>
|
||||||
学生对专业课教学方式评价
|
学生对专业课教学方式评价
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -747,7 +747,7 @@ Z
|
||||||
体美劳教育满意度评价各项占比
|
体美劳教育满意度评价各项占比
|
||||||
|
|
||||||
在落实体美劳教育建设方面,该校学生评价体育教育的满意度为{b2_5_1}%,美育教育的满意度为{b2_5_2}%,劳动教育的满意度为{b2_5_3}%。
|
在落实体美劳教育建设方面,该校学生评价体育教育的满意度为{b2_5_1}%,美育教育的满意度为{b2_5_2}%,劳动教育的满意度为{b2_5_3}%。
|
||||||
<i2_18,400,170>
|
<i2_18,400,250>
|
||||||
体美劳教育满意度
|
体美劳教育满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -792,7 +792,7 @@ Z
|
||||||
学生发展活动满意度评价各项占比
|
学生发展活动满意度评价各项占比
|
||||||
|
|
||||||
该校参与过以上各项学生发展活动的学生,评价国际交流活动的满意度为{b2_6_6}%,学生社团活动的满意度为{b2_6_7}%,校园文化活动的满意度为{b2_6_8}%,创新创业活动的满意度为{b2_6_9}%,社会实践活动的满意度为{b2_6_10}%。
|
该校参与过以上各项学生发展活动的学生,评价国际交流活动的满意度为{b2_6_6}%,学生社团活动的满意度为{b2_6_7}%,校园文化活动的满意度为{b2_6_8}%,创新创业活动的满意度为{b2_6_9}%,社会实践活动的满意度为{b2_6_10}%。
|
||||||
<i2_23,400,170>
|
<i2_23,400,250>
|
||||||
各项学生发展活动满意度
|
各项学生发展活动满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -836,7 +836,7 @@ Z
|
||||||
本校实习实践满意度评价各项占比
|
本校实习实践满意度评价各项占比
|
||||||
|
|
||||||
在落实实践教学建设方面,该校学生评价本校实习实践内容的满意度为{b2_7_1}%,实习实践时间安排的满意度为{b2_7_2}%,实习实践指导情况的满意度为{b2_7_3}%,实习实践场地及设备的满意度为{b2_7_4}%。
|
在落实实践教学建设方面,该校学生评价本校实习实践内容的满意度为{b2_7_1}%,实习实践时间安排的满意度为{b2_7_2}%,实习实践指导情况的满意度为{b2_7_3}%,实习实践场地及设备的满意度为{b2_7_4}%。
|
||||||
<i2_27,400,170>
|
<i2_27,400,250>
|
||||||
本校实习实践各方面满意度
|
本校实习实践各方面满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -863,7 +863,7 @@ Z
|
||||||
学习收获评价各项占比
|
学习收获评价各项占比
|
||||||
|
|
||||||
在对在校学习所取得的收获方面,该校学生的评价如下:"分析问题、解决问题能力提升"的符合程度得分为{b2_8_1}分,"自主学习能力提升"的符合程度得分为{b2_8_2}分,"合作能力提升"的符合程度得分为{b2_8_3}分,"书面表达和沟通能力提升"的符合程度得分为{b2_8_4}分,"有能力规划未来工作生活"的符合程度得分为{b2_8_5}分。
|
在对在校学习所取得的收获方面,该校学生的评价如下:"分析问题、解决问题能力提升"的符合程度得分为{b2_8_1}分,"自主学习能力提升"的符合程度得分为{b2_8_2}分,"合作能力提升"的符合程度得分为{b2_8_3}分,"书面表达和沟通能力提升"的符合程度得分为{b2_8_4}分,"有能力规划未来工作生活"的符合程度得分为{b2_8_5}分。
|
||||||
<i2_30,400,170>
|
<i2_30,400,250>
|
||||||
学生对学习收获的评价
|
学生对学习收获的评价
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -907,7 +907,7 @@ Z
|
||||||
核心素养满意度评价各项占比
|
核心素养满意度评价各项占比
|
||||||
|
|
||||||
在自我核心素养提升方面,该校学生对"人文底蕴"的满意度为{b2_9_1}%,"科学精神"的满意度为{b2_9_2}%,"学会学习"的满意度为{b2_9_3}%,"健康生活"的满意度为{b2_9_4}%,"责任担当"的满意度为{b2_9_5}%,"实践创新"的满意度为{b2_9_6}%,"自我提升"的满意度为{b2_9_7}%。
|
在自我核心素养提升方面,该校学生对"人文底蕴"的满意度为{b2_9_1}%,"科学精神"的满意度为{b2_9_2}%,"学会学习"的满意度为{b2_9_3}%,"健康生活"的满意度为{b2_9_4}%,"责任担当"的满意度为{b2_9_5}%,"实践创新"的满意度为{b2_9_6}%,"自我提升"的满意度为{b2_9_7}%。
|
||||||
<i2_34,400,170>
|
<i2_34,400,250>
|
||||||
学生评价核心素养满意度
|
学生评价核心素养满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -956,7 +956,7 @@ Z
|
||||||
教学工作满意度评价各项占比
|
教学工作满意度评价各项占比
|
||||||
|
|
||||||
在教师教学工作方面,该校学生评价教师"师德师风及精神面貌"的满意度为{b3_1_1}%,"教学投入"的满意度为{b3_1_2}%,"依法依规,履行教师职责"的满意度为{b3_1_3}%,"关心爱护学生"的满意度为{b3_1_4}%。
|
在教师教学工作方面,该校学生评价教师"师德师风及精神面貌"的满意度为{b3_1_1}%,"教学投入"的满意度为{b3_1_2}%,"依法依规,履行教师职责"的满意度为{b3_1_3}%,"关心爱护学生"的满意度为{b3_1_4}%。
|
||||||
<i3_2,400,170>
|
<i3_2,400,250>
|
||||||
教学工作各方面满意度
|
教学工作各方面满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -1034,7 +1034,7 @@ Z
|
||||||
教师教学行为评价各项占比
|
教师教学行为评价各项占比
|
||||||
|
|
||||||
在教师教学能力方面,该校学生评价教师"重视立德树人,注重发挥课程育人的作用"的符合程度得分为{b3_3_1}分,"清楚地向学生解释了所学课程的目标和要求"的符合程度得分为{b3_3_2}分,"教学方法灵活多样,引导学生进行创造性思考"的符合程度得分为{b3_3_3}分,"课堂上激发学生的学习兴趣"的符合程度得分为{b3_3_4}分,"课后为学生提供辅导答疑"的符合程度得分为{b3_3_5}分。
|
在教师教学能力方面,该校学生评价教师"重视立德树人,注重发挥课程育人的作用"的符合程度得分为{b3_3_1}分,"清楚地向学生解释了所学课程的目标和要求"的符合程度得分为{b3_3_2}分,"教学方法灵活多样,引导学生进行创造性思考"的符合程度得分为{b3_3_3}分,"课堂上激发学生的学习兴趣"的符合程度得分为{b3_3_4}分,"课后为学生提供辅导答疑"的符合程度得分为{b3_3_5}分。
|
||||||
<i3_10,400,170>
|
<i3_10,400,250>
|
||||||
教师各方面教学行为评价
|
教师各方面教学行为评价
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -1079,7 +1079,7 @@ Z
|
||||||
本校体现"学生中心"和安全管理评价各项占比
|
本校体现"学生中心"和安全管理评价各项占比
|
||||||
|
|
||||||
在落实"以学生为中心"和安全管理方面,该校学生评价本校"学生服务能够做到"一站式"的服务与解决,体现了对学生的关怀"的符合程度得分为{b4_1_1}分,"重视实验实训的安全教育与管理"的符合程度得分为{b4_1_2}分,"任课教师积极参与学生活动"的符合程度得分为{b4_1_3}分,"校内学术讲座报告活动多"的符合程度得分为{b4_1_4}分。
|
在落实"以学生为中心"和安全管理方面,该校学生评价本校"学生服务能够做到"一站式"的服务与解决,体现了对学生的关怀"的符合程度得分为{b4_1_1}分,"重视实验实训的安全教育与管理"的符合程度得分为{b4_1_2}分,"任课教师积极参与学生活动"的符合程度得分为{b4_1_3}分,"校内学术讲座报告活动多"的符合程度得分为{b4_1_4}分。
|
||||||
<i4_2,400,170>
|
<i4_2,400,250>
|
||||||
本校体现"学生中心"和安全管理各方面评价
|
本校体现"学生中心"和安全管理各方面评价
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -1160,7 +1160,7 @@ Z
|
||||||
学生工作满意度评价各项占比
|
学生工作满意度评价各项占比
|
||||||
|
|
||||||
该校学生评价本校"心理健康教育/咨询"的满意度为{b4_3_1}%,"职业生涯规划和就业创业指导"的满意度为{b4_3_2}%,"班主任、辅导员工作"的满意度为{b4_3_3}%,"学业指导工作"的满意度为{b4_3_4}%,"重视家庭经济困难学生资助工作"的满意度为{b4_3_5}%。
|
该校学生评价本校"心理健康教育/咨询"的满意度为{b4_3_1}%,"职业生涯规划和就业创业指导"的满意度为{b4_3_2}%,"班主任、辅导员工作"的满意度为{b4_3_3}%,"学业指导工作"的满意度为{b4_3_4}%,"重视家庭经济困难学生资助工作"的满意度为{b4_3_5}%。
|
||||||
<i4_9,400,170>
|
<i4_9,400,250>
|
||||||
各项学生工作满意度
|
各项学生工作满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
@ -1204,7 +1204,7 @@ Z
|
||||||
资源条件满意度评价各项占比
|
资源条件满意度评价各项占比
|
||||||
|
|
||||||
在落实条件保障方面,该校学生评价本校"教室及教学设备"的满意度为{b4_4_1}%,"实验实训室条件"的满意度为{b4_4_2}%,"图书馆资源"的满意度为{b4_4_3}%,"网络资源"的满意度为{b4_4_4}%,"体育文化等基础设施"的满意度为{b4_4_5}%,"住宿条件"的满意度为{b4_4_6}%。
|
在落实条件保障方面,该校学生评价本校"教室及教学设备"的满意度为{b4_4_1}%,"实验实训室条件"的满意度为{b4_4_2}%,"图书馆资源"的满意度为{b4_4_3}%,"网络资源"的满意度为{b4_4_4}%,"体育文化等基础设施"的满意度为{b4_4_5}%,"住宿条件"的满意度为{b4_4_6}%。
|
||||||
<i4_13,400,170>
|
<i4_13,400,250>
|
||||||
资源条件各方面满意度
|
资源条件各方面满意度
|
||||||
|
|
||||||
注:图表中数值为计算所得平均分数。
|
注:图表中数值为计算所得平均分数。
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
<html>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<head>
|
||||||
|
<script src="http://gssn.fw121.com/js/jquery-3.2.1.min.js"></script>
|
||||||
|
<script src="./echarts.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
|
||||||
|
<div id="rhEcharts" style="height:600px;width:1050px"></div>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
var rhEcharts = null;
|
||||||
|
$(function () {
|
||||||
|
// 基于准备好的dom,初始化echarts实例
|
||||||
|
rhEcharts = echarts.init(document.getElementById('rhEcharts'));
|
||||||
|
});
|
||||||
|
function showImg(data) {
|
||||||
|
// var option = {
|
||||||
|
// xAxis: {
|
||||||
|
// type: 'category',
|
||||||
|
// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
||||||
|
// },
|
||||||
|
// yAxis: {
|
||||||
|
// type: 'value'
|
||||||
|
// },
|
||||||
|
// series: [{
|
||||||
|
// data: [820, 932, 901, 934, 1290, 1330, 1320],
|
||||||
|
// type: 'line'
|
||||||
|
// }]
|
||||||
|
// };
|
||||||
|
// rhEcharts.setOption(option);
|
||||||
|
rhEcharts.setOption(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function returnEchartImg() {
|
||||||
|
var url = rhEcharts.getDataURL();
|
||||||
|
//清空绘画内容,清空后实例可用
|
||||||
|
rhEcharts.clear();
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue