Defining paragraph with RTL direction in word file by OpenXML in C#

c#, ms-word, openxml, openxml-sdk

Solution

Use the `BiDi` class to set the text direction to RTL for a paragraph. The following code sample searches for the first paragraph in a word document and sets the text direction to RTL using the `BiDi` class:

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

}

There are a few more aspects to bi-directional text in Microsoft Word. SanjayKumarM wrote an article about how right-to-left text content is handled in Microsoft Word. See this link for more information.

Problem

How to set the right-to-left direction for a paragraph in word with OpenXML in C#? I use codes below to define it but they won't make any change: ``` 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); ``` and at the end I will set this style for my paragraph: ``` ... heading_pPr.ParagraphStyleId = new ParagraphStyleId() { Val = "my_style" }; ``` But is see no changes in the output file. I have found some post but they didn't help me at all,like: Changing text direction in word file How can solve this problem? Thanks in advance.

Original source