Example #1
0
        void richEditControl1_SelectionChanged(object sender, EventArgs e)
        {
            if (isLocked)
            {
                return;
            }
            SyncronizeFilesCollection();

            DocumentPosition pos = richEditControl1.Document.CaretPosition;

            foreach (KeyValuePair <string, FileFieldInfo> item in filesCollection)
            {
                DocumentRange fieldRange = item.Value.DocField.ResultRange;
                if (fieldRange.Contains(pos) && fieldRange.Start.ToInt() != pos.ToInt() && fieldRange.End.ToInt() != pos.ToInt())
                {
                    isLocked = true;
                    int deltaFromStart = pos.ToInt() - fieldRange.Start.ToInt();
                    int deltaFromEnd   = fieldRange.End.ToInt() - pos.ToInt();
                    if (deltaFromEnd > deltaFromStart)
                    {
                        richEditControl1.Document.CaretPosition = item.Value.DocField.Range.End;
                    }
                    else
                    {
                        richEditControl1.Document.CaretPosition = item.Value.DocField.Range.Start;
                    }
                    isLocked = false;
                    break;
                }
            }
        }
        int GetWordStartIndex(DocumentPosition position)
        {
            int currentPosition = position.ToInt();
            int result          = currentPosition;

            while (currentPosition >= 0 && !wordSeparators.Contains(GetCharacter(currentPosition)))
            {
                result = currentPosition;
                currentPosition--;
            }
            return(result);
        }
        int GetWordEndIndex(DocumentPosition position)
        {
            int currentPosition = position.ToInt();
            //int result = currentPosition;
            int endPosition = rtControl.Document.Range.End.ToInt() - 1;

            while (currentPosition <= endPosition && !wordSeparators.Contains(GetCharacter(currentPosition)))
            {
                currentPosition++;
                //result = currentPosition;
            }
            return(currentPosition);
        }
        private void CreateProtectedRanges(Document document)
        {
            DocumentPosition          lastNonProtectedPosition = document.Range.Start;
            bool                      containsProtectedRanges  = false;
            RangePermissionCollection rangePermissions         = richEditControl1.Document.BeginUpdateRangePermissions();

            for (int i = 0; i < document.Bookmarks.Count; i++)
            {
                Bookmark protectedBookmark = document.Bookmarks[i];
                if (protectedBookmark.Name.Contains("protectedRange"))
                {
                    containsProtectedRanges = true;

                    rangePermissions.AddRange(CreateRangePermissions(protectedBookmark.Range, "Admin", "Admin"));
                    if (protectedBookmark.Range.Start.ToInt() > lastNonProtectedPosition.ToInt())
                    {
                        DocumentRange rangeAfterProtection = richEditControl1.Document.CreateRange(lastNonProtectedPosition, protectedBookmark.Range.Start.ToInt() - lastNonProtectedPosition.ToInt() - 1);
                        rangePermissions.AddRange(CreateRangePermissions(rangeAfterProtection, "User", "User"));
                    }
                    lastNonProtectedPosition = protectedBookmark.Range.End;
                }
            }

            if (document.Range.End.ToInt() > lastNonProtectedPosition.ToInt())
            {
                DocumentRange rangeAfterProtection = richEditControl1.Document.CreateRange(lastNonProtectedPosition, document.Range.End.ToInt() - lastNonProtectedPosition.ToInt() - 1);
                rangePermissions.AddRange(CreateRangePermissions(rangeAfterProtection, "User", "User"));
            }
            richEditControl1.Document.EndUpdateRangePermissions(rangePermissions);

            if (containsProtectedRanges)
            {
                document.Protect("123");
                richEditControl1.Options.Authentication.UserName     = "******";
                richEditControl1.Options.Authentication.Group        = "User";
                richEditControl1.Options.RangePermissions.Visibility = DevExpress.XtraRichEdit.RichEditRangePermissionVisibility.Hidden;
            }
        }
