diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/DonghuanReportExportController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/DonghuanReportExportController.java index fb570a6..fb03cf6 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/DonghuanReportExportController.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/DonghuanReportExportController.java @@ -61,9 +61,12 @@ import java.util.zip.ZipOutputStream; * + 仿宋_GB2312 16pt 浅蓝副标题 + 封面签署表(初审/校对/审核/巡检日期) *
  • 标题:报告标题 方正小标宋简体 22pt(二号)不加粗;一级标题:黑体 16pt(三号); * 二级标题:仿宋_GB2312 16pt(三号)
  • - *
  • 章节编号(与模板一致):标题使用 Word 多级自动编号 —— 一级「一、」、二级「(一)」、 - * 三级「1.」、四级「(1)」(见 {@link #createHeadingNumbering}),标题文字里不再写手写序号; - * 各级标题带 outlineLvl 大纲级别,Word 导航窗格与「引用 → 目录」可直接生成目录
  • + *
  • 段落样式:正文/表格用「正文」(Normal),章节标题用「标题 2 / 标题 3 …」 + * (标题 1 留出不用,给报告标题或上层文档);标题样式定义在 + * {@code report/wordparts/styles.xml}(heading 1~5),自带大纲级别, + * 导航窗格与「引用 → 目录」可直接生成目录。标题同时使用 Word 多级自动编号 —— 一级「一、」、 + * 二级「(一)」、三级「1.」、四级「(1)」(见 {@link #createHeadingNumbering}), + * 编号级别不随标题样式级别变化,标题文字里也不再写手写序号
  • *
  • 表格宽度:通篇统一 {@link #TABLE_W} = 8844 twips(= 版心宽,与模板一致), * 列宽由 {@code COLS_*} 常量按总和 8844 分配,tblLayout=fixed、表格居中, * 保证所有表格左右边界完全对齐且不越出版心
  • @@ -641,6 +644,19 @@ public class DonghuanReportExportController extends BaseController { STNumberFormat.DECIMAL, STNumberFormat.DECIMAL}; /** 各级编号字体(模板:一级黑体,其余仿宋_GB2312) */ private static final String[] HEADING_NUM_FONT = {FONT_HEAD, FONT_BODY, FONT_BODY, FONT_BODY}; + /** + * 各级标题使用的段落样式 id:定义在 {@code report/wordparts/styles.xml}, + * 样式名沿用 Word 内置的 heading 1~5(中文界面即「标题 1」~「标题 5」)。 + *

    + * 注意:标题从「标题 2」开始,「标题 1」留给报告标题/上层文档不使用, + * 因此样式与大纲级别都比编号级别高一级(见 {@link #HEADING_LEVEL_OFFSET})。 + */ + private static final String[] HEADING_STYLE_ID = {"Heading2", "Heading3", "Heading4", "Heading5"}; + /** + * 标题级别起始偏移:标题从「标题 2」开始(一级留出),所以段落样式、大纲级别 = 编号级别 + 1; + * 编号本身仍是一级「一、」、二级「(一)」…(编号级别不变,字体字号也不变)。 + */ + private static final int HEADING_LEVEL_OFFSET = 1; /** * 创建章节标题的多级自动编号定义(与机器人巡检报告模板一致),返回 numId。 @@ -682,7 +698,8 @@ public class DonghuanReportExportController extends BaseController { } /** - * 章节标题段落:多级自动编号 + 大纲级别;一级标题黑体三号,二级及以下仿宋_GB2312 三号(与模板一致)。 + * 章节标题段落:挂「标题 1 / 标题 2 …」段落样式 + 多级自动编号 + 大纲级别; + * 一级标题黑体三号,二级及以下仿宋_GB2312 三号(与模板一致)。 * * @param level 编号级别,取 {@link #LVL_1} / {@link #LVL_2} / {@link #LVL_3} / {@link #LVL_4} */ @@ -690,6 +707,8 @@ public class DonghuanReportExportController extends BaseController { BigInteger numId, int before, int after) { String font = (level == LVL_1) ? FONT_HEAD : FONT_BODY; XWPFParagraph p = addPara(doc, text, font, SZ_HEAD_THIRD, false, false, null, null, before, after); + // 段落样式(正文=默认 Normal,标题=标题 1/2/3/4),与模板一样通过样式体现层级 + p.setStyle(HEADING_STYLE_ID[Math.min(level, HEADING_STYLE_ID.length - 1)]); setHeadingNumbering(p, level, numId); setFirstLineIndentOneChar(p, SZ_HEAD_THIRD); // 标题首行缩进 1 字符 setKeepNext(p); @@ -704,8 +723,9 @@ public class DonghuanReportExportController extends BaseController { ilvl.setVal(BigInteger.valueOf(level)); CTDecimalNumber numIdNum = numPr.isSetNumId() ? numPr.getNumId() : numPr.addNewNumId(); numIdNum.setVal(numId); + // 大纲级别 = 编号级别 + 偏移(标题从「标题 2」开始,故 +1),与段落样式级别保持一致 CTDecimalNumber outlineLvl = pPr.isSetOutlineLvl() ? pPr.getOutlineLvl() : pPr.addNewOutlineLvl(); - outlineLvl.setVal(BigInteger.valueOf(level)); + outlineLvl.setVal(BigInteger.valueOf(level + HEADING_LEVEL_OFFSET)); } /** diff --git a/inspect-main/inspect-main-task/src/main/resources/report/wordparts/styles.xml b/inspect-main/inspect-main-task/src/main/resources/report/wordparts/styles.xml index 3eb86c3..f44e33a 100644 --- a/inspect-main/inspect-main-task/src/main/resources/report/wordparts/styles.xml +++ b/inspect-main/inspect-main-task/src/main/resources/report/wordparts/styles.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file