2

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

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 或获取默认字体名称、字体大小等?

4

3 回答 3

3

要使用 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;
于 2013-05-22T10:45:46.370 回答
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 规范。

于 2012-10-17T18:57:45.100 回答
2
<<So, how to find out when to use typeFace from minorFont and when from majorFont?>>

majorFont 旨在与 Headings(标题 1 等)一起使用,minorFont 与“普通文本”一起使用。

于 2013-01-08T14:01:11.653 回答