2013-04-10 33 views
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> 

的風格並沒有應用到我跑!

最後,當打開輸出文檔時,這是樣式庫的屏幕截圖,此圖顯示樣式已成功添加到文檔,但不適用於運行:

picture of style in documnet

我如何申請一個字符樣式來運行?基於該ECMA specification for OpenXML

回答

2

,爲了風格的段落,你必須應用樣式的段落標記以及任何運行:

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 

在您的代碼中。它也需要屬性適用於運行seperately爲了得到應用於run元素的格式爲run有自己的屬性部分:

就像一個段落可以有屬性,所以也可以運行。 r元素中的所有 元素的屬性均受相應的可選rPr運行屬性元素(第17.7.9.1; 第17.3.2.27)的控制,該屬性應爲r元素的第一個子元素。在 回合中,rPr元素是一組屬性元素集合 的容器,應用於r元素的其餘子元素。 [注意: rPr容器元素中的元素允許消費者通過 控制下列運行內容中的內容是粗體, 是帶下劃線還是可見。尾註]

希望這有助於。 @ Flowerking

+1

謝謝,這是代碼輸出當我改變它作爲你說:<?XML版本= 「1.0」 編碼= 「UTF-8」> ' THIS IS TEST RUN 1 ' _but它並沒有改變run1_ – 2013-04-11 01:50:11

+0

的風格@ RezaM.A請檢查更新。 – Flowerking 2013-04-11 08:11:35

相關問題