Клонирование документа
Клонирование документа - это процесс создания идентичной копии исходного документа, который может повысить производительность и уберечь вас от возможных утечек памяти.
В этой статье будут описаны основные варианты использования клонирования документа и как создать клон документа с помощью Aspose.Words.
Операции с клонируемыми документами
Операция клонирования позволяет ускорить процесс создания документов, так как вам не нужно будет каждый раз загружать и анализировать документ из файла.
После создания клона вашего документа вы сможете редактировать его и выполнять с ним различные операции, например, сравнивать с исходным документом, добавлять или вставлять в другой документ. Вы также можете изменять клонированные элементы или их содержимое перед вставкой в другой документ.
Создание клона документа
Aspose.Words позволяет вам клонировать документ, используя метод Clone, который выполняет глубокую копию документа и возвращает его. Другими словами, он получит полную копию DOM. Метод Clone
ускоряет создание документов, и вам нужна всего одна строка кода, чтобы получить копию вашего документа.
При клонировании создается новый документ с тем же содержимым, что и в оригинале, но с уникальной копией каждого из nodes исходных документов. Вы также можете применить операцию клонирования к узлу документа, используя метод node Clone, который позволяет дублировать узлы составного документа с их дочерними узлами и без них.
В следующем примере кода показано, как клонировать документ и создать дубликат раздела в этом документе:
// 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; |