Hi,
I’m currently using the following method to insert a document into a bookmark:
public static void InsertDocumentAtBookmark(String bookmarkName, Document dstDoc, Document srcDoc)
{
NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.UseDestinationStyles);<span style="color:green;">//Create DocumentBuilder</span> <span style="color:#2b91af;">DocumentBuilder</span> builder = <span style="color:blue;">new</span> <span style="color:#2b91af;">DocumentBuilder</span>(dstDoc); <span style="color:green;">//Move cursor to bookmark and insert paragraph break</span> builder.MoveToBookmark(bookmarkName); builder.Writeln(); <span style="color:green;">// If current paragraph is a list item, we should clear its formating.</span> <span style="color:blue;">if</span> (builder.CurrentParagraph.IsListItem) builder.ListFormat.RemoveNumbers(); <span style="color:green;">//Content of srcdoc will be inserted after this node</span> <span style="color:#2b91af;">Node</span> insertAfterNode = builder.CurrentParagraph.PreviousSibling; <span style="color:green;">//Content of first paragraph of srcDoc will be apended to this parafraph</span> <span style="color:#2b91af;">Paragraph</span> insertAfterParagraph = <span style="color:blue;">null</span>; <span style="color:blue;">if</span> (insertAfterNode.NodeType == <span style="color:#2b91af;">NodeType</span>.Paragraph) insertAfterParagraph = (<span style="color:#2b91af;">Paragraph</span>)insertAfterNode; <span style="color:green;">//Content of last paragraph of srcDoc will be apended to this parafraph</span> <span style="color:#2b91af;">Paragraph</span> insertBeforeParagraph = builder.CurrentParagraph; <span style="color:green;">//We will be inserting into the parent of the destination paragraph.</span> <span style="color:#2b91af;">CompositeNode</span> dstStory = insertAfterNode.ParentNode; <span style="color:green;">//Remove empty paragraphs from the end of document</span> <span style="color:blue;">while</span> (!((<span style="color:#2b91af;">CompositeNode</span>)srcDoc.LastSection.Body.LastChild).HasChildNodes) { srcDoc.LastSection.Body.LastParagraph.Remove(); <span style="color:blue;">if</span> (srcDoc.LastSection.Body.LastChild == <span style="color:blue;">null</span>) <span style="color:blue;">break</span>; } <span style="color:green;">//Loop through all sections in the source document.</span> <span style="color:blue;">foreach</span> (<span style="color:#2b91af;">Section</span> srcSection <span style="color:blue;">in</span> srcDoc.Sections) { <span style="color:green;">//Loop through all block level nodes (paragraphs and tables) in the body of the section.</span> <span style="color:blue;">for</span> (<span style="color:blue;">int</span> nodeIdx = 0; nodeIdx < srcSection.Body.ChildNodes.Count; nodeIdx++) { <span style="color:#2b91af;">Node</span> srcNode = srcSection.Body.ChildNodes[nodeIdx]; <span style="color:green;">//Do not insert node if it is a last empty paragarph in the section.</span> <span style="color:#2b91af;">Paragraph</span> para = <span style="color:blue;">null</span>; <span style="color:blue;">if</span> (srcNode.NodeType == <span style="color:#2b91af;">NodeType</span>.Paragraph) para = (<span style="color:#2b91af;">Paragraph</span>)srcNode; <span style="color:blue;">if</span> ((para != <span style="color:blue;">null</span>) && para.IsEndOfSection && (!para.HasChildNodes)) <span style="color:blue;">break</span>; <span style="color:green;">//If current paragraph is first paragraph of srcDoc</span> <span style="color:green;">//then appent its content to insertAfterParagraph</span> <span style="color:blue;">bool</span> nodeInserted = <span style="color:blue;">false</span>; <span style="color:blue;">if</span> (para != <span style="color:blue;">null</span> && para.Equals(srcDoc.FirstSection.Body.FirstChild)) { nodeInserted = <span style="color:blue;">true</span>; <span style="color:green;">// set this flag to know that we already processed this node.</span> <span style="color:blue;">for</span> (<span style="color:blue;">int</span> i = 0; i < para.ChildNodes.Count; i++) { <span style="color:#2b91af;">Node</span> node = para.ChildNodes[i]; <span style="color:#2b91af;">Node</span> dstNode = importer.ImportNode(node, <span style="color:blue;">true</span>); insertAfterParagraph.AppendChild(dstNode); } <span style="color:green;">//If subdocument contains only one paragraph</span> <span style="color:green;">//then copy content of insertBeforeParagraph to insertAfterParagraph</span> <span style="color:green;">//and remove insertBeforeParagraph</span> <span style="color:blue;">if</span> (srcDoc.FirstSection.Body.FirstParagraph.Equals(srcDoc.LastSection.Body.LastChild)) { <span style="color:blue;">while</span> (insertBeforeParagraph.HasChildNodes) { insertAfterParagraph.AppendChild(insertBeforeParagraph.FirstChild); } insertBeforeParagraph.Remove(); } } <span style="color:green;">//If current paragraph is last paragraph of srcDoc</span> <span style="color:green;">//then appent its content to insertBeforeParagraph</span> <span style="color:blue;">if</span> (para != <span style="color:blue;">null</span> && para.Equals(srcDoc.LastSection.Body.LastChild)) { nodeInserted = <span style="color:blue;">true</span>; <span style="color:green;">// set this flag to know that we already processed this node.</span> <span style="color:#2b91af;">Node</span> previouseNode = <span style="color:blue;">null</span>; <span style="color:blue;">for</span> (<span style="color:blue;">int</span> i = 0; i < para.ChildNodes.Count; i++) { <span style="color:#2b91af;">Node</span> node = para.ChildNodes[i]; <span style="color:#2b91af;">Node</span> dstNode = importer.ImportNode(node, <span style="color:blue;">true</span>); <span style="color:blue;">if</span> (previouseNode == <span style="color:blue;">null</span>) insertBeforeParagraph.InsertBefore(dstNode, insertBeforeParagraph.FirstChild); <span style="color:blue;">else</span> insertBeforeParagraph.InsertAfter(dstNode, previouseNode); previouseNode = dstNode; } } <span style="color:blue;">if</span> (!nodeInserted) { <span style="color:green;">//This creates a clone of the node, suitable for insertion into the destination document.</span> <span style="color:#2b91af;">Node</span> newNode = dstDoc.ImportNode(srcNode, <span style="color:blue;">true</span>); <span style="color:green;">//Insert new node after the reference node.</span> dstStory.InsertAfter(newNode, insertAfterNode); insertAfterNode = newNode; } } } }</pre>The issue I'm having is that for bullet lists, an extra tab is being inserted for each item thus causing each item to be indented to the right (See attachment). The source document was originally in Rich Text Format (RTF). Let me know if you need anymore information.<br>