如何访问docx默认样式

时间:2012-10-17 12:20:17

标签: c# openxml office-interop openxml-sdk

我一直在尝试获取有关每个运行/段落的所有docx文档内容和信息。到目前为止,我已经设法从run / paragraph属性中获取样式信息。

using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, false))
        {
            MainDocumentPart mainPart = doc.MainDocumentPart;
            IEnumerable<Paragraph> paragraphs = mainPart.Document.Body.OfType<Paragraph>();
            foreach (Paragraph paragraph in paragraphs)
            {
                string text = paragraph.InnerText;

                IEnumerable<Run> runs = paragraph.Descendants<Run>();
                foreach (Run run in runs)
                {
                    string runText = run.InnerText;
                    RunProperties properties = run.RunProperties;
                    string fontsize = properties.FontSize.Val;
                    string fontsize2 = properties.FontSizeComplexScript.Val;
                    string fontaname = properties.RunFonts.HighAnsi;
                }
            }
        }

但这只适用于文本格式(样式)不是默认值的情况。换句话说,properties != null和内部成员不是null。到目前为止,我只看到一种方法 - 获取style.xml形成内容。在互联网上搜索没有给我任何线索。那么,我如何访问style.xml或获取默认字体名称,字体大小等?

3 个答案:

答案 0 :(得分:2)

默认的段落样式是样式部分中的样式@w:type =“paragraph”和 @w:default =“1”

请注意,样式部分通常还包含以下内容:

  <w:docDefaults>
    <w:rPrDefault>
      <w:rPr>
        <w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorEastAsia" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/>
        <w:sz w:val="22"/>
        <w:szCs w:val="22"/>
        <w:lang w:val="en-AU" w:eastAsia="ko-KR" w:bidi="ar-SA"/>
      </w:rPr>
    </w:rPrDefault>
    <w:pPrDefault>
      <w:pPr>
        <w:spacing w:after="200" w:line="276" w:lineRule="auto"/>
      </w:pPr>
    </w:pPrDefault>
  </w:docDefaults> 

有关更多详细信息,请参阅Open XML规范。

答案 1 :(得分:2)

<<So, how to find out when to use typeFace from minorFont and when from majorFont?>>

majorFont用于标题(标题1等)和minorFont用于“普通文本”。

答案 2 :(得分:2)

要使用OpenXML获取默认样式,您可以使用以下代码段:

using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
{

   DocDefaults defaults = doc.MainDocumentPart.StyleDefinitionsPart.Styles.Descendants<DocDefaults>().FirstOrDefault();
   //get the font size
   string fontSize = defaults.RunPropertiesDefault.RunPropertiesBaseStyle.FontSize.Val;
   //get the font prob. (Ascii, HAnsi, ComplexScript,...etc)
   RunFonts runFont = defaults.RunPropertiesDefault.RunPropertiesBaseStyle.RunFonts;

}

对于主题,您可以使用以下内容获取主要和次要字体:

var latineMajorFont = doc.MainDocumentPart.ThemePart.Theme.ThemeElements.FontScheme.MajorFont.LatinFont;
var latinMinorFont = doc.MainDocumentPart.ThemePart.Theme.ThemeElements.FontScheme.MinorFont.LatinFont;
var complexMajorFont = doc.MainDocumentPart.ThemePart.Theme.ThemeElements.FontScheme.MajorFont.ComplexScriptFont;
var complextMinorFont = doc.MainDocumentPart.ThemePart.Theme.ThemeElements.FontScheme.MinorFont.ComplexScriptFont;