Example #5
0
        static void SelectCellsAndSplit(Document document)
        {
            #region #SelectCellsAndSplit
            document.LoadDocument("Documents//SelectionCollection.docx", DocumentFormat.OpenXml);
            Table            rootTable  = document.Tables[0];
            DocumentPosition position10 = rootTable.Rows[0].Cells[1].Range.Start;
            DocumentPosition position11 = rootTable.Rows[3].LastCell.Range.End;

            DocumentRange range1 = document.CreateRange(position10, position11.ToInt() - position10.ToInt());
            document.Selections.Add(range1);

            Comment     comment    = document.Comments.Create(document.Selection, "");
            SubDocument commentDoc = comment.BeginUpdate();
            commentDoc.AppendText(String.Format("\r\nSelectionCollection \r\ncontains {0} item(s).", document.Selections.Count));
            comment.EndUpdate(commentDoc);
            #endregion #SelectCellsAndSplit
        }
        // get information about a current text box layout
        public static string GetInformationAboutCurrentTextBox(SubDocument subDocument, DocumentLayout currentLayout, DocumentPosition docPosition)
        {
            string returnedInformation = "!A TEXTBOX CONTENT IS SELECTED!\r\n";

            LayoutIterator layoutIterator     = new LayoutIterator(currentLayout, subDocument.Range);
            LayoutPage     currentTextBoxPage = null;
            LayoutTextBox  currentTextBox     = null;

            while (layoutIterator.MoveNext())
            {
                LayoutElement element = layoutIterator.Current;
                if (element is LayoutTextBox)
                {
                    currentTextBox = (element as LayoutTextBox);
                    if (currentTextBox.Parent is LayoutPage)
                    {
                        currentTextBoxPage = currentTextBox.Parent as LayoutPage;
                    }
                }
                if (element is PlainTextBox)
                {
                    PlainTextBox currentPlaintTextBox = element as PlainTextBox;
                    if (currentPlaintTextBox.Range.Contains(docPosition.ToInt()))
                    {
                        returnedInformation += String.Format("Selected content: {0}\r\n", currentPlaintTextBox.Text);

                        LayoutRow currentRow       = currentPlaintTextBox.Parent as LayoutRow;
                        int       currentLineIndex = currentTextBox.Rows.ToList().IndexOf(currentRow);
                        returnedInformation += String.Format("Line index: {0}\r\n", currentLineIndex + 1);
                        returnedInformation += String.Format("Selected block bounds: {0}\r\n", currentPlaintTextBox.Bounds);
                        break;
                    }
                }
            }

            returnedInformation += String.Format("TEXTBOX bounds: {0}\r\n", currentTextBox.Bounds);
            returnedInformation += String.Format("\r\n!!Content information:\r\n");
            returnedInformation += GetInformationAboutCurrentTextBoxContent(currentTextBox, currentLayout);

            if (currentTextBoxPage != null)
            {
                returnedInformation += PageLayoutHelper.GetInformationAboutCurrentPage(currentLayout, currentTextBoxPage, docPosition);
            }
            return(returnedInformation);
        }
        public static PageAreaProperties CaculatePageAreaProperties(LayoutPageArea pageArea, DocumentPosition pos)
        {
            PageAreaProperties pageAreaProperties = new PageAreaProperties();

            pageAreaProperties.columnCount = pageArea.Columns.Count;

            pageAreaProperties.currentPageBounds.Location = pageArea.Columns[0].Bounds.Location;

            for (int i = 0; i < pageArea.Columns.Count; i++)
            {
                int currentColumnContentHeight = pageArea.Columns[i].Rows.Last.Bounds.Bottom - pageArea.Columns[i].Rows.First.Bounds.Top;
                if (pageArea.Columns[i].Range.Contains(pos.ToInt()))
                {
                    pageAreaProperties.currentColumnIndex           = i;
                    pageAreaProperties.currentColumnBounds.Location = pageArea.Columns[i].Bounds.Location;
                    pageAreaProperties.currentColumnBounds.Width    = pageArea.Columns[i].Bounds.Width;
                    pageAreaProperties.currentColumnBounds.Height   = currentColumnContentHeight;
                }
                pageAreaProperties.currentPageBounds.Width += pageArea.Columns[i].Bounds.Width;
                pageAreaProperties.currentPageBounds.Height = Math.Max(pageAreaProperties.currentPageBounds.Height, currentColumnContentHeight);
            }
            return(pageAreaProperties);
        }
