在C#中通过OpenXML在word文件中定义带有RTL方向的段落

时间:2013-03-17 13:04:15

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

如何使用C#中的OpenXML为单词中的段落设置从右到左的方向?我使用下面的代码来定义它,但它们不会做任何改变:

 RunProperties rPr = new RunProperties();

 Style style = new Style();
 style.StyleId = "my_style";
 style.Append(new Justification() { Val = JustificationValues.Right });
 style.Append(new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft });
 style.Append(rPr);

最后我会为我的段落设置这种风格:

...
heading_pPr.ParagraphStyleId = new ParagraphStyleId() { Val = "my_style" };

但是看到输出文件没有变化。

我找到了一些帖子,但他们根本没有帮助我,比如:

Changing text direction in word file

如何解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:3)

使用BiDi类将段落的文本方向设置为RTL。 以下代码示例搜索word文档中的第一个段落 并使用BiDi类将文本方向设置为RTL:

using (WordprocessingDocument doc =
   WordprocessingDocument.Open(@"test.docx", true))
{
  Paragraph p = doc.MainDocumentPart.Document.Body.ChildElements.First<Paragraph>();

  if(p == null)
  {
    Console.Out.WriteLine("Paragraph not found.");
    return;
  }

  ParagraphProperties pp = p.ChildElements.First<ParagraphProperties>();

  if (pp == null)
  {
    pp = new ParagraphProperties();
    p.InsertBefore(pp, p.First());
  }

  BiDi bidi = new BiDi();
  pp.Append(bidi);

}

Microsoft Word中的双向文本还有一些方面。 SanjayKumarM 写了一篇关于从右到左文本内容的文章 在Microsoft Word中处理。有关详细信息,请参阅this链接。

答案 1 :(得分:1)

此代码对我来说可以将方向设置为从右到左

var run = new Run(new Text("Some text"));
var paragraph = new DocumentFormat.OpenXml.Wordprocessing.Paragraph(run);
paragraph.ParagraphProperties = new ParagraphProperties()
{
    BiDi = new BiDi(),
    TextDirection = new TextDirection()
    {
        Val = TextDirectionValues.TopToBottomRightToLeft
    }
};