文件属性特殊字符优化,导出手册附件编号优化

This commit is contained in:
yujh 2025-03-28 11:35:54 +08:00
parent f244da16ec
commit 8d0e7fbcb0
3 changed files with 67 additions and 2 deletions

View File

@ -61,6 +61,8 @@ import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.util.List;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.sini.com.spire.doc.documents.HorizontalAlignment.*;
@ -236,10 +238,10 @@ public class OutputWordUtil {
PALRepositoryModel repositoryModel = PALRepositoryQueryAPIManager.getInstance().queryPalRepositoryModelByPalId(repositoryId);
DCContext dcContextModel = null;
List<UpfileModel> search = upFileDao.searchByRepositoryId(repositoryModel.getId(), "f");
//读取模型附件插入手册中文档对象
if (search != null && search.size() > 0) {
//插入前附件名先排序先排序
sortFilesByNumber(search);
//附件如果为空不插入附件标题
CharacterFormat format4 = new CharacterFormat();
//创建字体格式
@ -423,6 +425,8 @@ public class OutputWordUtil {
boolean isPPT = false;
//如果为PPT,则生成PPT手册
if (search != null && search.size() > 0) {
//插入前附件名先排序先排序
sortFilesByNumber(search);
long b1 = System.currentTimeMillis();
// 复制附件
for (UpfileModel upfileModel : search) {
@ -494,6 +498,8 @@ public class OutputWordUtil {
if (search != null && search.size() > 0) {
//插入前附件名先排序先排序
sortFilesByNumber(search);
long b1 = System.currentTimeMillis();
// 复制附件
for (UpfileModel upfileModel : search) {
@ -1685,6 +1691,8 @@ public class OutputWordUtil {
DCContext dcContextModel = null;
UserContext userContext = DispatcherRequest.getUserContext();
if (search != null && search.size() > 0) {
//插入前附件名先排序先排序
sortFilesByNumber(search);
// 复制附件
for (UpfileModel upfileModel : search) {
DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE);
@ -2814,4 +2822,25 @@ public class OutputWordUtil {
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;
}
}
}

View File

@ -1929,6 +1929,40 @@ public class CoeProcessLevelUtil {
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("&lt;");
break;
case '>':
result.append("&gt;");
break;
case '&':
result.append("&amp;");
break;
case '"':
result.append("&quot;");
break;
case '\'':
result.append("&#039;");
break;
default:
result.append(c);
}
}
return result.toString();
}
/**
* 批量调整模型的文件/形状默认属性至自定义属性中
*/

View File

@ -2901,6 +2901,8 @@ public class CoeProcessLevelWeb extends ActionWeb {
inputValue = inputValue.replaceAll("'", "&apos;");
inputValue = inputValue.replaceAll("\"", "&quot;");
//处理特殊字符
inputValue = CoeProcessLevelUtil.escapeHtml(inputValue);
boolean isRequired = attributeModel.getIsRequired();
String desc = attributeModel.getDesc();