This article explains how you could import a document element from one document into another using the API of RadWordsProcessing.
DocumentElementImporter class represents a utility class, which is used to import document elements from one document to another. It also handles the style repository merging.
The constructor of the DocumentElementImporter class accepts three parameters:
- targetDocument: The RadFlowDocument instance for which the elements will be prepared for inserting.
- sourceDocument: The RadFlowDocument from where the elements will be imported.
- conflictingStylesResolutionMode: Represents the resolution mode, which will be used if a style conflict appears during the style repositories merging. Could be set to one of the values of the ConflictingStylesResolutionMode enumeration.
Example 1: Create DocumentElementImporter
DocumentElementImporter importer = new DocumentElementImporter(targetDocument, sourceDocument, ConflictingStylesResolutionMode.UseTargetStyle);
The DocumentElementImporter class exposes the Import<T>() method, which is used to prepare a document element from the source document for import into the target document. Example 2 demonstrates how you could work with this method, using the DocumentElementImporter instance, created in Example 1.
Example 2: Import a document element
Run run = targetDocument.EnumerateChildrenOfType<Run>().First(); Run importedRun = importer.Import<Run>(run);
Now you could insert the imported document element into the target document through the RadFlowDocumentEditor class. How this could be achieved is described here.
The merging of the styles between the two documents (target and source) is executed when the Import() method is invoked for the first time.
In Table 1 is described the behavior of the Import<T>() method of DocumentElementImporter in different scenarios.
|Invoke Import() method with a document element.||Returns the document element cloned.|
|Invoke Import() method with a paragraph, which contains unpaired annotation marker (e.g. there is a Bookmark, which is spanned between two paragraphs, one of which is passed as a parameter).||Returns the paragraph and all its inlines cloned. The unpaired annotation marker is cleared.|
|Invoke Import() method with a section, which contains paragraphs which contain by their side unpaired annotations (e.g. there is a Bookmark, which is spanned between two paragraphs and their parent section is passed as a parameter).||Returns the section and all its children cloned. The annotation markers are not cleared.|
|Invoke Import() method with a paragraph, which has a style, renamed during the styles merging.||Returns the paragraph and all its children cloned with the correctly renamed StyleId property.|
|Invoke Import() method with a paragraph, which has a style, renamed during the styles merging multiple times.||Returns the paragraph and all its children cloned with the correctly renamed StyleId property.|
|Invoke Import() method with a document element, which is not a child of the source document.||Throws an InvalidOperationException.|