使用 NodeImporter 导入节点
使用 NodeImporter 导入节点
本指南展示了如何在两个不同的 Document 在 Aspose.Words FOSS for .NET 中的实例,使用专用的 NodeImporter 类和细粒度的 ImportFormatOptions,用于需要高效导入大量节点或在基本的 ImportFormatMode 选择之外的行为控制的场景。对于更简单的 Document.ImportNode, Document.AppendDocument,以及 DocumentBuilder.InsertDocument 便利方法,请参阅 使用文档 指南。
NodeImporter:无需重复设置的重复导入
NodeImporter 旨在实现从一个文档到另一个文档的重复节点导入,避免每次调用单次使用导入所产生的设置开销。使用 new NodeImporter(srcDoc, dstDoc, importFormatMode) 创建一个实例——或使用重载的 new NodeImporter(srcDoc, dstDoc, importFormatMode, importFormatOptions) 进行更细致的控制——一次即可,然后对每个需要导入的节点在同一实例上调用 ImportNode(srcNode, isImportChildren)。在多次调用中复用同一个 NodeImporter 实例,可避免每次便利导入所产生的设置成本。
使用 ImportFormatOptions 的细粒度导入控制
ImportFormatOptions 在基本的 ImportFormatMode 选项(UseDestinationStyles、KeepSourceFormatting、KeepDifferentStyles)之上提供了更细致的开关:SmartStyleBehavior(布尔)控制源与目标中同名样式的导入方式。KeepSourceNumbering(布尔)控制在源和目标之间编号冲突时的导入方式。IgnoreTextBoxes 和 IgnoreHeaderFooter(布尔)在 KeepSourceFormatting 生效时专门抑制文本框以及页眉/页脚内容的源格式。MergePastedLists(布尔)将粘贴的列表与周围的列表合并,而不是保持分离。ForceCopyStyles(布尔)在 KeepSourceFormatting 模式下复制冲突的样式,而不是复用目标的版本。AdjustSentenceAndWordSpacing(布尔)自动调整间距。AppendDocumentWithNewPage(布尔)强制首个导入章节的类型为 NewPage。
技巧与最佳实践
- 在导入大量节点时,创建一个
NodeImporter实例并在ImportNode调用的循环中重复使用——为每个节点构建新的导入器会不必要地重复设置工作。 - 当普通的
ImportFormatMode选项不够精确时,将ImportFormatOptions实例传递给NodeImporter构造函数重载——例如,为了在整体使用KeepSourceFormatting的同时保持KeepSourceNumbering的源列表编号。 - 当
KeepSourceFormatting引入的源样式超出您仅针对这些内容类型所需的范围时,可设置IgnoreTextBoxes或IgnoreHeaderFooter。 NodeImporter.ImportNode(srcNode, isImportChildren)在签名和行为上与文档级别的导入调用相同;区别在于重用效率,而非导入语义。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| 大量节点的重复导入速度慢 | 对每个节点都使用一次便利的导入调用,而不是复用同一个 NodeImporter | 构建一个单一的 NodeImporter,并对每个节点调用其上的 ImportNode |
| 导入后列表编号意外重置 | ImportFormatOptions.KeepSourceNumbering 未设置 | 使用能够根据需要设置 KeepSourceNumbering 的 ImportFormatOptions 实例来构造 NodeImporter |
| 文本框或页眉/页脚内容会拾取不需要的源格式 | KeepSourceFormatting 模式默认会广泛应用源样式 | 在传递给 NodeImporter 的 ImportFormatOptions 上设置 IgnoreTextBoxes 或 IgnoreHeaderFooter |
FAQ
何时应使用 NodeImporter 而不是单次导入调用?
在循环中导入大量节点时——预先构建一个 NodeImporter 并重复调用 ImportNode,而不是在每次调用时都承担设置成本。
相较于 ImportFormatMode,ImportFormatOptions 额外增加了什么?
更细致的开关,例如 SmartStyleBehavior、KeepSourceNumbering、IgnoreTextBoxes、IgnoreHeaderFooter、MergePastedLists、ForceCopyStyles、AdjustSentenceAndWordSpacing 和 AppendDocumentWithNewPage,叠加在基础的 ImportFormatMode 选项之上。
相较于在文档层面导入,NodeImporter.ImportNode 的行为是否不同?
不——两者都接受一个源节点和一个 isImportChildren 标志,并将其导入目标文档;NodeImporter 的存在是为了让设置只进行一次,并在多次调用中复用。
导入时,我如何保持源文档的列表编号完整?
使用 ImportFormatOptions 构造 NodeImporter,其中 KeepSourceNumbering 为 true。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
NodeImporter | 在多个调用之间重复将节点从一个文档导入到另一个文档,并复用设置 |
NodeImporter(srcDoc, dstDoc, importFormatMode) | 仅用于基本导入格式模式的构造函数 |
NodeImporter(srcDoc, dstDoc, importFormatMode, importFormatOptions) | 接受细粒度 ImportFormatOptions 的构造函数 |
NodeImporter.ImportNode(srcNode, isImportChildren) | 将节点从源文档导入到目标文档 |
ImportFormatOptions | 在 ImportFormatMode 之上叠加的细粒度导入设置 |
ImportFormatOptions.SmartStyleBehavior | 如何导入同名样式 |
ImportFormatOptions.KeepSourceNumbering | 如何导入冲突的编号 |
ImportFormatOptions.IgnoreTextBoxes / IgnoreHeaderFooter | 在 KeepSourceFormatting 下抑制文本框/页眉页脚的源格式 |
ImportFormatOptions.MergePastedLists | 将粘贴的列表与周围的列表合并 |
ImportFormatOptions.ForceCopyStyles | 复制冲突的样式,而不是复用目标的版本 |
ImportFormatOptions.AppendDocumentWithNewPage | 强制将第一个导入的部分类型设置为 NewPage |