2012-02-11 57 views
17

我要生成作为输入的Word文档 我有这个字符串“打开包装公约”和每一个字都会有不同的风格 之间空间的结果应该是开放包装公约不能保留运行

WordprocessingDocument document = WordprocessingDocument.Create(
      @"C:\test PFE.docx", 
      WordprocessingDocumentType.Document 
     ); 



     MainDocumentPart mainDocumentPart = document.AddMainDocumentPart(); 


     mainDocumentPart.Document = new Document(); 
     mainDocumentPart.Document.AddNamespaceDeclaration("ve", "http://schemas.openxmlformats.org/markup-compatibility/2006"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("o", "urn:schemas-microsoft-com:office:office"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("m", "http://schemas.openxmlformats.org/officeDocument/2006/math"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("v", "urn:schemas-microsoft-com:vml"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("wp", "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("w10", "urn:schemas-microsoft-com:office:word"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"); 
     mainDocumentPart.Document.AddNamespaceDeclaration("wne", "http://schemas.microsoft.com/office/word/2006/wordml"); 



     Body documentBody = new Body(); 
     mainDocumentPart.Document.Append(documentBody); 


     StyleDefinitionsPart styleDefinitionsPart = 
     mainDocumentPart.AddNewPart<StyleDefinitionsPart>(); 


     FileStream stylesTemplate = 
      new FileStream("styles.xml", FileMode.Open, FileAccess.Read); 
     styleDefinitionsPart.FeedData(stylesTemplate); 
     styleDefinitionsPart.Styles.Save(); 



     #region Titre du document 


     Paragraph titleParagraphe = new Paragraph() { RsidParagraphAddition = "00AF4948", RsidParagraphProperties = "00625634", RsidRunAdditionDefault = "00625634" }; ; 

     Run run = new Run(); 
     RunProperties rpr = new RunProperties(); 
     RunStyle rstylr = new RunStyle { Val = "style1" }; 
     run.Append(rpr); 
     Text t = new Text("open"); 
     run.Append(t); 
     titleParagraphe.Append(run); 

     run = new Run(); 
     rpr = new RunProperties(); 
     rstylr = new RunStyle { Val = "style2" }; 
     run.Append(rpr); 
     t = new Text("packaging") 
     { 
      Space = new DocumentFormat.OpenXml.EnumValue<DocumentFormat.OpenXml.SpaceProcessingModeValues> { InnerText = "preserve" } 
     }; 
     run.Append(t); 
     titleParagraphe.Append(run); 

     run = new Run(); 
     rpr = new RunProperties(); 
     rstylr = new RunStyle { Val = "style1" }; 
     run.Append(rpr); 
     t = new Text("conventions") 
     { 
      Space = new DocumentFormat.OpenXml.EnumValue<DocumentFormat.OpenXml.SpaceProcessingModeValues> { InnerText = "preserve" } 
     }; 
     run.Append(t); 
     titleParagraphe.Append(run); 


     documentBody.Append(titleParagraphe); 


     document.MainDocumentPart.Document.Save(); 
     document.Dispose(); 

,其结果是开放* 包装 *公约无话 之间的空间可有一个人帮我请?

+0

有人可以帮我吗? – 2012-02-15 12:26:27

回答

37

你对处理Space性能好办法,但你需要做的是这样的:

t = new Text() 
{ 
    Text = "your text with spaces ", 
    Space = SpaceProcessingModeValues.Preserve 
}; 
+0

感谢cruster,这对我有用。 – 2013-04-30 20:11:41

+2

也适合我。这应该被标记为接受的答案。 – evilfish 2013-12-09 12:45:17

7

这里是另一种方式来设置可用于指定属性空间 SpaceProcessingMode

t = new Text("This is some text"); 
t.Space = SpaceProcessingModeValues.Preserve; 

属性的默认值是SpaceProcessingModeValues.Default

API Documentation

<w:r> 
<w:t> significant whitespace </w:t> 
</w:r> 

尽管对在运行的文本内容的每一侧三个空格,该空格没有被明确标记为显著,因此它受空间保存当前在该运行范围中指定的规则。结束示例] 此属性的可能值由XML 1.0规范的§2.10定义。