4

当我在 c# 中使用 openxml sdk 2 创建段落样式并将其应用到段落时,一切都是正确的,并且它将毫无问题地运行。

但是使用下面的代码,当我创建字符样式并将其应用于运行时,它不会更改文档的运行:

下面的代码将创建样式并将其保存到文档的样式部分:

            StyleDefinitionsPart stylePart = mainPart.AddNewPart<StyleDefinitionsPart>();
            Style style = new Style()
            {
                Type = StyleValues.Character,
                CustomStyle = true,
                StyleId = "CharacterStyle1"
            };
            LinkedStyle linkedStyle1 = new LinkedStyle() { Val = "LinkedStyle" };
            style.Append(linkedStyle1);
            style.Append(new Name() { Val = "CharacterStyle1" });
            StyleRunProperties styleRunProperties1 = new StyleRunProperties();
            Color color = new Color() { Val = "FF0000" };
            RunFonts font1 = new RunFonts() { ComplexScript = "Tahoma" };
            styleRunProperties1.Append(color);
            styleRunProperties1.Append(font1);
            styleRunProperties1.Append(new Bold());
            styleRunProperties1.Append(new FontSize() { Val = "48" });
            style.Append(styleRunProperties1);
            stylePart.Styles = new Styles();

            stylePart.Styles.Append(style);

下面的代码是我编写的将样式应用于运行的代码:

            Paragraph heading = new Paragraph();
            ParagraphProperties headingPPr = new ParagraphProperties();
            heading.Append(headingPPr);

            Run run1 = new Run();
            Text textRun1 = new Text("THIS IS TEST RUN 1");
            run1.Append(textRun1);
            RunProperties rprRun1 = new RunProperties {RunStyle = new RunStyle() {Val = "CharacterStyle1"}};

            heading.Append(run1);
            body.Append(heading);

这些是document.xml的输出代码:

 <?xml version="1.0" encoding="utf-8"?>
 <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
 <w:body>
 <w:p>
  <w:pPr />
  <w:r w:rsidRPr="009531B2">
    <w:t>THIS IS TEST RUN 1</w:t>
  </w:r>
 </w:p>
 </w:body>
 </w:document>

这种风格不适用于我的跑步!

最后,这是我打开输出文档时样式库的屏幕截图,这张图显示样式已成功添加到文档中,但未申请运行:

文档网中的风格图片

如何将字符样式应用于跑步?

4

1 回答 1

3

基于OpenXML 的 ECMA 规范,为了对段落中的任何运行设置样式,您还必须将样式应用于段落标记:

17.3.1.29 rPr(段落标记的运行属性)

此元素指定应用于字形的一组运行属性,用于表示该段落的段落标记的物理位置。该段落标记作为文档中的物理字符,可以被格式化,因此应该能够像文档中的任何其他字符一样表示这种格式。如果此元素不存在,则段落标记未格式化,与任何其他文本运行一样。

所以要在你的代码中解决这个问题..试试这个..

Paragraph heading = new Paragraph();
ParagraphProperties headingPPr = new ParagraphProperties();
heading.Append(headingPPr);
ParagraphMarkRunProperties headingParagraphMarkRunProperties = new ParagraphMarkRunProperties();
RunStyle runStyle1 = new RunStyle(){ Val = "CharacterStyle1" };

headingParagraphMarkRunProperties.Append(runStyle1);
headingPPr.Append(headingParagraphMarkRunProperties);

Run run1 = new Run();
Text textRun1 = new Text("THIS IS TEST RUN 1");
run1.Append(textRun1);
RunProperties rprRun1 = new RunProperties {RunStyle = new RunStyle() {Val = "CharacterStyle1"}};

run1.Append(rprRun1);

heading.Append(run2);
body.Append(heading);

更新:

根据您在评论中打开的 xml 片段,您忘记包含

RunProperties rprRun1 = new RunProperties {RunStyle = new RunStyle() {Val = "CharacterStyle1"}};
    
 run1.Append(rprRun1); //Adding run properties to the run

在你的代码中。还需要将属性单独应用于运行,以便将格式应用于具有自己的属性部分的run元素:run

正如段落可以具有属性一样,运行也可以。r 元素内的所有元素的属性由相应的可选 rPr 运行属性元素(第 17.7.9.1 节;第 17.3.2.27 节)控制,该元素应是 r 元素的第一个子元素。反过来,rPr 元素是一组属性元素的容器,这些属性元素应用于 r 元素的其余子元素。[注:rPr 容器元素内的元素允许消费者控制例如以下运行内容中的内容是粗体、下划线还是可见。尾注]

希望这可以帮助。

于 2013-04-10T08:44:07.623 回答