Issue in Inserting a document into another at a bookmark

Hi,
Our requirement is as follows:
I have a Main Word Document (Doc1) inside which there is a bookmark (B1). I need to insert a Child Word Document(ChildDoc) at the bookmark (B1) in main word document (Doc1). I have tried using the logic given in ASPOSE documentation, it works but not per our requirement.
Poblem : Now the issue is the child document can contain anything tables, images, paragraphs, etc… its a whole document by itself. So after inserting the first document, again if we try to insert a new ChildDocument(ChildDoc2) at the same location(say bookmark B1) or try to insert the same document(ChildDoc) once again data is getting duplicated. I am able to see both the documents which i dont want. It should ideally over write the existing content at the given bookmark and insert the new content.
Requirement : When i try to insert any document or image or anything at a bookmark location in an existing document, it should delete the existing content at the given bookmark location and add the new content there. When i repeat the operation for number of times, the behaviour should be the same.
Please suggest something.
Thanks & Regards,
Suguna

Hi Suguna,

Thanks for your request. In this case, you should just clear bookmark before inserting. Please see the code below:

// Open documents.
Document dstDoc = new Document("in.doc");
Document srcDoc = new Document("src.doc");
InsertDocumentAtBookmark("Test", dstDoc, srcDoc);
dstDoc.Save("out.doc", SaveFormat.Doc);
public static void InsertDocumentAtBookmark(string bookmarkName, Document dstDoc, Document srcDoc)
{
    // Clear bookmark
    dstDoc.Range.Bookmarks[bookmarkName].Text = string.Empty;
    // Create DocumentBuilder
    DocumentBuilder builder = new DocumentBuilder(dstDoc);
    // Move cursor to bookmark and insert paragraph break
    builder.MoveToBookmark(bookmarkName);
    builder.Writeln();
    // Content of srcdoc will be inserted after this node
    Node insertAfterNode = builder.CurrentParagraph.PreviousSibling;
    // Content of first paragraph of srcDoc will be apended to this parafraph
    Paragraph insertAfterParagraph = (Paragraph) insertAfterNode;
    // Content of last paragraph of srcDoc will be apended to this parafraph
    Paragraph insertBeforeParagraph = builder.CurrentParagraph;
    // We will be inserting into the parent of the destination paragraph.
    CompositeNode dstStory = insertAfterNode.ParentNode;
    // Loop through all sections in the source document.
    foreach(Section srcSection in srcDoc.Sections)
    {
        // Loop through all block level nodes (paragraphs and tables) in the body of the section.
        foreach(Node srcNode in srcSection.Body)
        {
            // Do not insert node if it is a last empty paragarph in the section.
            Paragraph para = srcNode as Paragraph;
            if (para != null && para.IsEndOfSection && !para.HasChildNodes)
                break;
            // If current paragraph is first paragraph of srcDoc
            // then append its content to insertAfterParagraph
            if (para != null && para.Equals(srcDoc.FirstSection.Body.FirstParagraph))
            {
                foreach(Node node in para.ChildNodes)
                {
                    Node dstNode = dstDoc.ImportNode(node, true, ImportFormatMode.KeepSourceFormatting);
                    insertAfterParagraph.AppendChild(dstNode);
                }
            }
            // If current paragraph is last paragraph of srcDoc
            // then append its content to insertBeforeParagraph
            else
            {
                // This creates a clone of the node, suitable for insertion into the destination document.
                Node newNode = dstDoc.ImportNode(srcNode, true, ImportFormatMode.KeepSourceFormatting);
                // Insert new node after the reference node.
                dstStory.InsertAfter(newNode, insertAfterNode);
                insertAfterNode = newNode;
            }
        }
    }
    if (!insertBeforeParagraph.HasChildNodes)
        insertBeforeParagraph.Remove();
}

Best regards,

The issues you have found earlier (filed as WORDSNET-5251) have been fixed in this .NET update and this Java update.

This message was posted using Notification2Forum from Downloads module by aspose.notifier.
(10)