Browse Source

行高

ecss-tx
han\hanst 1 month ago
parent
commit
599e061671
  1. 28
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java

28
src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java

@ -4965,17 +4965,33 @@ public class CoDelExcelServiceImpl implements CoDelExcelService {
* @return 行数
*/
private int calculateLineCount(String content) {
return calculateLineCount(content, 45);
}
/**
* 计算文本在单元格中实际占用的行数同时考虑显式换行符和因列宽不足导致的自动折行
*
* @param content 单元格内容
* @param maxCharsPerLine 每行可容纳的估算字符数中文字符按2个宽度计算
* @return 实际显示行数
*/
private int calculateLineCount(String content, int maxCharsPerLine) {
if (content == null || content.isEmpty()) {
return 1;
}
// 计算换行符数量 + 1 = 行数
int lineCount = 1;
for (int i = 0; i < content.length(); i++) {
if (content.charAt(i) == '\n') {
lineCount++;
int totalLines = 0;
String[] segments = content.split("\n", -1);
for (String segment : segments) {
// 中文字符宽度约为英文的2倍用加权字符数估算视觉宽度
int visualWidth = 0;
for (char c : segment.toCharArray()) {
visualWidth += (c > 0x7F) ? 2 : 1;
}
// 至少占1行超出列宽则向上取整计算折行数
int wrappedLines = (int) Math.ceil((double) visualWidth / maxCharsPerLine);
totalLines += Math.max(1, wrappedLines);
}
return lineCount;
return Math.max(1, totalLines);
}
/**

Loading…
Cancel
Save