Search code examples
c#openxmlopenxml-sdk

add character spacing for range of character in open xml c#


how to add character spacing for range of characters

like i want to give character spacing In word toggling for 2 characters gg of spacing="Expanded" with By value of 4pt


enter image description here


Solution

  • As you wish to apply a style to the middle of a paragraph you will need to have (at least) 3 separate Run elements; the first for the start of the unstyled text, the second for the text that has the spacing and the third for the rest of the unstyled text.

    To add the character spacing you need to add a Spacing element to the Run. The Spacing element has a Value property that sets the spacing you want in twentieths of a point (so to get 4pt you need to set the Value to 80).

    The following code will create a document with spacing on the gg in the word toggling

    public static void CreateDoc(string fileName)
    {
        // Create a Wordprocessing document. 
        using (WordprocessingDocument package = 
                 WordprocessingDocument.Create(fileName, WordprocessingDocumentType.Document))
        {
            // Add a new main document part. 
            package.AddMainDocumentPart();
    
            //create a body and a paragraph
            Body body = new Body();
            Paragraph paragraph = new Paragraph();
    
            //add the first part of the text to the paragraph in a Run
            paragraph.AppendChild(new Run(new Text("This sentence has spacing between the gg in to")));
    
            //create another run to hold the text with spacing
            Run secondRun = new Run();
            //create a RunProperties with a Spacing child.
            RunProperties runProps = new RunProperties();
            runProps.AppendChild(new Spacing() { Val = 80 });
            //append the run properties to the Run we wish to assign spacing to
            secondRun.AppendChild(runProps);
            //add the text to the Run
            secondRun.AppendChild(new Text("gg"));
            //add the spaced Run to the paragraph
            paragraph.AppendChild(secondRun);
            //add the final text as a third Run
            paragraph.AppendChild(new Run(new Text("ling")));
    
            //add the paragraph to the body
            body.AppendChild(paragraph);
    
            package.MainDocumentPart.Document = new Document(body);
    
            // Save changes to the main document part. 
            package.MainDocumentPart.Document.Save();
        }
    }
    

    The above produces the following: enter image description here

    Note that you can set the Value of the Spacing to a negative number and the text will be condensed rather than expanded.