我一直在尝试获取有关每个运行/段落的所有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或获取默认字体名称,字体大小等?
答案 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;