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; } }
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); }
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(); } } }
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); }
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(); } }
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); }
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(); }