Разделение документа

Splitting или split a document - это процесс разбиения большого документа на большее количество файлов меньшего размера. Для разбиения файла существуют различные причины. Например, вам нужны только некоторые страницы из определенного документа, а не весь документ целиком. Или по соображениям конфиденциальности вы хотите поделиться с другими пользователями только некоторыми частями документа. С помощью функции разделения вы можете получить только нужные части документа и выполнить с ними необходимые действия, например, пометить, сохранить или отправить.

Aspose.Words предоставляет вам эффективный способ разделения одного документа на несколько документов по заголовкам или разделам. Вы также можете разделить документ по страницам или диапазонам страниц. Оба варианта разделения будут описаны в этой статье.

Чтобы разбить документ на файлы меньшего размера с помощью Aspose.Words, вам необходимо выполнить следующие действия:

  1. Загрузите документ в любом поддерживаемом формате.
  2. Разделите документ.
  3. Сохраните выходные документы.

После разделения документа вы сможете открыть все выходные документы, которые будут начинаться с нужных страниц, текста и т.д.

Разделить документ по разным критериям

Aspose.Words позволяет разбивать документы EPUB или HTML на главы в соответствии с различными критериями. При этом стиль и оформление исходного документа сохраняются для выходных документов.

Вы можете указать критерии, используя перечисление DocumentSplitCriteria. Таким образом, вы можете разделить документ на главы, используя один из следующих критериев, или объединить несколько критериев вместе:

  • заголовок абзаца,
  • разрыв раздела,
  • разрыв столбца,
  • разрыв страницы.

При сохранении выходных данных в формате HTML Aspose.Words сохраните каждую отдельную главу в виде отдельного HTML-файла. В результате документ будет разделен на несколько HTML-файлов. При сохранении выходных данных в EPUB Aspose.Words сохраните результат в одном файле EPUB независимо от того, какое значение DocumentSplitCriteria вы использовали. Таким образом, использование DocumentSplitCriteria для документов EPUB влияет только на внешний вид их содержимого в приложениях для чтения: содержимое будет разделено на главы, и документ больше не будет выглядеть сплошным.

В этом разделе мы рассмотрим лишь некоторые из возможных критериев разделения.

Разбить документ на разделы

Aspose.Words также позволяет использовать разрывы разделов для разделения документов и сохранения их в формате HTML. Для этой цели используйте SectionBreak в качестве DocumentSplitCriteria:

В следующем примере кода показано, как разделить документ на более мелкие части с помощью разрывов разделов (без использования свойства DocumentSplitCriteria).:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Open a Word document
auto doc = System::MakeObject<Document>(inputDataDir + u"TestFile (Split).docx");
for (int i = 0; i < doc->get_Sections()->get_Count(); i++)
{
// Split a document into smaller parts, in this instance split by section
auto section = doc->get_Sections()->idx_get(i)->Clone();
auto newDoc = System::MakeObject<Document>();
newDoc->get_Sections()->Clear();
auto newSection = System::StaticCast<Section>(newDoc->ImportNode(section, true));
newDoc->get_Sections()->Add(newSection);
// Save each section as a separate document
newDoc->Save(outputDataDir + u"SplitDocumentBySectionsOut_" + System::Convert::ToString(i) + u".docx");
}

Разбито по страницам

Вы также можете разбить документ постранично, по диапазонам страниц или начиная с указанных номеров страниц. В таком случае метод ExtractPages может выполнить эту задачу.

В этом разделе описано несколько вариантов использования разбивки документов на страницы с использованием класса Document и метода ExtractPages.

Разбиение документа постранично

Aspose.Words позволяет разбивать многостраничный документ постранично.

В следующем примере кода показано, как разделить документ и сохранить каждую страницу как отдельный документ:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>(MyDir + u"Big document.docx");
int pageCount = doc->get_PageCount();
for (int page = 0; page < pageCount; page++)
{
// Save each page as a separate document.
SharedPtr<Document> extractedPage = doc->ExtractPages(page, 1);
extractedPage->Save(ArtifactsDir + String::Format(u"SplitDocument.PageByPage_{0}.docx", page + 1));
}

Разбить документ по диапазонам страниц

Aspose.Words позволяет разделить многостраничный документ по диапазонам страниц. Вы можете разделить один файл на несколько файлов с различными диапазонами страниц или просто выбрать один диапазон и сохранить только эту часть исходного документа. Обратите внимание, что вы можете выбрать диапазон страниц в соответствии с максимальным и минимальным номерами страниц документа.

В следующем примере кода показано, как разбить документ на более мелкие части по диапазону страниц с определенными начальными и конечными индексами:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>(MyDir + u"Big document.docx");
// Get part of the document.
SharedPtr<Document> extractedPages = doc->ExtractPages(3, 6);
extractedPages->Save(ArtifactsDir + u"SplitDocument.ByPageRange.docx");

Объедините разделенный документ с другим документом

Aspose.Words позволяет объединить выходной разделенный документ с другим документом для формирования нового документа. Это можно назвать объединением документов.

В следующем примере кода показано, как объединить разделенный документ с другим документом:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Create a new resulting document
auto mergedDoc = System::MakeObject<Document>();
auto mergedDocBuilder = System::MakeObject<DocumentBuilder>(mergedDoc);
// Merge document parts one by one
for (int idx = 1; idx <= 13; idx++)
{
System::String documentPath = inputDataDir + u"SplitDocumentPageByPageOut_" + System::Convert::ToString(idx) + u".docx";
auto sourceDoc = System::MakeObject<Document>(documentPath);
mergedDocBuilder->MoveToDocumentEnd();
mergedDocBuilder->InsertDocument(sourceDoc, ImportFormatMode::KeepSourceFormatting);
}
mergedDoc->Save(outputDataDir + u"MergeDocuments_out.docx");