Clonar um documento

A clonagem de um documento é o processo de criação de uma cópia idêntica de um documento original, que pode melhorar o desempenho e evitar possíveis fugas de memória.

Este artigo explicará os principais casos de uso da clonagem de um documento e como criar um clone de documento usando Aspose.Words.

Operações com documentos de clonagem

A operação clone permite tornar o processo de criação de documentos mais rápido, pois você não precisará carregar e analisar um documento de um arquivo Todas as vezes.

Depois de criar um clone do seu documento, você poderá editá-lo e executar diferentes operações nele, por exemplo, compará-lo com o documento original, anexá-lo ou inseri-lo em outro documento. Você também pode modificar elementos clonados ou seu conteúdo antes de inseri-los em outro documento.

Criando um Clone de Documento

Aspose.Words permite clonar um documento usando o método Clone que executa uma cópia profunda do documento e o retorna. Em outras palavras, ele receberá uma cópia completa do DOM. O método Clone acelera a geração de documentos, e você só precisa de uma linha de código para obter uma cópia do seu documento.

A clonagem produz um novo documento com o mesmo conteúdo do original, mas com uma cópia única de cada um dos nodes do documento original. Você também pode aplicar a operação de clonagem a um nó de documento usando o método node Clone, que permite duplicar nós de documento composto com e sem seus nós filhos.

O exemplo de código a seguir mostra como clonar um documento e criar uma duplicata de uma seção nesse documento:

// 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;