【问题标题】:cannot preserve space between runs无法在运行之间保留空间
【发布时间】:2012-03-03 17:56:03
【问题描述】:

我想生成一个word文档 作为输入,我有这个字符串“开放包装约定”,每个单词都有不同的风格 结果应该是open包装conventions

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(); 

结果是 open*packaging*conventions 单词之间没有空格 有人能帮帮我吗?!

【问题讨论】:

    标签: space openxml-sdk wordprocessingml


    【解决方案1】:

    通过处理Space 属性,您的工作进展顺利,但您需要这样做:

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

    【讨论】:

      【解决方案2】:

      这是另一种设置属性Space的方法,该属性可用于指定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 定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2021-11-02
        • 2022-11-05
        • 2023-03-12
        • 2023-03-29
        • 2010-10-06
        • 2011-09-08
        相关资源
        最近更新 更多