Insert text with specified font

9 posts, 1 answers
  1. Mihajlo
    Mihajlo avatar
    47 posts
    Member since:
    Aug 2018

    Posted 13 Sep 2018 Link to this post

    What is the proper way to insert text with specified font in any place in measured document? I have tried with the following code but it does not set the font if just right of the caret is space, and it changes the font of the whole word if the caret is in the middle of the word.

    var editor = new RadDocumentEditor(radRichTextEditor1.Document);
    editor.ChangeFontFamily(new Telerik.WinControls.RichTextEditor.UI.FontFamily("Times New Roman"));
    editor.Insert("ABC");

     

     

  2. Mihajlo
    Mihajlo avatar
    47 posts
    Member since:
    Aug 2018

    Posted 14 Sep 2018 Link to this post

    To answer my own question, selection here is king, as always. The follwing works if selection does not exist. If one ore more selections exist one must decide what the code should do about it. The easiest way is to clear the selection before this operation.

     

    var editor = new RadDocumentEditor(radRichTextEditor1.Document);
    using (DocumentPosition originalCaretPosition = new DocumentPosition(editor.Document.CaretPosition, true))
    {
        editor.Insert("ABC");
     
        editor.Document.Selection.SetSelectionStart(originalCaretPosition);
        editor.Document.Selection.AddSelectionEnd(editor.Document.CaretPosition);
     
        editor.ChangeFontFamily(new Telerik.WinControls.RichTextEditor.UI.FontFamily("Times New Roman"));
    }

     

  3. Answer
    Tanya
    Admin
    Tanya avatar
    901 posts

    Posted 17 Sep 2018 Link to this post

    Hi Mihajlo,

    When inserting content directly with RadDocumentEditor, it uses the current style of the span the caret is on. To ensure that the styling you have applied is used, I would suggest you to construct a Span object and apply the desired styling to it and add it to the document using the InsertInline() method of the editor. Here is how this would look like in code:

    Span span = new Span("test");
    span.FontFamily = new FontFamily("Times New Roman");
    this.radRichTextEditor.InsertInline(span);

    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.
  4. Mihajlo
    Mihajlo avatar
    47 posts
    Member since:
    Aug 2018

    Posted 31 May 2019 Link to this post

    To insert text with various font styles set we can do the following:

    editor.InsertInline(new Span("regular"));
    editor.InsertInline(new Span("bold") { FontWeight = FontWeights.Bold });
    editor.InsertInline(new Span("italic") { FontStyle = System.Drawing.FontStyle.Italic });
    editor.InsertInline(new Span("underline") { UnderlineDecoration = UnderlineTypes.Line });
    editor.InsertInline(new Span("strikeout") { Strikethrough = true });

     

    But how to insert an empty paragraph with desired font size (paragraph height), for instance between words "bold" and "italic" above, where there are no spaces, so calling ChangeFontSize method before InsertParagraph would not work properly?

  5. Tanya
    Admin
    Tanya avatar
    901 posts

    Posted 04 Jun 2019 Link to this post

    Hi Mihajlo,

    The methods of the editor work on the selection or if it is missing, on the element under the caret position. Here is how I modified the code so you can achieve the requirement:
    editor.InsertInline(new Span("regular"));
    editor.InsertInline(new Span("bold") { FontWeight = FontWeights.Bold });
    editor.InsertInline(new Span("italic") { FontStyle = System.Drawing.FontStyle.Italic });
    // Add the new paragraph
    editor.InsertParagraph();
    // Change its properties
    editor.ChangeParagraphLineSpacing(Unit.PointToDip(25), LineSpacingType.Exact);
    // Add another paragraph for the following content
    editor.InsertParagraph();
    // Change its properties
    editor.ChangeParagraphLineSpacing(1.15, LineSpacingType.Auto);
    editor.InsertInline(new Span("underline") { UnderlineDecoration = UnderlineTypes.Line });
    editor.InsertInline(new Span("strikeout") { Strikethrough = true });

    Hope this will help you achieve the desired result.

    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.
  6. Mihajlo
    Mihajlo avatar
    47 posts
    Member since:
    Aug 2018

    Posted 04 Jun 2019 Link to this post

    I know only the font and its size. I don't know how to convert from those to the values that are 25 and 1.15 in your example. Paragraph height should naturally fit one character of my font and size.

    Maybe I could use a trick where I insert one character, move back one place, then insert all the text and paragraphs I need, and then delete that character after the caret. Was only wondering if there is a way without using trickery.

  7. Tanya
    Admin
    Tanya avatar
    901 posts

    Posted 05 Jun 2019 Link to this post

    Hello Mihajlo,

    You can maintain the line height as big as the font size requires it to be using the Single line spacing. You can set it as follows:
    editor.ChangeParagraphLineSpacing(1, LineSpacingType.Auto);

    The 25 and 1.15 values set different types of line spacing as it can be seen from the second parameter passed to the ChangeParagraphLineSpacing() method. The Auto line spacing type determines different values which are dependent of the font settings. If you would like to set a specific line height values and keep it always the same no matter of the content and its settings, you can use the Exact line spacing type whose measurement unit is in points.

    Hope this makes things clear.

    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.
  8. Mihajlo
    Mihajlo avatar
    47 posts
    Member since:
    Aug 2018

    Posted 07 Jun 2019 Link to this post

    I think there is an error in the way the editor handles empty paragraphs. Let's take for instance demo application with its default document, with text "RadRichTextEditor for WinForms" at the beginning in font Calibri of size 28. Suppose the user wants to add A, then empty line, then C in single line, followed by the rest of the document, and to have these three new lines in Times New Roman in size 10.

    If there is no empty line, but letter B in middle line, then user can set caret to document start, set the font and size, and type A<Return>B<Return>C<Return>. And it would look fine (and even then, if we set caret just after B and press Return the new paragraph will have spacing after set to 7.5 for no apparent reason).

    If we want an empty line instead of B in the line, then there is no simple way to do it. Typing A<Return><Return>C<Return> would produce a huge gap between A and C (we still first set the caret, and font and size). One way to accomplish what we want is to select all new text, set font size to something other than 10, and then back to 10 (which is also weird to have to do).

    Turning this into code is even harder. How would you insert A<Return><Return>C<Return> from code in Times New Roman size 10 at the demo's default document's beginning?

  9. Tanya
    Admin
    Tanya avatar
    901 posts

    Posted 12 Jun 2019 Link to this post

    Hi Mihajlo,

    Thank you for providing the additional steps.

    Indeed, we managed to reproduce the issue in the UI and logged it in our backlog on your behalf: RadRichTextEditor: font is reset after inserting two empty lines by pressing Enter twice. I added Telerik points in appreciation for this report.

    To achieve this behavior in code, you can apply the properties after each paragraph insertion.

    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