You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用.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

火山引擎 最新活动