如何使用NPOI移除Word生成过程中段落间的多余行间距
你遇到的段落多余间距问题主要由两个常见配置遗漏导致:一是行间距规则使用了AUTO模式,会根据Word默认规则自动补充间距;二是没有关闭Word默认开启的「段落与文档网格对齐」设置,哪怕手动设了段前/段后间距为0,也会生成额外留白。
修改后的配置代码
private static void SetParagraphRunSettings(XWPFRun paragraphRun) { paragraphRun.FontSize = 7; paragraphRun.FontFamily = "Courier New"; paragraphRun.IsBold = true; } private static void SetParagraphSettings(XWPFParagraph paragraph, string stepComment) { if (stepComment.Contains("Landscate -")) { paragraph.IndentationFirstLine = 0; paragraph.FirstLineIndent = 0; paragraph.IndentationLeft = 1; paragraph.IndentationHanging = 1; } paragraph.Alignment = ParagraphAlignment.LEFT; paragraph.IndentationRight = 0; // 显式关闭所有段前段后间距,包含按行、按磅两种计算规则 paragraph.SpacingBefore = 0; paragraph.SpacingAfter = 0; paragraph.SpacingBeforeLines = 0; paragraph.SpacingAfterLines = 0; // 用SINGLE规则固定单倍行距,替代AUTO避免自动扩容 paragraph.setSpacingBetween(1, LineSpacingRule.SINGLE); // 关闭段落对齐文档网格的默认配置,消除额外留白 var pPr = paragraph.GetCTP().IsSetPPr() ? paragraph.GetCTP().pPr : paragraph.GetCTP().AddNewPPr(); var snapToGrid = pPr.IsSetSnapToGrid() ? pPr.snapToGrid : pPr.AddNewSnapToGrid(); snapToGrid.val = ST_OnOff.Off; }
额外检查项
- 如果你是基于现有Word模板生成文件,需要提前把模板默认段落样式的段前、段后间距设为0,同时关闭对齐网格选项,避免新段落继承默认样式
- 确认文本追加逻辑是在同一个段落内新增
XWPFRun,而非每添加一行文本就新建一个XWPFParagraph,避免不必要的段落分隔间距
内容的提问来源于stack exchange,提问作者Juan Carlos Torres
相关产品推荐
相关产品推荐

