From d4d7538b30ce9b98d84c8de5a12ef8f26cf7ae30 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Fri, 5 Dec 2025 01:06:24 +0200 Subject: [PATCH 1/2] 4 KB articles. --- ...rds-processing-change-bookmark-content.png | Bin 0 -> 11576 bytes .../words-processing-change-sdt-content.png | Bin 0 -> 17477 bytes ...dpdfprocessing-draw-pdf-page-background.md | 65 +++++++ ...essing-protect-specific-worksheet-cells.md | 78 ++++++++ ...ge-bookmark-content-preserve-formatting.md | 83 +++++++++ ...sing-modify-content-of-content-controls.md | 166 ++++++++++++++++++ .../radpdfprocessing/concepts/geometry.md | 1 + .../features/protection/worksheet.md | 1 + .../radwordsprocessing/model/bookmark.md | 1 + .../content-controls/content-controls.md | 1 + 10 files changed, 396 insertions(+) create mode 100644 knowledge-base/images/words-processing-change-bookmark-content.png create mode 100644 knowledge-base/images/words-processing-change-sdt-content.png create mode 100644 knowledge-base/radpdfprocessing-draw-pdf-page-background.md create mode 100644 knowledge-base/radspreadprocessing-protect-specific-worksheet-cells.md create mode 100644 knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md create mode 100644 knowledge-base/radwordsprocessing-modify-content-of-content-controls.md diff --git a/knowledge-base/images/words-processing-change-bookmark-content.png b/knowledge-base/images/words-processing-change-bookmark-content.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf0bb03c0fee416990d19ed773a17a2eb714928 GIT binary patch literal 11576 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 vdB++W`i521 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 literal 0 HcmV?d00001 diff --git a/knowledge-base/radpdfprocessing-draw-pdf-page-background.md b/knowledge-base/radpdfprocessing-draw-pdf-page-background.md new file mode 100644 index 00000000..614cf2f4 --- /dev/null +++ b/knowledge-base/radpdfprocessing-draw-pdf-page-background.md @@ -0,0 +1,65 @@ +--- +title: Draw a PDF Page Background Using RadPdfProcessing +description: Learn how to draw a PDF page background by adding a colored rectangle behind the page content using RadPdfProcessing. +type: how-to +page_title: Draw PDF Page Background +slug: radpdfprocessing-draw-pdf-page-background +tags: pdf, processing, background, page, content, rectangle, color, fixed, document, draw +res_type: kb +--- + +## Environment + +| Version | Product | Author | +| ---- | ---- | ---- | +| 2025.4.1104 | RadPdfProcessing | [Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov) | + +## Description + +To draw a page background, you can create a colored [rectangle]({%slug radpdfprocessing-concepts-geometry%}#rectanglegeometry) and insert it at the beginning of the page's content collection so that it renders behind the rest of the content. + +## Solution + +The approach is to import the PDF, create a rectangle path sized to the page, and insert it into the page content at index `0` (first position). + +### Key Points +* PDF pages don't have a built-in background property. Draw a rectangle to create a background. +* Backgrounds are typically the first element in the page content, subsequent elements render above earlier ones. +* Insert at index `0` to draw a background behind all content. +* Size the rectangle to match `firstPage.Size` for full-page coverage. + +```csharp +RadFixedDocument inputDocument; +PdfFormatProvider pdfFormatProvider = new PdfFormatProvider(); + +using (System.IO.Stream input = System.IO.File.OpenRead("input.pdf")) +{ + inputDocument = pdfFormatProvider.Import(input); +} + +RadFixedPage firstPage = inputDocument.Pages.First(); + +// Create the background +RectangleGeometry rectangleGeometry = new RectangleGeometry(); +rectangleGeometry.Rect = new Rect(1, 1, firstPage.Size.Width, firstPage.Size.Height); + +Telerik.Windows.Documents.Fixed.Model.Graphics.Path path = new Telerik.Windows.Documents.Fixed.Model.Graphics.Path(); +path.Geometry = rectangleGeometry; + +path.IsFilled = true; +path.Fill = new RgbColor(100, 150, 0, 0); + +// Insert the background (at position 1) into the first page +firstPage.Content.Insert(0, path); // Use index '1' if the document already has a set background + +string pdfOutputPath = "output.pdf"; + +System.IO.File.Delete(pdfOutputPath); +using (System.IO.Stream output = System.IO.File.OpenWrite(pdfOutputPath)) +{ + pdfFormatProvider.Export(inputDocument, output, TimeSpan.FromSeconds(10)); +} +``` +## See Also +* [RadPdfProcessing Overview]({%slug radpdfprocessing-overview%}) + diff --git a/knowledge-base/radspreadprocessing-protect-specific-worksheet-cells.md b/knowledge-base/radspreadprocessing-protect-specific-worksheet-cells.md new file mode 100644 index 00000000..70eb30bd --- /dev/null +++ b/knowledge-base/radspreadprocessing-protect-specific-worksheet-cells.md @@ -0,0 +1,78 @@ +--- +title: Protect Specific Worksheet Cells Using RadSpreadProcessing +description: Learn how to lock only specific worksheet cells while keeping the rest editable using RadSpreadProcessing. +type: how-to +page_title: Protect Specific Cells in RadSpreadProcessing +slug: radspreadprocessing-protect-specific-worksheet-cells +tags: spread, processing, worksheet, protection, lock, cells, used, range, performance, document +res_type: kb +--- + +## Environment + +| Version | Product | Author | +| ---- | ---- | ---- | +| 2025.4.1104 | RadSpreadProcessing | [Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov) | + +## Description + +This article shows how to protect only certain cells in a [Worksheet]({%slug radspreadprocessing-working-with-worksheets-what-is-worksheet%}) using [SpreadProcessing]({%slug radspreadprocessing-overview%}). The example demonstrates the most efficient way to keep all cells unlocked except the first row of a used range, which will remain locked and protected. + +## Solution + +In [SpreadProcessing]({%slug radspreadprocessing-overview%}), [Worksheet protection]({%slug radspreadprocessing-features-protection-worksheet%}) locks all cells by default. To protect only specific cells: + +1. Protect the worksheet. +2. Unlock all columns (faster than iterating rows). +3. Determine the used cell range. +4. Lock only the first row cells within the used range. +5. Export the result. + +Below is a complete example: + +```csharp +Workbook workbook; +IWorkbookFormatProvider xlsxFormatProvider = new XlsxFormatProvider(); + +using (Stream input = new FileStream("input.xlsx", FileMode.Open)) +{ + workbook = xlsxFormatProvider.Import(input, TimeSpan.FromSeconds(10)); +} + +Worksheet worksheet = workbook.ActiveWorksheet; + +// Protect the worksheet (default options) +worksheet.Protect("telerik", WorksheetProtectionOptions.Default); + +// Unlock all columns in the worksheet (empty ones included) +for (int columnIndex = 0; columnIndex <= SpreadsheetDefaultValues.ColumnCount - 1; columnIndex++) +{ + worksheet.Columns[columnIndex].SetIsLocked(false); +} + +// Get the used cells range +CellRange usedCellRange = worksheet.UsedCellRange; + +// Lock all first row cells of the used range +for (int columnIndex = usedCellRange.FromIndex.ColumnIndex; columnIndex <= usedCellRange.ToIndex.ColumnIndex; columnIndex++) +{ + CellSelection cell = worksheet.Cells[0, columnIndex]; + cell.SetIsLocked(true); +} + +// Export to XLSX +string xlsxOutputPath = "output.xlsx"; +using (Stream output = new FileStream(xlsxOutputPath, FileMode.Create)) +{ + xlsxFormatProvider.Export(workbook, output, TimeSpan.FromSeconds(10)); +} +``` + +### Key Points +* Protecting columns instead of rows is significantly faster because the maximum number of columns (16,384) is far smaller than the maximum number of rows (1,048,576). +* By unlocking all columns first, you can selectively lock only the cells you need before applying protection. + +## See Also +* [RadSpreadProcessing Overview]({%slug radspreadprocessing-overview%}) +* [Worksheet Protection]({%slug radspreadprocessing-features-protection-worksheet%}) +* [Iterating Used Cells]({%slug radspreadprocessing-working-with-cells-iterating-used-cells%}) diff --git a/knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md b/knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md new file mode 100644 index 00000000..06dc3931 --- /dev/null +++ b/knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md @@ -0,0 +1,83 @@ +--- +title: Change Bookmark Content While Preserving Formatting using WordsProcessing +description: Change the content of a bookmark while preserving its original formatting and properties using the WordsProcessing library. +type: how-to +page_title: Change Bookmark Content While Preserving Formatting +slug: radwordsprocessing-change-bookmark-content-preserve-formatting +position: 0 +tags: bookmarks, formatting, words, processing, content, replace, change, flow, docx +res_type: kb +--- + +|Product Version|Product|Author| +|----|----|----| +|2025.4.1104|RadWordsProcessing|[Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov)| + +## Description + +This article shows how to change the content of an existing [Bookmark]({%slug radwordsprocessing-model-bookmark%}) in a DOCX document while preserving the original text formatting and character properties using the [WordsProcessing]({%slug radwordsprocessing-overview%}) library. + +## Solution + +* **Import DOCX**: Use [DocxFormatProvider]({%slug radwordsprocessing-formats-and-conversion-docx-format-provider%}) to read the input DOCX and obtain a [RadFlowDocument]({%slug radwordsprocessing-model-radflowdocument%}). +* **Initialize editor**: Create a [RadFlowDocumentEditor]({%slug radwordsprocessing-editing-radflowdocumenteditor%}) for cursor movement and editing. +* **Find bookmark**: Enumerate [BookmarkRangeStart]({%slug radwordsprocessing-model-form-bookmarkrangestart%}) elements and select the bookmark by **Name**. +* **Capture formatting**: Get the first [Run]({%slug radwordsprocessing-model-textfragment-run%}) within the bookmark and copy its **CharacterFormatting** properties. +* **Delete original bookmark content**: Delete only the content between the start and end markers while keeping the bookmark structure intact. +* **Position cursor**: Move the editor back to the start of the bookmark to insert new text in place. +* **Copy formatting**: Apply the formatting of the original bookmark content to the editor properties. +* **Insert text**: Add the replacement content. +* **Export DOCX**: Write the updated document using [DocxFormatProvider]({%slug radwordsprocessing-formats-and-conversion-docx-format-provider%}). + +#### [C#] Replace bookmark content but keep formatting + +```csharp +RadFlowDocument document; +DocxFormatProvider docxFormatProvider = new DocxFormatProvider(); + +using (Stream input = File.OpenRead("input.docx")) +{ + document = docxFormatProvider.Import(input); + RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document); + + var documentBookmarks = document.EnumerateChildrenOfType().Select(b => b.Bookmark).ToList(); + + // Obtain bookmark by name + var specificBookmarkByName = documentBookmarks.FirstOrDefault(b => b.Name == "bookmark1"); + // Obtain the first Run element inside the bookmark to copy its formatting + Run oldBookmarkText = (Run)specificBookmarkByName.BookmarkRangeStart.Paragraph.Inlines.FirstOrDefault(i => i is Run); + + // Keep the bookmark and just change the content + editor.DeleteContent(specificBookmarkByName.BookmarkRangeStart, specificBookmarkByName.BookmarkRangeEnd, false); + editor.MoveToInlineEnd(specificBookmarkByName.BookmarkRangeStart); + + // Apply the old formatting to the editor Method 1 + + editor.CharacterFormatting.CopyPropertiesFrom(oldBookmarkText.Properties); + + // Apply the old formatting to the editor Method 2 + + editor.CharacterFormatting.FontSize.LocalValue = oldBookmarkText.FontSize; + editor.CharacterFormatting.FontFamily.LocalValue = oldBookmarkText.FontFamily; + editor.CharacterFormatting.FontStyle.LocalValue = oldBookmarkText.FontStyle; + editor.CharacterFormatting.FontWeight.LocalValue = oldBookmarkText.FontWeight; + editor.CharacterFormatting.Strikethrough.LocalValue = oldBookmarkText.Strikethrough; + editor.CharacterFormatting.FlowDirection.LocalValue = oldBookmarkText.FlowDirection; + editor.CharacterFormatting.BaselineAlignment.LocalValue = oldBookmarkText.BaselineAlignment; + editor.CharacterFormatting.ForegroundColor.LocalValue = oldBookmarkText.ForegroundColor; + editor.CharacterFormatting.HighlightColor.LocalValue = oldBookmarkText.HighlightColor; + editor.CharacterFormatting.UnderlineColor.LocalValue = oldBookmarkText.Underline.Color; + editor.CharacterFormatting.UnderlinePattern.LocalValue = oldBookmarkText.Underline.Pattern; + + editor.InsertText("NEW CONTENT"); + + using (Stream output = File.OpenWrite("output.docx")) + { + docxFormatProvider.Export(document, output); + } +} +``` +![WordsProcessing Change Bookmark Content](images/words-processing-change-bookmark-content.png) + +## See Also +* [Bookmark]({%slug radwordsprocessing-model-bookmark%}) diff --git a/knowledge-base/radwordsprocessing-modify-content-of-content-controls.md b/knowledge-base/radwordsprocessing-modify-content-of-content-controls.md new file mode 100644 index 00000000..3da9f62e --- /dev/null +++ b/knowledge-base/radwordsprocessing-modify-content-of-content-controls.md @@ -0,0 +1,166 @@ +--- +title: Modify the Content of Content Controls (SDTs) using WordsProcessing +description: Learn how to change the content inside Structured Document Tags (Content Controls) by editing the document elements between their start and end markers. +type: how-to +page_title: How to Modify the Content of Structured Document Tags (Content Controls) +slug: radwordsprocessing-modify-content-controls +tags: content, controls, sdt, words, processing, structured, document, tags, flow, docx, fields +res_type: kb +--- + +## Environment + +| Version | Product | Author | +| --- | --- | ---- | +| 2025.4.1104 | RadWordsProcessing | [Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov) | + +## Description +Structured Document Tags (SDTs), also known as [Content Controls]({%slug wordsprocessing-model-content-controls%}), are implemented in [WordsProcessing]({%slug radwordsprocessing-overview%}) using annotation markers. The markers are placed before and after the control’s content - **SdtRangeStart** at the beginning and **SdtRangeEnd** at the end. To modify the content of a content control, you must change the document elements between these two markers. + +## Solution + +The following example covers: + +* **Load and parse**: Imports an input DOCX using **DocxFormatProvider** and retrieves all SDTs via **EnumerateChildrenOfType()**. +* **Classify by alias**: Iterates each SDT and uses **SdtProperties.Alias** to route updates for specific control types: "RichText", "ComboBox", "CheckBox", and "DatePicker". +* **Preserve formatting**: For inline SDTs, collects all **Run** elements between **SdtRangeStart** and **SdtRangeEnd**, removes all but the first **Run**, and reuses that first **Run** to keep existing text formatting. +* **Update values**: + * **RichText**: Sets the first run’s **Text** to the new string. + * **ComboBox**: Sets the first run’s **Text** to the selected item display text (e.g., "Item 3"). + * **CheckBox**: Toggles **CheckBoxProperties.Checked** and updates the glyph in the first run using the appropriate **SdtCheckBoxState** (font + character code). + * **DatePicker**: Formats **DateTime.Now** using the SDT’s **DateProperties.DateFormat** and assigns the result to the first run’s **Text**. +* **Save and open**: Exports the modified **RadFlowDocument** back to DOCX and opens the file to verify the changes. + +```csharp +const string InputFile = "input.docx"; +const string OutputFile = "output.docx"; + +static void Main(string[] args) +{ + var provider = new DocxFormatProvider(); + var document = provider.Import(File.ReadAllBytes(InputFile), null); + var sdtRangeStarts = document.EnumerateChildrenOfType().ToList(); + + foreach (var sdtRangeStart in sdtRangeStarts) + { + if (sdtRangeStart.SdtProperties.Alias == "RichText") + { + ChangeRichTextValue(sdtRangeStart, "New RichText Value"); + } + else if (sdtRangeStart.SdtProperties.Alias == "ComboBox") + { + ChangeComboBoxValue(sdtRangeStart, "Item 3"); + } + else if (sdtRangeStart.SdtProperties.Alias == "CheckBox") + { + ChangeCheckBoxValue(sdtRangeStart); + } + else if (sdtRangeStart.SdtProperties.Alias == "DatePicker") + { + ChangeDatePickerValue(sdtRangeStart, DateTime.Now); + } + } + + var bytes = provider.Export(document, null); + File.WriteAllBytes(OutputFile, bytes); + Process.Start(new ProcessStartInfo(OutputFile) { UseShellExecute = true }); +} + +private static void ChangeDatePickerValue(SdtRangeStart sdtRangeStart, DateTime now) +{ + var firstRun = ReturnFirstRunAndRemoveOthersFromSdt(sdtRangeStart); + + var properties = (DateProperties)sdtRangeStart.SdtProperties; + firstRun.Text = now.ToString(properties.DateFormat); +} + +private static void ChangeRichTextValue(SdtRangeStart sdtRangeStart, string value) +{ + var firstRun = ReturnFirstRunAndRemoveOthersFromSdt(sdtRangeStart); + + firstRun.Text = value; +} + +private static void ChangeComboBoxValue(SdtRangeStart sdtRangeStart, string value) +{ + var firstRun = ReturnFirstRunAndRemoveOthersFromSdt(sdtRangeStart); + + firstRun.Text = value; +} + +private static void ChangeCheckBoxValue(SdtRangeStart sdtRangeStart) +{ + var firstRun = ReturnFirstRunAndRemoveOthersFromSdt(sdtRangeStart); + CheckBoxProperties properties = (CheckBoxProperties)sdtRangeStart.SdtProperties; + if (properties.Checked.HasValue && properties.Checked.Value) + { + properties.Checked = false; + + // If check box is currently checked, change it to unchecked + ApplyNewCheckBoxState(firstRun, properties.UncheckedState); + } + else + { + properties.Checked = true; + + // If check box is currently unchecked, change it to checked + ApplyNewCheckBoxState(firstRun, properties.CheckedState); + } +} + +private static void ApplyNewCheckBoxState(Run run, SdtCheckBoxState state) +{ + if (run != null) + { + run.Properties.FontFamily.LocalValue = new ThemableFontFamily(state.Font); + run.Text = ((char)state.CharacterCode).ToString(); + } +} + +private static Run ReturnFirstRunAndRemoveOthersFromSdt(SdtRangeStart sdtRangeStart) +{ + var runs = GetRunsInsideSdt(sdtRangeStart); + + // Remove all but the first run inside the SdtRangeStart + // We want to keep the first run because it contains the formatting of the text + var paragraph = sdtRangeStart.Paragraph; + for (int i = 1; i < runs.Count; i++) + { + paragraph.Inlines.Remove(runs[i]); + } + + return runs[0]; +} + +private static IList GetRunsInsideSdt(SdtRangeStart sdtRangeStart) +{ + List runs = new List(); + var paragraph = sdtRangeStart.Paragraph; + var sdtStartIndex = paragraph.Inlines.IndexOf(sdtRangeStart); + for (int i = sdtStartIndex + 1; i < paragraph.Inlines.Count; i++) + { + if (paragraph.Inlines[i] is SdtRangeEnd sdtRangeEnd && sdtRangeEnd.Start == sdtRangeStart) + { + return runs; + } + + if (paragraph.Inlines[i] is Run run) + { + runs.Add(run); + } + } + + // It is possible that the SdtRangeEnd is inside another Paragraph + // For demo purposes we will handle only the case where the SdtRangeEnd is in the same Paragraph + return runs; +} +``` +![WordsProcessing Change SDT Content](images/words-processing-change-sdt-content.png) + +### Notes +* Use [RadFlowDocumentEditor]({%slug radwordsprocessing-editing-radflowdocumenteditor%}) for higher-level operations like inserting SDTs via **InsertStructuredDocumentTag**. +* The content control type (plain text, combo box, checkbox, etc.) is available through **SdtProperties.Type**. Adjust the replacement logic based on the control type when necessary. +* Content controls can exist at different levels (block, inline, row, cell). Ensure you modify the correct collection (**Inlines**, **Blocks**, **Cells**, etc.) depending on where the SDT is placed. See [**Content Controls**]({%slug wordsprocessing-model-content-controls%}). + +## See Also +* [Content Controls]({%slug wordsprocessing-model-content-controls%}) \ No newline at end of file diff --git a/libraries/radpdfprocessing/concepts/geometry.md b/libraries/radpdfprocessing/concepts/geometry.md index ff408ba4..ce8ba299 100644 --- a/libraries/radpdfprocessing/concepts/geometry.md +++ b/libraries/radpdfprocessing/concepts/geometry.md @@ -148,3 +148,4 @@ Represents an elliptical arc between two points. The __ArcSegment__ exposes the * [Path]({%slug radpdfprocessing-model-path%}) * [FixedContentEditor]({%slug radpdfprocessing-editing-fixedcontenteditor%}) * [How to Draw Figures in PDF documents]({%slug pdf-processing-draw-figures-arcsegment%}) + * [Draw a PDF Page Background Using RadPdfProcessing]({%slug radpdfprocessing-draw-pdf-page-background%}) diff --git a/libraries/radspreadprocessing/features/protection/worksheet.md b/libraries/radspreadprocessing/features/protection/worksheet.md index 55855984..4837a4f4 100644 --- a/libraries/radspreadprocessing/features/protection/worksheet.md +++ b/libraries/radspreadprocessing/features/protection/worksheet.md @@ -96,3 +96,4 @@ The __WorksheetProtectionOptions__ class exposes the following properties so you * [What is a Worksheet?]({%slug radspreadprocessing-working-with-worksheets-what-is-worksheet%}) * [Workbook Protection]({%slug radspreadprocessing-features-protection-workbook%}) + * [Protect Specific Worksheet Cells Using RadSpreadProcessing]({%slug radspreadprocessing-protect-specific-worksheet-cells%}) diff --git a/libraries/radwordsprocessing/model/bookmark.md b/libraries/radwordsprocessing/model/bookmark.md index 78f35020..adadd72c 100644 --- a/libraries/radwordsprocessing/model/bookmark.md +++ b/libraries/radwordsprocessing/model/bookmark.md @@ -73,3 +73,4 @@ __Example 3__ demonstrates how you can delete the bookmark created in __Example * [Paragraph]({%slug radwordsprocessing-model-paragraph%}) * [RadFlowDocumentEditor]({%slug radwordsprocessing-editing-radflowdocumenteditor%}) * [Finding a Table Containing a Specific Bookmark in Word Documents]({%slug radwordsprocessing-find-table-by-bookmark%}) + * [Change Bookmark Content While Preserving Formatting]({%slug radwordsprocessing-change-bookmark-content-preserve-formatting%}) diff --git a/libraries/radwordsprocessing/model/content-controls/content-controls.md b/libraries/radwordsprocessing/model/content-controls/content-controls.md index 29d78e8b..f125270c 100644 --- a/libraries/radwordsprocessing/model/content-controls/content-controls.md +++ b/libraries/radwordsprocessing/model/content-controls/content-controls.md @@ -208,5 +208,6 @@ The __Text__ content control allows you to enter plain text. The text content co * [Working with Content Controls]({%slug wordsprocessing-model-working-with-content-controls%}) * [Generating Dynamic DOCX Documents with Tables and CheckBoxes using RadWordsProcessing]({%slug dynamic-docx-document-generation-radwordsprocessing%}) * [How to Clone and Populate Repeating Section Content Controls in RadWordsProcessing]({%slug clone-repeating-section-content-control-radwordsprocessing%}) + * [Modify the Content of Content Controls (SDTs) using WordsProcessing]({%slug radwordsprocessing-modify-content-controls%}) From f51ec2de26c016134cac9681e0bb7a5449a7c33f Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 8 Dec 2025 18:25:03 +0200 Subject: [PATCH 2/2] Fixed Slugs. --- ...cessing-change-bookmark-content-preserve-formatting.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md b/knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md index 06dc3931..86670679 100644 --- a/knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md +++ b/knowledge-base/radwordsprocessing-change-bookmark-content-preserve-formatting.md @@ -19,15 +19,15 @@ This article shows how to change the content of an existing [Bookmark]({%slug ra ## Solution -* **Import DOCX**: Use [DocxFormatProvider]({%slug radwordsprocessing-formats-and-conversion-docx-format-provider%}) to read the input DOCX and obtain a [RadFlowDocument]({%slug radwordsprocessing-model-radflowdocument%}). +* **Import DOCX**: Use [DocxFormatProvider]({%slug radwordsprocessing-formats-and-conversion-docx-docxformatprovider%}) to read the input DOCX and obtain a [RadFlowDocument]({%slug radwordsprocessing-model-radflowdocument%}). * **Initialize editor**: Create a [RadFlowDocumentEditor]({%slug radwordsprocessing-editing-radflowdocumenteditor%}) for cursor movement and editing. -* **Find bookmark**: Enumerate [BookmarkRangeStart]({%slug radwordsprocessing-model-form-bookmarkrangestart%}) elements and select the bookmark by **Name**. -* **Capture formatting**: Get the first [Run]({%slug radwordsprocessing-model-textfragment-run%}) within the bookmark and copy its **CharacterFormatting** properties. +* **Find bookmark**: Enumerate [BookmarkRangeStart]({%slug radwordsprocessing-model-bookmark%}) elements and select the bookmark by **Name**. +* **Capture formatting**: Get the first [Run]({%slug radwordsprocessing-model-run%}) within the bookmark and copy its **CharacterFormatting** properties. * **Delete original bookmark content**: Delete only the content between the start and end markers while keeping the bookmark structure intact. * **Position cursor**: Move the editor back to the start of the bookmark to insert new text in place. * **Copy formatting**: Apply the formatting of the original bookmark content to the editor properties. * **Insert text**: Add the replacement content. -* **Export DOCX**: Write the updated document using [DocxFormatProvider]({%slug radwordsprocessing-formats-and-conversion-docx-format-provider%}). +* **Export DOCX**: Write the updated document using [DocxFormatProvider]({%slug radwordsprocessing-formats-and-conversion-docx-docxformatprovider%}). #### [C#] Replace bookmark content but keep formatting