|
|
|
@ -61,9 +61,12 @@ import java.util.zip.ZipOutputStream; |
|
|
|
* + 仿宋_GB2312 16pt 浅蓝副标题 + 封面签署表(初审/校对/审核/巡检日期)</li> |
|
|
|
* <li>标题:报告标题 方正小标宋简体 22pt(二号)不加粗;一级标题:黑体 16pt(三号); |
|
|
|
* 二级标题:仿宋_GB2312 16pt(三号)</li> |
|
|
|
* <li><b>章节编号(与模板一致):标题使用 Word 多级自动编号 —— 一级「一、」、二级「(一)」、 |
|
|
|
* 三级「1.」、四级「(1)」(见 {@link #createHeadingNumbering}),标题文字里不再写手写序号; |
|
|
|
* 各级标题带 outlineLvl 大纲级别,Word 导航窗格与「引用 → 目录」可直接生成目录</b></li> |
|
|
|
* <li><b>段落样式:正文/表格用「正文」(Normal),章节标题用「标题 2 / 标题 3 …」 |
|
|
|
* (标题 1 留出不用,给报告标题或上层文档)</b>;标题样式定义在 |
|
|
|
* {@code report/wordparts/styles.xml}(heading 1~5),自带大纲级别, |
|
|
|
* 导航窗格与「引用 → 目录」可直接生成目录。标题同时使用 Word 多级自动编号 —— 一级「一、」、 |
|
|
|
* 二级「(一)」、三级「1.」、四级「(1)」(见 {@link #createHeadingNumbering}), |
|
|
|
* 编号级别不随标题样式级别变化,标题文字里也不再写手写序号</li> |
|
|
|
* <li><b>表格宽度:通篇统一 {@link #TABLE_W} = 8844 twips(= 版心宽,与模板一致), |
|
|
|
* 列宽由 {@code COLS_*} 常量按总和 8844 分配,tblLayout=fixed、表格居中, |
|
|
|
* 保证所有表格左右边界完全对齐且不越出版心</b></li> |
|
|
|
@ -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」)。 |
|
|
|
* <p> |
|
|
|
* 注意:标题<b>从「标题 2」开始</b>,「标题 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)); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|