解决word生成目录-页码-字体问题

1.word独立生成目录页码

2.word从正文第一页开始自动生成目录

3.word自动生成目录,出现部分文字后面省略号疏密不一致的问题

1.word独立生成目录页码

(1). 一般而言,我们写好的文档会是这样的
在这里插入图片描述
(2). 给文档的各级标题添加 标题样式 ,根据需要设置的标题等级依次选用不同的样式。
首先添加”一级标题“(也可以直接在段落中设置)。在这里插入图片描述
(3). 然后按添加一级标题的方法添加”二级标题“、三级标题等。
在这里插入图片描述
(4). 光标定位到封皮空白处,选择 页面布局 – 分隔符 —下一页,生成一页空白在这里插入图片描述
(5). 在正文第一页,双击页脚,取消“链接到前一条页眉”,然后选择页码 – 设置页码格式
在这里插入图片描述
在这里插入图片描述
(6). 然后,页码–页面底端–确定
在这里插入图片描述
(7).生成页码如下图所示
在这里插入图片描述

2.word从正文第一页开始自动生成目录

(1).目录生成有两种,一种是直接选择现有的模板
在这里插入图片描述
(2).效果为:
在这里插入图片描述
(3).但我们经常遇到的目录级别不止三层,需要自定义生成的目录级别,但目录二字无法生成,所以需要先写上(不写的话不利于后面的排版),然后选择 引用 – 目录 – 插入目录:
在这里插入图片描述
(4).通过预览窗口可以看到效果,通过常规功能区可设置格式,一般都为 来自模板 ,并且选择需要显示的目录数
在这里插入图片描述
(5).效果为:
在这里插入图片描述
(6).在这里,一级标题为 加粗体 ,如果需要修改,点击 修改 按钮
在这里插入图片描述
(7).在这里我们选择将加粗标记去除掉就好了
在这里插入图片描述

3.word自动生成目录,出现部分文字后面省略号疏密不一致的问题

在这里插入图片描述
这是由于省略号被设置成了宋体或者其他字体,导致省略号是中文习惯,间隔偏大。

选中目录,将其设置成Times New Roman即可解决问题。
在这里插入图片描述

是的,您是正确的,对不起给您带来了困扰。NPOI 2.4.1版本的`XWPFDocument`类没有提供`GetParagraphsOnPage`方法。以下是另一种实现方式,可以获取指定页码的段落列表: ```csharp using NPOI.XWPF.UserModel; using NPOI.OpenXmlFormats.Wordprocessing; using System.Collections.Generic; using System.IO; using System.Linq; public class WordHelper { public static List<XWPFParagraph> GetParagraphsOnPage(XWPFDocument doc, int pageNumber) { List<XWPFParagraph> result = new List<XWPFParagraph>(); // 遍历文档中的所有段落,判断它们所在页码是否等于指定页码 int pageIndex = 1; foreach (var para in doc.Paragraphs) { if (IsParagraphOnPage(para, pageIndex, pageNumber)) { result.Add(para); } // 如果当前段落是分页符,则页码加1 if (para.IsPageBreak) { pageIndex++; } } return result; } private static bool IsParagraphOnPage(XWPFParagraph para, int pageIndex, int targetPageIndex) { // 如果段落所在页码等于目标页码,则返回true if (GetParagraphPageIndex(para, pageIndex) == targetPageIndex) { return true; } // 如果段落所在页码大于目标页码,则返回false if (GetParagraphPageIndex(para, pageIndex) > targetPageIndex) { return false; } // 如果当前段落是最后一个段落,则返回false if (para == para.Document.Paragraphs.LastOrDefault()) { return false; } // 如果当前段落和下一个段落跨页,则返回false if (GetParagraphPageIndex(para, pageIndex) != GetParagraphPageIndex(para.Document.Paragraphs[para.Document.Paragraphs.IndexOf(para) + 1], pageIndex)) { return false; } // 否则递归判断下一个段落 return IsParagraphOnPage(para.Document.Paragraphs[para.Document.Paragraphs.IndexOf(para) + 1], pageIndex, targetPageIndex); } private static int GetParagraphPageIndex(XWPFParagraph para, int startPageIndex) { // 计算指定段落所在页码 int pageIndex = startPageIndex; foreach (var run in para.Runs) { if (run is XWPFRun) { CT_R ctRun = (CT_R)run.GetCTR().Clone(); if (ctRun.Items != null && ctRun.Items.Any(i => i is CT_PageNumber)) { int pageNumber = int.Parse(ctRun.Items.First(i => i is CT_PageNumber).InnerText); if (pageNumber > pageIndex) { pageIndex = pageNumber; } } } } return pageIndex; } } // 使用示例 XWPFDocument doc = new XWPFDocument(new FileStream("your_word_file.docx", FileMode.Open)); List<XWPFParagraph> pageParagraphs = WordHelper.GetParagraphsOnPage(doc, 2); List<XWPFParagraph> copiedParagraphs = new List<XWPFParagraph>(); foreach (XWPFParagraph para in pageParagraphs) { copiedParagraphs.Add(para); } XWPFParagraph lastPara = doc.GetParagraphArray(doc.Paragraphs.Count - 1); foreach (XWPFParagraph para in copiedParagraphs) { // ... } doc.Write(new FileStream("your_modified_word_file.docx", FileMode.Create)); ``` 以上代码通过遍历文档中的所有段落,并逐个判断段落所在页码是否等于指定页码,从而获取指定页码的段落列表。如果一个段落跨多页,需要对该段落进行递归判断。其中,`GetParagraphPageIndex`方法用于计算指定段落所在页码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值