Approved
Last Updated: 06 Mar 2018 15:05 by ADMIN
ADMIN
Hristo
Created on: 26 Feb 2018 14:50
Category: RichTextEditor
Type: Bug Report
0
FIX. RadRichTextEditor - pasting an image should resize it to fit on the page
Workaround: 
private void RadRichTextEditor1_CommandExecuting(object sender, CommandExecutingEventArgs e)
{
    if (!(e.Command is PasteCommand))
    {
        return;
    }

    DocumentFragment res = ClipboardEx.GetDocumentFromClipboard("RadDocumentGUID");
    if (res == null)
    {
        foreach (ClipboardHandler settings in ClipboardEx.ClipboardHandlers)
        {
            res = ClipboardEx.GetDocumentFromClipboard(settings.ClipboardDataFormat, settings.ClipboardStringFilter);
        }
    }

    if (res == null)
    {
        e.Cancel = true;
        System.Drawing.Image bitmapSource = Clipboard.GetImage();
        if (bitmapSource == null)
        {
            return;
        }

        Telerik.WinForms.Documents.Layout.Padding sectionmargin = this.radRichTextEditor1.Document.CaretPosition.GetCurrentSectionBox().AssociatedSection.ActualPageMargin;

        double originalPixelWidth = bitmapSource.Width;
        double originalPixelHeight = bitmapSource.Height;

        if (originalPixelWidth == 0 || originalPixelHeight == 0)
        {
            originalPixelWidth = 10;
            originalPixelHeight = 10;
        }

        double width = originalPixelWidth;
        double height = originalPixelHeight;
        
        if (this.radRichTextEditor1.Document.LayoutMode == DocumentLayoutMode.Paged)
        {
            Section currentSection = this.radRichTextEditor1.Document.CaretPosition.GetCurrentSectionBox().AssociatedSection;
            Telerik.WinForms.Documents.Model.SizeF pageSize = (Telerik.WinForms.Documents.Model.SizeF)currentSection.GetType().GetProperty("ActualPageSize", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(currentSection);

            double maxWidth = pageSize.Width - (sectionmargin.Left + sectionmargin.Right);
            double maxHeight = pageSize.Height - (sectionmargin.Top + sectionmargin.Bottom);
            width = Math.Min(maxWidth, width);
            height = Math.Min(maxHeight, height);
        }
        
        double ratio = originalPixelWidth / originalPixelHeight;
        width = Math.Min(width, height * ratio);
        height = width / ratio;
        
        Telerik.WinControls.RichTextEditor.UI.Size size = new Telerik.WinControls.RichTextEditor.UI.Size(width, height);
        ImageInline imageInline = new ImageInline(new WriteableBitmap(bitmapSource));
        imageInline.Size = size;
        
        this.radRichTextEditor1.RichTextBoxElement.ActiveDocumentEditor.InsertInline(imageInline);
    }
}
0 comments