首页 > 代码库 > Aspose.Words:如何添加另一个WORD文档中的Node对象
Aspose.Words:如何添加另一个WORD文档中的Node对象
首先看一段代码,这段代码意图从docSource中获取第一个表格,并插入docTarget的末尾:
1 var table = (Table)docSource.GetChild(NodeType.Table, 0, true);2 docTarget.FirstSection.Body.ChildNodes.Add(table);
这段代码会抛出异常:“The newChild was created from a different document than the one that created this node.”,这是什么原因呢?
原因是,对于Aspose.Words的Node对象,它的一系列样式和格式的控制,取决于它所在的DocumentBase父对象,这也是很多Aspose.Words对象声明时,必须指定它的DocumentBase参数,比如声明一个Table,应该如下:
1 Document doc=new Document();2 Table table=new Table(doc);
那么,我们有没有办法添加另一个文档中的对象呢?有,必须通过Document.ImportNode方法或者使用NodeImporter对象。
这两种方法思路都是将源文档中的Node导入到目标文档中,再追加Node到合适的位置。
Document.ImportNode
1 /// <summary> 2 /// A manual implementation of the Document.AppendDocument function which shows the general 3 /// steps of how a document is appended to another. 4 /// </summary> 5 /// <param name="dstDoc">The destination document where to append to.</param> 6 /// <param name="srcDoc">The source document.</param> 7 /// <param name="mode">The import mode to use when importing content from another document.</param> 8 public void AppendDocument(Document dstDoc, Document srcDoc, ImportFormatMode mode) 9 {10 // Loop through all sections in the source document. 11 // Section nodes are immediate children of the Document node so we can just enumerate the Document.12 foreach (Section srcSection in srcDoc)13 {14 // Because we are copying a section from one document to another, 15 // it is required to import the Section node into the destination document.16 // This adjusts any document-specific references to styles, lists, etc.17 //18 // Importing a node creates a copy of the original node, but the copy19 // is ready to be inserted into the destination document.20 Node dstSection = dstDoc.ImportNode(srcSection, true, mode);21 22 // Now the new section node can be appended to the destination document.23 dstDoc.AppendChild(dstSection);24 }25 }
NodeImporter
1 public static Document GenerateDocument(Document srcDoc, ArrayList nodes) 2 { 3 // Create a blank document. 4 Document dstDoc = new Document(); 5 // Remove the first paragraph from the empty document. 6 dstDoc.FirstSection.Body.RemoveAllChildren(); 7 8 // Import each node from the list into the new document. Keep the original formatting of the node. 9 NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KeepSourceFormatting);10 11 foreach (Node node in nodes)12 {13 Node importNode = importer.ImportNode(node, true);14 dstDoc.FirstSection.Body.AppendChild(importNode);15 }16 17 // Return the generated document.18 return dstDoc;19 }
参考文档:
http://www.aspose.com/docs/display/wordsnet/Aspose.Words.DocumentBase.ImportNode+Overload_1
Aspose.Words:如何添加另一个WORD文档中的Node对象
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。