zoukankan      html  css  js  c++  java
  • 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 copy
    19         // 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

  • 相关阅读:
    VUE中is的作用
    lable便签 for的作用
    Java第五课
    Java第四课课后作业
    Java第四课
    Unit6Java运算符
    Unit5Java数据类型
    Unit4如何使用类
    Java如何设计并编写类
    IDEA安装Alibaba,SonarLint代码规范检查插件
  • 原文地址:https://www.cnblogs.com/drsniper/p/3955255.html
Copyright © 2011-2022 走看看