OpenXml中使用FontTablePart类保存Word文档字体表,存储和管理Word文档中使用的字体信息。采用解压缩软件打开Word文档,其内的word文件夹中有独立的fontTable.xml文件,用于保存文档中使用的字体信息,如下图所示:

FontTablePart类的Fonts属性保存字体集合,其命名空间及类型为DocumentFormat.OpenXml. Wordprocessing.Fonts,通过调用fonts.Elements函数获取DocumentFormat.OpenXml. Wordprocessing. Font类型集合,Font类保存具体的字体信息,其主要属性如下所示:
| 序号 | 名称 | 说明 |
|---|---|---|
| 1 | Name | 字体名称 ,如Arial、Times New Roman |
| 2 | FontFamily | 字体族,如auto(自动)、roman(罗马字体) |
| 3 | FontCharSet | 字符集标识 |
| 4 | FontSignature | 字体签名 |
| 5 | AltName | 替代字体名称 |
最后是代码示例及运行效果,第一次读取文档字体表时只有3种字体,接着在word文档中重新设置了几种字体,再次读取字体表时则会显示新设置的字体名称。
csharp
using (WordprocessingDocument document = WordprocessingDocument.Open(txtFilePath.Text, false))
{
FontTablePart fPart = document.MainDocumentPart.FontTablePart;
if (fPart == null)
{
MessageBox.Show("Word文档不包含字体表");
return;
}
var fonts = fPart.Fonts;
if (fonts == null || fonts.Count()<=0)
{
MessageBox.Show("字体表为空");
return;
}
// 遍历所有字体定义
foreach (DocumentFormat.OpenXml.Wordprocessing.Font font in fonts.Elements<DocumentFormat.OpenXml.Wordprocessing.Font>())
{
ListViewItem lvi = new ListViewItem(Convert.ToString(lstFonts.Items.Count + 1));
lvi.SubItems.Add(font.Name);
lvi.SubItems.Add(font.FontCharSet.Val);
lvi.SubItems.Add(font.FontFamily.Val);
lstFonts.Items.Add(lvi);
}
}


参考文献
1\]https://github.com/dotnet/Open-XML-SDK \[2\]https://learn.microsoft.com/zh-cn/office/open-xml/open-xml-sdk \[3\]https://learn.microsoft.com/zh-cn/dotnet/api/documentformat.openxml.wordprocessing.style?view=openxml-3.0.1 \[4\]https://blog.csdn.net/i042416/article/details/126228816