|
| 1 | +using Syncfusion.DocIO; |
| 2 | +using Syncfusion.DocIO.DLS; |
| 3 | +using System.IO; |
| 4 | + |
| 5 | +namespace Preserve_bookmarks_from_cloned_content |
| 6 | +{ |
| 7 | + class Program |
| 8 | + { |
| 9 | + static void Main(string[] args) |
| 10 | + { |
| 11 | + using (FileStream fileStreamPath = new FileStream(Path.GetFullPath(@"Data/Input.docx"), FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) |
| 12 | + { |
| 13 | + //Open an existing Word document. |
| 14 | + using (WordDocument document = new WordDocument(fileStreamPath, FormatType.Automatic)) |
| 15 | + { |
| 16 | + //Create the bookmark navigator instance to access the bookmark. |
| 17 | + BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document); |
| 18 | + //Moves the virtual cursor to the location before the end of the bookmark "MainContent". |
| 19 | + bookmarkNavigator.MoveToBookmark("MainContent"); |
| 20 | + //Get the content of the "MainContent" bookmark as WordDocumentPart. |
| 21 | + WordDocumentPart wordDocumentPart = bookmarkNavigator.GetContent(); |
| 22 | + |
| 23 | + //Find the "MainContent" bookmark in the document by its name. |
| 24 | + Bookmark bookmark = document.Bookmarks.FindByName("MainContent"); |
| 25 | + //Identify the parent text body of the bookmark. |
| 26 | + WTextBody textbody = bookmark.BookmarkStart.OwnerParagraph.Owner as WTextBody; |
| 27 | + //Determine the index of the paragraph containing the bookmark. |
| 28 | + int index = textbody.ChildEntities.IndexOf(bookmark.BookmarkStart.OwnerParagraph); |
| 29 | + |
| 30 | + //Remove the "MainContent" bookmark from the document. |
| 31 | + document.Bookmarks.Remove(bookmark); |
| 32 | + //Remove inner bookmarks (SubContent1, SubContent2, SubContent3) from the document. |
| 33 | + bookmark = document.Bookmarks.FindByName("SubContent1"); |
| 34 | + document.Bookmarks.Remove(bookmark); |
| 35 | + bookmark = document.Bookmarks.FindByName("SubContent2"); |
| 36 | + document.Bookmarks.Remove(bookmark); |
| 37 | + bookmark = document.Bookmarks.FindByName("SubContent3"); |
| 38 | + document.Bookmarks.Remove(bookmark); |
| 39 | + |
| 40 | + //Insert the cloned content of the "MainContent" bookmark after the original bookmark paragraph. |
| 41 | + if (wordDocumentPart.Sections[0].ChildEntities[0] is WTextBody) |
| 42 | + { |
| 43 | + WTextBody clonedTextBody = wordDocumentPart.Sections[0].ChildEntities[0] as WTextBody; |
| 44 | + for (int i = 0, j = index + 1; i < clonedTextBody.ChildEntities.Count; i++, j++) |
| 45 | + { |
| 46 | + textbody.ChildEntities.Insert(j, clonedTextBody.ChildEntities[i]); |
| 47 | + } |
| 48 | + } |
| 49 | + //Close the WordDocumentPart instance. |
| 50 | + wordDocumentPart.Close(); |
| 51 | + //Create file stream. |
| 52 | + using (FileStream outputFileStream = new FileStream(Path.GetFullPath(@"Output/Output.docx"), FileMode.Create, FileAccess.ReadWrite)) |
| 53 | + { |
| 54 | + //Save the Word document to file stream. |
| 55 | + document.Save(outputFileStream, FormatType.Docx); |
| 56 | + } |
| 57 | + } |
| 58 | + } |
| 59 | + } |
| 60 | + } |
| 61 | +} |
0 commit comments