【问题标题】:OpenXML preserving formats on break lines (problems)OpenXML 在折断线上保留格式(问题)
【发布时间】:2011-06-08 20:07:57
【问题描述】:

我在生成 Word 文档时遇到了严重的问题。

这是我用于在书签中发送文本的库函数:

    public void sentText(string _BkMk, string _text, bool _break, RunProperties _rProp)
    {  
            Text text = new Text(_text) { Space = SpaceProcessingModeValues.Preserve };
            Run run = new Run(new RunProperties(_rProp));   

            run.Append(text);

            Run run2 = new Run();               

            if (_break)
            {                  
               run2.Append(new Break());
               //CarriageReturn cr = new CarriageReturn();
               //run2.Append(cr);                   
            }

            foreach (BookmarkStart bookmarkStart in bookmarkMap.Values)
            {
                if (bookmarkStart.Name.Value == _BkMk)
                {
                    bookmarkStart.InsertBeforeSelf(run);
                    if (_break)
                    {
                        bookmarkStart.InsertBeforeSelf(run2);
                    }
                }
            }

runProperties 中包含字体、大小等... 最大的问题是当我在同一个书签中发送不同的字符串时,我需要留一个行空间。我发送一个空字符串或类似“”的空格,结果是一个空行,但字体(TimesNewRoman)和大小(12)不同。对我来说,在这个空行中保留字体大小真的很重要......

有什么想法吗?

【问题讨论】:

  • 为什么我不能这样做?: Run run2 = new Run(new RunProperties(_rProp));当我运行代码时它说该元素来自一棵树......目前我创建另一个函数 InsertBlank(string _BkMk, RunProperties _rProp) 在这里我用我想要的运行属性执行这个新的 Break (在这里我可以做到这一点)
  • 请编辑您的问题,而不是给 cmets 留下重要信息。

标签: c# .net ms-word openxml openxml-sdk


【解决方案1】:

如果我正确理解您的问题并且您想要的只是一个空行,那么您所要做的就是插入一个空白段落,它应该遵循您设置的默认字体。这将要求您将文本分成两个不同的段落,并使用两次不同的运行:

public void sentText(string _BkMk, string _text, bool _break, RunProperties _rProp)
{  
     Text text = new Text(_text) { Space = SpaceProcessingModeValues.Preserve };

     Run run = new Run(new RunProperties(_rProp));          
     run.Append(text);                    

     Paragraph paragraph1 = new Paragraph();
     paragraph1.Append(run);

     foreach (BookmarkStart bookmarkStart in bookmarkMap.Values)
     {
         if (bookmarkStart.Name.Value == _BkMk)
         {
             bookmarkStart.InsertBeforeSelf(paragraph1);
             if (_break)
             {
                 bookmarkStart.InsertBeforeSelf(paragraph1);
                 bookmarkStart.InsertBeforeSelf(new Paragraph());
             }
         }
     }
}

我还建议使用段落而不是只运行,因为当您按 Enter 键时 Word 会创建一个空段落。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多