文件属性特殊字符优化,导出手册附件编号优化
This commit is contained in:
parent
f244da16ec
commit
8d0e7fbcb0
@ -61,6 +61,8 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static com.sini.com.spire.doc.documents.HorizontalAlignment.*;
|
import static com.sini.com.spire.doc.documents.HorizontalAlignment.*;
|
||||||
|
|
||||||
@ -236,10 +238,10 @@ public class OutputWordUtil {
|
|||||||
PALRepositoryModel repositoryModel = PALRepositoryQueryAPIManager.getInstance().queryPalRepositoryModelByPalId(repositoryId);
|
PALRepositoryModel repositoryModel = PALRepositoryQueryAPIManager.getInstance().queryPalRepositoryModelByPalId(repositoryId);
|
||||||
DCContext dcContextModel = null;
|
DCContext dcContextModel = null;
|
||||||
List<UpfileModel> search = upFileDao.searchByRepositoryId(repositoryModel.getId(), "f");
|
List<UpfileModel> search = upFileDao.searchByRepositoryId(repositoryModel.getId(), "f");
|
||||||
|
|
||||||
//读取模型附件插入手册中文档对象
|
//读取模型附件插入手册中文档对象
|
||||||
if (search != null && search.size() > 0) {
|
if (search != null && search.size() > 0) {
|
||||||
|
//插入前,附件名先排序先排序
|
||||||
|
sortFilesByNumber(search);
|
||||||
//附件如果为空,不插入附件标题
|
//附件如果为空,不插入附件标题
|
||||||
CharacterFormat format4 = new CharacterFormat();
|
CharacterFormat format4 = new CharacterFormat();
|
||||||
//创建字体格式
|
//创建字体格式
|
||||||
@ -423,6 +425,8 @@ public class OutputWordUtil {
|
|||||||
boolean isPPT = false;
|
boolean isPPT = false;
|
||||||
//如果为PPT,则生成PPT手册
|
//如果为PPT,则生成PPT手册
|
||||||
if (search != null && search.size() > 0) {
|
if (search != null && search.size() > 0) {
|
||||||
|
//插入前,附件名先排序先排序
|
||||||
|
sortFilesByNumber(search);
|
||||||
long b1 = System.currentTimeMillis();
|
long b1 = System.currentTimeMillis();
|
||||||
// 复制附件
|
// 复制附件
|
||||||
for (UpfileModel upfileModel : search) {
|
for (UpfileModel upfileModel : search) {
|
||||||
@ -494,6 +498,8 @@ public class OutputWordUtil {
|
|||||||
|
|
||||||
|
|
||||||
if (search != null && search.size() > 0) {
|
if (search != null && search.size() > 0) {
|
||||||
|
//插入前,附件名先排序先排序
|
||||||
|
sortFilesByNumber(search);
|
||||||
long b1 = System.currentTimeMillis();
|
long b1 = System.currentTimeMillis();
|
||||||
// 复制附件
|
// 复制附件
|
||||||
for (UpfileModel upfileModel : search) {
|
for (UpfileModel upfileModel : search) {
|
||||||
@ -1685,6 +1691,8 @@ public class OutputWordUtil {
|
|||||||
DCContext dcContextModel = null;
|
DCContext dcContextModel = null;
|
||||||
UserContext userContext = DispatcherRequest.getUserContext();
|
UserContext userContext = DispatcherRequest.getUserContext();
|
||||||
if (search != null && search.size() > 0) {
|
if (search != null && search.size() > 0) {
|
||||||
|
//插入前,附件名先排序先排序
|
||||||
|
sortFilesByNumber(search);
|
||||||
// 复制附件
|
// 复制附件
|
||||||
for (UpfileModel upfileModel : search) {
|
for (UpfileModel upfileModel : search) {
|
||||||
DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE);
|
DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE);
|
||||||
@ -2814,4 +2822,25 @@ public class OutputWordUtil {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void sortFilesByNumber(List<UpfileModel> fileList) {
|
||||||
|
fileList.sort(
|
||||||
|
Comparator.comparing(
|
||||||
|
OutputWordUtil::extractLeadingNumber,
|
||||||
|
Comparator.nullsLast(Comparator.naturalOrder())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// 精准提取附件后的第一个连续数字
|
||||||
|
private static Integer extractLeadingNumber(UpfileModel file) {
|
||||||
|
// 增强版正则表达式(核心改进点)
|
||||||
|
Pattern FILE_NUMBER_PATTERN =
|
||||||
|
Pattern.compile("^附件\\s*(\\d+)\\s*[::、,_\\-]"); // ^开头匹配防止中途匹配
|
||||||
|
try {
|
||||||
|
Matcher matcher = FILE_NUMBER_PATTERN.matcher(file.getFileName());
|
||||||
|
return matcher.find() ? Integer.parseInt(matcher.group(1)) : null;
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1929,6 +1929,40 @@ public class CoeProcessLevelUtil {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转义文本中的特殊字符
|
||||||
|
* @param input
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String escapeHtml(String input) {
|
||||||
|
if (input == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
for (char c : input.toCharArray()) {
|
||||||
|
switch (c) {
|
||||||
|
case '<':
|
||||||
|
result.append("<");
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
result.append(">");
|
||||||
|
break;
|
||||||
|
case '&':
|
||||||
|
result.append("&");
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
result.append(""");
|
||||||
|
break;
|
||||||
|
case '\'':
|
||||||
|
result.append("'");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
result.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量调整模型的文件/形状默认属性至自定义属性中
|
* 批量调整模型的文件/形状默认属性至自定义属性中
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -2901,6 +2901,8 @@ public class CoeProcessLevelWeb extends ActionWeb {
|
|||||||
|
|
||||||
inputValue = inputValue.replaceAll("'", "'");
|
inputValue = inputValue.replaceAll("'", "'");
|
||||||
inputValue = inputValue.replaceAll("\"", """);
|
inputValue = inputValue.replaceAll("\"", """);
|
||||||
|
//处理特殊字符
|
||||||
|
inputValue = CoeProcessLevelUtil.escapeHtml(inputValue);
|
||||||
boolean isRequired = attributeModel.getIsRequired();
|
boolean isRequired = attributeModel.getIsRequired();
|
||||||
String desc = attributeModel.getDesc();
|
String desc = attributeModel.getDesc();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user