Example #8
0
        void CorrectBookmarksEnd(DocumentPosition oldBookmarkEnd, DocumentPosition newBookmarkEnd)
        {
            Document document = richEditControl1.Document;

            document.BeginUpdate();
            List <Bookmark> bookmarksAtLeft = new List <Bookmark>();

            foreach (Bookmark bookmark in document.Bookmarks)
            {
                if (bookmark.Range.End.ToInt() == oldBookmarkEnd.ToInt())
                {
                    bookmarksAtLeft.Add(bookmark);
                }
            }
            foreach (Bookmark bookmark in bookmarksAtLeft)
            {
                int    bookmarkStart = bookmark.Range.Start.ToInt();
                string bookmarkName  = bookmark.Name;
                document.Bookmarks.Remove(bookmark);
                document.Bookmarks.Create(document.CreatePosition(bookmarkStart), newBookmarkEnd.ToInt() - bookmarkStart, bookmarkName);
            }
            document.EndUpdate();
        }
        protected virtual void DoMerge(SCBook anotherBook, MergeOptions options)
        {
            var book = options?.Book?.Document ?? Document;

            using (new UsingProcessor(() => book.BeginUpdate(), () => book.EndUpdate()))
            {
                DocumentPosition rangeStart = null, rangeEnd = null;

                anotherBook.Document.UpdateAllFields();

                DocumentRange range;
                using (var stream = new MemoryStream())
                {
                    anotherBook.Document.SaveDocument(stream, DocumentFormat.OpenXml);
                    stream.Seek(0, SeekOrigin.Begin);
                    range = book.AppendDocumentContent(stream, DocumentFormat.OpenXml);
                }

                if (rangeStart == null)
                {
                    rangeStart = range.Start;
                }

                rangeEnd = range.End;

                if (rangeStart != null && rangeEnd != null)
                {
                    var rangeComments = book.CreateRange(rangeStart, rangeEnd.ToInt() - rangeStart.ToInt());
                    AddComments(book, rangeComments, options);
                }

                book.CaretPosition = rangeEnd;
                Script.Book.SCBook.ResetBookFormatting(book, rangeEnd);
                ScrollToCaret();
            }
        }
        protected void DoWriteImage(string fileName, ImageOptions options)
        {
            options ??= new ImageOptions();

            var book = options.Book?.Document ?? Document;

            using (new UsingProcessor(() => book.BeginUpdate(), () => book.EndUpdate()))
            {
                DocumentPosition rangeStart = null, rangeEnd = null;

                DocumentImage image;
                if (options.Image != null)
                {
                    image = book.Images.Append(options.Image);
                }
                else if (!string.IsNullOrWhiteSpace(fileName))
                {
                    fileName = Project.Current.MapPath(fileName);

                    var source = DocumentImageSource.FromFile(fileName);
                    image = book.Images.Append(source);
                }
                else
                {
                    throw new Exception("WriteImage - unknown input object.");
                }

                image.ScaleX = options.ScaleX;
                image.ScaleY = options.ScaleY;

                var imageRange = image.Range;
                if (rangeStart == null)
                {
                    rangeStart = imageRange.Start;
                }

                if (!options.NoLineBreaks)
                {
                    imageRange = book.AppendText(Environment.NewLine);
                }

                rangeEnd = imageRange.End;

                if (rangeStart != null && rangeEnd != null)
                {
                    var range = book.CreateRange(rangeStart, rangeEnd.ToInt() - rangeStart.ToInt());

                    if (!string.IsNullOrWhiteSpace(options.ParagraphStyle) || options.FirstLineIdent.HasValue || options.FirstLineIndentType.HasValue ||
                        options.LeftIndent.HasValue || options.RightIndent.HasValue)
                    {
                        var pp = book.BeginUpdateParagraphs(range);
                        try
                        {
                            if (!string.IsNullOrWhiteSpace(options.ParagraphStyle))
                            {
                                var style = book.ParagraphStyles[options.ParagraphStyle] ?? throw new Exception($"Paragraph style '{options.ParagraphStyle}' does not exist.");
                                pp.Style = style;
                            }

                            if (options.FirstLineIdent.HasValue)
                            {
                                pp.FirstLineIndent = options.FirstLineIdent;
                            }
                            if (options.FirstLineIndentType.HasValue)
                            {
                                pp.FirstLineIndentType = (DevExpress.XtraRichEdit.API.Native.ParagraphFirstLineIndent)options.FirstLineIndentType;
                            }

                            if (options.LeftIndent.HasValue)
                            {
                                pp.LeftIndent = options.LeftIndent;
                            }
                            if (options.RightIndent.HasValue)
                            {
                                pp.RightIndent = options.RightIndent;
                            }
                        }
                        finally
                        {
                            book.EndUpdateParagraphs(pp);
                        }
                    }

                    Script.Book.SCBook.AddComments(book, range, options);
                }

                if (rangeEnd != null)
                {
                    book.CaretPosition = rangeEnd;
                    ResetBookFormatting(book, rangeEnd);
                    ScrollToCaret();
                }
            }
        }
