Sao chép Tài liệu
Nhân bản tài liệu là quá trình tạo một bản sao giống hệt của tài liệu gốc, có thể cải thiện hiệu suất và cứu bạn khỏi rò rỉ bộ nhớ tiềm ẩn.
Bài viết này sẽ giải thích các trường hợp sử dụng chính của việc nhân bản tài liệu và cách tạo bản sao tài liệu bằng Aspose.Words.
Hoạt động Với Các Tài liệu Nhân Bản
Thao tác sao chép cho phép bạn thực hiện quá trình tạo tài liệu nhanh hơn vì bạn sẽ không cần tải và phân tích tài liệu từ tệp mỗi lần.
Sau khi tạo một bản sao của tài liệu của bạn, bạn sẽ có thể chỉnh sửa nó và thực hiện các thao tác khác nhau trên đó, ví dụ, so sánh nó với tài liệu gốc, nối thêm hoặc chèn nó vào một tài liệu khác. Bạn cũng có thể sửa đổi các phần tử nhân bản hoặc nội dung của chúng trước khi chèn chúng vào một tài liệu khác.
Tạo Một Bản Sao Tài liệu
Aspose.Words cho phép bạn sao chép một tài liệu bằng phương thức Clone thực hiện một bản sao sâu của tài liệu và trả về nó. Nói cách khác, nó sẽ nhận được một bản sao đầy đủ của DOM. Phương thức Clone
tăng tốc độ tạo tài liệu và bạn chỉ cần một dòng mã để lấy bản sao tài liệu của mình.
Nhân bản tạo ra một tài liệu mới có cùng nội dung với bản gốc, nhưng với một bản sao duy nhất của mỗi tài liệu gốc nodes. Bạn cũng có thể áp dụng thao tác sao chép vào nút tài liệu bằng cách sử dụng phương thức node Clone, cho phép bạn sao chép các nút tài liệu tổng hợp có và không có các nút con của chúng.
Ví dụ mã sau đây cho thấy cách sao chép tài liệu và tạo bản sao của một phần trong tài liệu đó:
// 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; |