Клонування документа
Клонування документа-це процес створення ідентичної копії оригінального документа, який може підвищити продуктивність і уберегти вас від потенційних витоків пам’яті.
У цій статті будуть описані основні способи використання клонування документа та як створити клон документа за допомогою 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; |