如何使用.NET Xceed DocX获取Word文档字体信息并应用到新增项目符号列表
如何使用.NET Xceed DocX获取Word文档字体信息并应用到新增项目符号列表
嘿,我刚好碰到过和你一模一样的需求!问题出在你现在创建的项目符号列表用了DocX的默认格式,咱们只需要先提取原段落(或者文档默认)的字体样式,再把这些样式应用到新增的列表项上就行,具体操作如下:
第一步:提取原段落或文档的字体格式
首先从包含{{Instructions}}的目标段落读取字体信息,如果段落本身没设置特定字体,就 fallback 到文档的默认字体配置:
// 获取目标段落的格式 var paraFormat = paragraph.Format; // 优先用段落的字体,没有则用文档默认 var fontFamily = paraFormat.FontFamily ?? document.DefaultFontFamily; var fontSize = paraFormat.Size ?? document.DefaultFontSize; var isBold = paraFormat.Bold; var isItalic = paraFormat.Italic; var fontColor = paraFormat.Color;
第二步:创建自定义Formatting对象
把刚才获取到的字体信息封装成Formatting对象,这样就能把样式传递给列表项了:
var listItemFormat = new Formatting { FontFamily = fontFamily, Size = fontSize, Bold = isBold, Italic = isItalic, Color = fontColor };
第三步:应用格式到项目符号列表
在添加列表项的时候,使用带Formatting参数的重载方法,把自定义格式传进去即可。
修改后的完整代码如下:
var result = new MemoryStream(); using (DocX document = DocX.Load(stream)) { var paragraphs = document.Paragraphs; foreach (var paragraph in paragraphs) { if (paragraph.Text.Contains("{{Instructions}}")) { // 提取段落/文档的字体格式 var paraFormat = paragraph.Format; var fontFamily = paraFormat.FontFamily ?? document.DefaultFontFamily; var fontSize = paraFormat.Size ?? document.DefaultFontSize; var listItemFormat = new Formatting { FontFamily = fontFamily, Size = fontSize, Bold = paraFormat.Bold, Italic = paraFormat.Italic, Color = paraFormat.Color }; var bulletedList = document.AddList(null, 0, ListItemType.Bulleted); // 添加带格式的列表项 document.AddListItem(bulletedList, "Bullet Point 1", listItemFormat); document.AddListItem(bulletedList, "Bullet Point 2", listItemFormat); document.AddListItem(bulletedList, "Bullet Point 3", listItemFormat); paragraph.InsertListAfterSelf(bulletedList); paragraph.RemoveText(0); break; } } document.SaveAs(result); }
这样一来,新增的项目符号列表就会和原段落(或者文档默认)的字体样式完全一致啦!如果还有其他样式需要继承(比如下划线、对齐方式),直接在Formatting对象里补充对应的属性就行。
备注:内容来源于stack exchange,提问作者Wanda Stransky




