How to replace a textplaceholder with multiparagraph text and set its format

2 posts, 0 answers
  1. Tri
    Tri avatar
    1 posts
    Member since:
    Apr 2019

    Posted 05 Apr Link to this post

    Hi All

    I try to produce a generated document using RadDocument. Let's say I have template like this:

           A.  Chapter a

                <texttoreplace>

           B.  Chapter b

    Chapter A, B and so on is a 'report template', each header is indented 150 point. I have multi paragraph text like this (2 paragraph in this sample below):

    text1 text1

    text2 text 2

    All of these text is *not left  indented*. What I need is , I can produce  report like this:

           A.  Chapter a
                text1 text1

                text2 text2
           B.  Chapter b

    I expect the second paragrah, "text2 text2" is also indented just look like first one (text1 text1).

    I have tried to use this code to do this job:

    01.foreach (var textRange in search.FindAll("<<toreplace>>"))
    02.            {
    03.// select text to replace
    04.                docx.Selection.AddSelectionStart(textRange.StartPosition);
    05.                docx.Selection.AddSelectionEnd(textRange.EndPosition);
    06.                docxEdit = new Telerik.WinForms.Documents.Model.RadDocumentEditor(docx);
    07.//remove the text
    08.                docxEdit.Delete(false);
    09.          //put 'multi paragraph' replacement text
    10.                docxEdit.InsertFragment(fragment);
    11.//just in case there more than one text to replace, loop
    12.                docx.Selection.Clear();
    13.                textRange.StartPosition.Dispose();
    14.                textRange.EndPosition.Dispose();
    15.            }

     

    this code replace all occurrences of <<texttoreplace>> successfully, but the output is always like this:

           A.  Chapter a
                text1 text1
    text2 text2
           B.  Chapter b

    The second paragraph of the replacement text is not following destination paragraph indentation but use its own indent. 

    Can I have any clue how to produce report I need ?

  2. Tanya
    Admin
    Tanya avatar
    818 posts

    Posted 10 Apr Link to this post

    Hello Tri,

    When inserting a fragment inside a document, the formatting of the fragment is preserved leading to ignoring the current style which sets the indent of the paragraphs. What I can suggest in this case is to iterate through the paragraphs of the document inside the fragment and insert them so the current editing style can be preserved:
    RadDocument documentToInsert = new RadDocument();
    RadDocumentEditor editor = new RadDocumentEditor(documentToInsert);
    documentToInsert.Sections.Add(new Section());
    documentToInsert.Sections.First.Blocks.Add(new Paragraph());
    editor.InsertLine("text1 text1");
    editor.Insert("text2 text2");
     
    foreach (var textRange in search.FindAll("<texttoreplace>"))
    {
        // select text to replace
        this.radRichTextBox.Document.Selection.AddSelectionStart(textRange.StartPosition);
        this.radRichTextBox.Document.Selection.AddSelectionEnd(textRange.EndPosition);
        var docxEdit = new RadDocumentEditor(this.radRichTextBox.Document);
        //remove the text
        docxEdit.Delete(false);
        //put 'multi paragraph' replacement text
        foreach (var paragraph in documentToInsert.EnumerateChildrenOfType<Paragraph>())
        {
            foreach (var inline in paragraph.Inlines)
            {
                docxEdit.InsertInline(inline);
            }
            docxEdit.InsertParagraph();
        }
        //just in case there more than one text to replace, loop
        this.radRichTextBox.Document.Selection.Clear();
        textRange.StartPosition.Dispose();
        textRange.EndPosition.Dispose();
    }

    Hope this is helpful.

    Regards,
    Tanya
    Progress Telerik
    Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
Back to Top