如何使用C#在Word中找到粗体字的字体名称

时间:2018-12-13 12:36:07

标签: c# xml fonts ms-word

我正在尝试在许多docx文件中获取所有使用的字体和粗体文本的字体。

现在我可以通过解压缩docx文件获取所有使用的字体并读取fontTable.xml。

select f.uid, u.name
from fav_dessert f 
inner join user u on f.uid=u.uid
inner join (
select dessert_id
from fav_dessert 
group by dessert_id 
having count(distinct uid)>1
) t on t.dessert_id = f.dessert_id 

但是我不知道如何获得粗体字的字体。 我尝试解压缩docx文件并在document.xml中获得粗体文本的字体,但是找不到document.xml和fontTable.xml之间的连接。

在fontTable.xml中,我可以找到当前文件的使用字体名称,但没有粗体信息。

if (fontfile.Name.Equals("fontTable.xml"))
            {
                using (StreamReader sr = new StreamReader(fontfile.FullName, Encoding.UTF8))
                {
                    string content = sr.ReadToEnd();
                    string pattern = "<w:font w:name=.+?>";
                    Regex reg = new Regex(pattern);
                    MatchCollection matches = reg.Matches(content);
                    foreach (Match match in matches)
                    {
                        string fontname = match.ToString().Replace("<w:font w:name=\"","").Replace("\">","");
                        fontlist.Add(fontname);
                    }
                }
                break;
            }

我可以在document.xml中使用“ w:r”标签中的“ w:b /”或“ w:bCs /”找到粗体信息。 但是document.xml中没有字体名称

<w:font w:name="Calibri"><w:panose1 w:val="020F0502020204030204"/><w:charset w:val="00"/><w:family w:val="swiss"/><w:pitch w:val="variable"/><w:sig w:usb0="E0002AFF" w:usb1="C000247B" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/></w:font>

我尝试使用Microsoft.office.interop,如果我使用<w:r w:rsidRPr="00C22891"><w:rPr><w:rFonts w:hint="eastAsia"/><w:b/><w:bCs/></w:rPr><w:t>加粗</w:t></w:r> 和字体名称搜索文件,则bold== true始终为isFind

false

所以我想知道是否有办法在Word中获取所有粗体字体

预先感谢您的帮助。

0 个答案:

没有答案