feat(report): 优化报告生成工具中的文档处理功能

- 在Docx4jUtil中添加enableUpdateFieldsOnOpen方法,确保Word打开时自动刷新页码等域
- 移除ItemAnchorAssembler中不必要的导入包,精简代码结构
- 重构谐波数据处理逻辑,添加谐波衍生值计算功能
- 实现固定占位符替换机制,支持谐波电压和功率表的动态填充
- 优化表格结构分离逻辑,使用空段落而非可见标题分隔多表
- 增强错误范围处理,移除单位后缀并优化谐波电流计算逻辑
- 添加全面的单元测试验证各种谐波检测场景的功能正确性
This commit is contained in:
2026-07-07 22:49:46 +08:00
parent 75b19eb6ab
commit 7a8071c9d7
14 changed files with 1322 additions and 72 deletions

View File

@@ -8,6 +8,7 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.docx4j.XmlUtils;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.DocumentSettingsPart;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.*;
import org.docx4j.wml.TcPrInner.GridSpan;
@@ -31,6 +32,27 @@ import java.util.Map;
@Slf4j
public class Docx4jUtil {
/**
* 让 Word 打开文档时自动刷新 PAGE / NUMPAGES 等域,避免动态插表后页码显示旧值。
*/
public static void enableUpdateFieldsOnOpen(WordprocessingMLPackage wordPackage) throws Exception {
if (wordPackage == null || wordPackage.getMainDocumentPart() == null) {
return;
}
DocumentSettingsPart settingsPart = wordPackage.getMainDocumentPart().getDocumentSettingsPart(true);
CTSettings settings = settingsPart.getContents();
if (settings == null) {
settings = new CTSettings();
settingsPart.setJaxbElement(settings);
}
BooleanDefaultTrue updateFields = settings.getUpdateFields();
if (updateFields == null) {
updateFields = new BooleanDefaultTrue();
settings.setUpdateFields(updateFields);
}
updateFields.setVal(Boolean.TRUE);
}
/**
* 创建标题
*