克隆文档
Contents
[
Hide
]
克隆文档是创建原始文档的相同副本的过程,这可以提高性能并避免潜在的内存泄漏。
本文将解释克隆文档的主要用例以及如何使用Aspose.Words创建文档克隆。
使用克隆文档的操作
克隆操作允许您更快地创建文档,因为您不需要每次都从文件中加载和解析文档。
创建文档的克隆后,您将能够对其进行编辑并对其执行不同的操作,例如,将其与原始文档进行比较,将其追加或插入到另一个文档中。 您还可以在将克隆的元素或其内容插入到另一个文档之前修改它们。
创建文档克隆
Aspose.Words允许您使用Clone方法克隆文档,该方法执行文档的深度副本并返回它。 换句话说,它将获得DOM的完整副本。 Clone
方法加快了文档的生成速度,您只需要一行代码就可以获得文档的副本。
克隆生成一个新文档,其内容与原始文档相同,但每个原始文档的nodes的唯一副本。 您还可以使用nodeClone方法将克隆操作应用于文档节点,该方法允许您使用和不使用其子节点复制复合文档节点。
请注意,应用克隆方法时,将克隆所有文档属性。
下面的代码示例演示如何克隆文档并在该文档中创建部分的副本:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Create a Document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"This is the original document before applying the clone method"); | |
// Clone the document. | |
System::SharedPtr<Document> clone = doc->Clone(); | |
// Edit the cloned document. | |
builder = System::MakeObject<DocumentBuilder>(clone); | |
builder->Write(u"Section 1"); | |
builder->InsertBreak(BreakType::SectionBreakNewPage); | |
builder->Write(u"Section 2"); | |
// This shows what is in the document originally. The document has two sections. | |
std::cout << clone->GetText().Trim() << std::endl << std::endl; | |
// Duplicate the last section and append the copy to the end of the document. | |
auto lastSectionIdx = clone->get_Sections()->get_Count() - 1; | |
System::SharedPtr<Section> newSection = clone->get_Sections()->idx_get(lastSectionIdx)->Clone(); | |
clone->get_Sections()->Add(newSection); | |
// Check what the document contains after we changed it. | |
std::cout << clone->GetText().Trim() << std::endl << std::endl; |