Example #11
0
        protected void DoWriteLatex(string text, LatexOptions options)
        {
            options ??= new LatexOptions();

            var book = options.Book?.Document ?? Document;

            using (new UsingProcessor(() => book.BeginUpdate(), () => book.EndUpdate()))
            {
                DocumentPosition rangeStart = null, rangeEnd = null;

                var parser     = new TexFormulaParser();
                var formula    = parser.Parse(text);

                var renderer   = formula.GetRenderer(TexStyle.Text, options.FontSize, "Tahoma");

                var geometry   = renderer.RenderToGeometry(0, 0);
                var converter  = new SVGConverter();
                var svgPathText = converter.ConvertGeometry(geometry);
                var svgText    = AddSVGHeader(svgPathText);

                var imageLatex = PaintSVG(svgText, options.DPI);
                AddUserCommentsToImage(imageLatex, text);
                var image = book.Images.Append(imageLatex);

                image.ScaleX = options.Scale;
                image.ScaleY = options.Scale;

                var rangeImage = image.Range;
                if (rangeStart == null)
                {
                    rangeStart = rangeImage.Start;
                }

                if (!options.NoLineBreaks)
                {
                    rangeImage = book.AppendText(Environment.NewLine);
                }

                rangeEnd = rangeImage.End;

                if (rangeStart != null && rangeEnd != null)
                {
                    var range = book.CreateRange(rangeStart, rangeEnd.ToInt() - rangeStart.ToInt());

                    if (!string.IsNullOrWhiteSpace(options.ParagraphStyle))
                    {
                        var style = book.ParagraphStyles[options.ParagraphStyle] ?? throw new Exception($"Paragraph style '{options.ParagraphStyle}' does not exist.");
                        var pp    = book.BeginUpdateParagraphs(range);
                        try
                        {
                            pp.Style = style;
                        }
                        finally
                        {
                            book.EndUpdateParagraphs(pp);
                        }
                    }

                    Script.Book.SCBook.AddComments(book, range, options);

                    WriteRangeToConsole(book, range);
                }

                if (rangeEnd != null)
                {
                    book.CaretPosition = rangeEnd;
                    Script.Book.SCBook.ResetBookFormatting(book, rangeEnd);
                    ScrollToCaret();
                }
            }
        private void ApplyRTFModification(RichEditDocumentServer server)
        {
            // Apply default formatting
            server.Document.DefaultCharacterProperties.FontName  = "Arial";
            server.Document.DefaultCharacterProperties.FontSize  = 9;
            server.Document.DefaultCharacterProperties.ForeColor = Color.FromArgb(120, 120, 120);
            server.Document.DefaultParagraphProperties.Alignment = ParagraphAlignment.Center;

            // Remove whitespaces from the end of RTF content
            DocumentRange[]  dots    = server.Document.FindAll(".", SearchOptions.None);
            DocumentPosition lastDot = dots[dots.Length - 1].End;

            server.Document.Delete(server.Document.CreateRange(lastDot, server.Document.Range.End.ToInt() - lastDot.ToInt()));

            // Append formatted word
            DocumentRange       range = server.Document.InsertText(server.Document.Range.End, " [Approved]");
            CharacterProperties cp    = server.Document.BeginUpdateCharacters(range);

            cp.FontName       = "Courier New";
            cp.FontSize       = 10;
            cp.ForeColor      = Color.Red;
            cp.Underline      = UnderlineType.Single;
            cp.UnderlineColor = Color.Red;
            server.Document.EndUpdateCharacters(cp);
        }
Example #13
0
        protected void DoWriteHtml(string text, HtmlOptions options)
        {
            options ??= new HtmlOptions();

            var book = options.Book?.Document ?? Document;

            book.BeginUpdate();
            try
            {
                DocumentPosition rangeStart = null, rangeEnd = null;

                var insertOptions = string.IsNullOrWhiteSpace(options.ParagraphStyle) ? InsertOptions.KeepSourceFormatting : InsertOptions.UseDestinationStyles;
                if (options.UseDestinationStyles)
                {
                    insertOptions = InsertOptions.UseDestinationStyles;
                }
                if (options.KeepSourceFormatting)
                {
                    insertOptions = InsertOptions.KeepSourceFormatting;
                }
                var lineRange = book.AppendHtmlText(text, insertOptions);

                if (rangeStart == null)
                {
                    rangeStart = lineRange.Start;
                }

                if (!options.NoLineBreaks)
                {
                    lineRange = book.AppendText(Environment.NewLine);
                }

                rangeEnd = lineRange.End;

                if (rangeStart != null && rangeEnd != null)
                {
                    var range = book.CreateRange(rangeStart, rangeEnd.ToInt() - rangeStart.ToInt());

                    if (!string.IsNullOrWhiteSpace(options.ParagraphStyle))
                    {
                        var style = book.ParagraphStyles[options.ParagraphStyle] ?? throw new Exception($"Paragraph style '{options.ParagraphStyle}' does not exist.");
                        var pp    = book.BeginUpdateParagraphs(range);
                        try
                        {
                            pp.Style = style;
                        }
                        finally
                        {
                            book.EndUpdateParagraphs(pp);
                        }
                    }

                    Script.Book.SCBook.AddComments(book, range, options);

                    if (options.ExpandFields)
                    {
                        ExpandFieldsInBookRange(range, Host?.Spreadsheet?.Workbook, options.Snippets);
                    }

                    WriteRangeToConsole(book, range);
                }

                if (rangeEnd != null)
                {
                    book.CaretPosition = rangeEnd;
                    Script.Book.SCBook.ResetBookFormatting(book, rangeEnd);
                    ScrollToCaret();
                }
            }
            finally
            {
                book.EndUpdate();
            }
        }
Example #14
0
        protected void DoWriteContent(string fileName, ContentOptions options)
        {
            options ??= new ContentOptions();

            var book = options.Book?.Document ?? Document;

            book.BeginUpdate();
            try
            {
                DocumentPosition rangeStart = null, rangeEnd = null;

                fileName = Project.Current.MapPath(fileName);

                DocumentRange range;

                var ext = Path.GetExtension(fileName)?.ToLower();
                switch (ext)
                {
#pragma warning disable CRRSP06 // A misspelled word has been found
                case "markdown":
                case "mdown":
                case "md":
                    var content     = File.ReadAllText(fileName);
                    var htmlContent = Markdown.ToHtml(content);
                    range = book.AppendHtmlText(htmlContent, DevExpress.XtraRichEdit.API.Native.InsertOptions.KeepSourceFormatting);
                    break;

                default:
                    range = book.AppendDocumentContent(fileName);
                    break;
#pragma warning restore CRRSP06 // A misspelled word has been found
                }

                if (rangeStart == null)
                {
                    rangeStart = range.Start;
                }

                if (!options.NoLineBreaks)
                {
                    range = book.AppendText(Environment.NewLine);
                }

                rangeEnd = range.End;

                if (rangeStart != null && rangeEnd != null)
                {
                    var rangeComment = book.CreateRange(rangeStart, rangeEnd.ToInt() - rangeStart.ToInt());
                    Script.Book.SCBook.AddComments(book, rangeComment, options);
                    WriteRangeToConsole(book, range);
                }

                if (rangeEnd != null)
                {
                    book.CaretPosition = rangeEnd;
                    Script.Book.SCBook.ResetBookFormatting(book, rangeEnd);
                    ScrollToCaret();
                }
            }
            finally
            {
                book.EndUpdate();
            }
        }
        private void richEditControl1_MouseMove(object sender, MouseEventArgs e)
        {
            Point            docPoint = Units.PixelsToDocuments(e.Location, richEditControl1.DpiX, richEditControl1.DpiY);
            DocumentPosition pos      = richEditControl1.GetPositionFromPoint(docPoint);

            if (pos == null)
            {
                return;
            }

            DocumentPosition start = pos;
            DocumentPosition end   = pos;

            SubDocument doc = richEditControl1.Document.CaretPosition.BeginUpdateDocument();

            for (int i = 0; i < doc.Range.End.ToInt(); i++)
            {
                if (start.ToInt() - i < 0)
                {
                    start = doc.Range.Start;
                    break;
                }

                DocumentRange range = doc.CreateRange(start.ToInt() - i, i + 1);
                string        str   = doc.GetText(range);

                if (ContainsPunctuationOrWhiteSpace(str))
                {
                    start = doc.CreatePosition(range.Start.ToInt() + 1);
                    break;
                }
            }

            for (int i = 0; i < doc.Range.End.ToInt(); i++)
            {
                if (end.ToInt() + i > doc.Range.End.ToInt())
                {
                    end = doc.Range.End;
                    break;
                }

                DocumentRange range = doc.CreateRange(end.ToInt(), i + 1);
                string        str   = doc.GetText(range);

                if (ContainsPunctuationOrWhiteSpace(str))
                {
                    end = doc.CreatePosition(range.End.ToInt() - 1);
                    break;
                }
            }

            if (end.ToInt() < start.ToInt())
            {
                return;
            }

            DocumentRange wordRange = doc.CreateRange(start, end.ToInt() - start.ToInt());
            string        word      = doc.GetText(wordRange);

            richEditControl1.Document.CaretPosition.EndUpdateDocument(doc);

            ShowToolTip(word);
        }
Example #16
0
        private void button1_Click(object sender, EventArgs e)
        {
            RichEditDocumentServer server = new RichEditDocumentServer();

            server.LoadDocument("fish.rtf");
            DocumentRange[]  ranges = server.Document.FindAll(DevExpress.Office.Characters.PageBreak.ToString(), DevExpress.XtraRichEdit.API.Native.SearchOptions.None);
            DocumentPosition dp     = server.Document.Paragraphs[0].Range.Start;

            List <MyRtfObject> collection = new List <MyRtfObject>();

            foreach (DocumentRange dr in ranges)
            {
                DocumentRange tmpRange = server.Document.CreateRange(dp, dr.Start.ToInt() - dp.ToInt());
                collection.Add(new MyRtfObject()
                {
                    RtfSplitContent = server.Document.GetRtfText(tmpRange)
                });
                dp = dr.End;
            }
            DocumentRange tmpRange2 = server.Document.CreateRange(dp, server.Document.Paragraphs[server.Document.Paragraphs.Count - 1].Range.End.ToInt() - dp.ToInt());

            collection.Add(new MyRtfObject()
            {
                RtfSplitContent = server.Document.GetRtfText(tmpRange2)
            });

            XtraReport1 report = new XtraReport1();

            report.DataSource = collection;
            report.ShowPreviewDialog();
        }