文書を分割する

Splittingまたはsplit a documentは、大きな文書をより多くの小さなファイルに分割するプロセスです。 ファイルを分割するにはさまざまな理由があります。 たとえば、特定の文書の一部のページのみが必要であり、全体のページは必要ありません。 または、プライバシー上の理由から、ドキュメントの一部のみを他の人と共有したいと考えています。 分割機能を使用すると、ドキュメントの必要な部分のみを取得し、マークアップ、保存、送信などの必要なアクションを実行できます。

Aspose.Wordsは、見出しまたはセクションによって一つの文書を複数の文書に分割する効率的な方法を提供します。 文書をページまたはページ範囲で分割することもできます。 両方の分割オプションについては、この記事で説明します。

Aspose.Wordsを使用して文書を小さなファイルに分割するには、次の手順を実行する必要があります:

  1. サポートされている任意の形式で文書をロードします。
  2. 文書を分割します。
  3. 出力文書を保存します。

文書を分割した後、必要なページ、テキストなどで始まるすべての出力文書を開くことができます。

異なる条件{#split-a-document-using-different-criteria}を使用して文書を分割する

Aspose.Wordsを使用すると、さまざまな基準に従ってEPUBまたはHTML文書を章に分割できます。 このプロセスでは、ソース文書のスタイルとレイアウトが出力文書のために保持されます。

DocumentSplitCriteria列挙体を使用して条件を指定できます。 したがって、次のいずれかの基準を使用してドキュメントを章に分割したり、複数の基準を組み合わせたりすることができます:

  • 見出し段落,
  • セクションブレーク,
  • コラムブレーク,
  • 改ページ。

出力をHTMLに保存するときは、Aspose.Words個々の章を個別のHTMLファイルとして保存します。 その結果、文書は複数のHTMLファイルに分割されます。 出力をEPUBに保存する場合、Aspose.Wordsは、使用したDocumentSplitCriteria値に関係なく、結果を単一のEPUBファイルに保存します。 したがって、EPUBドキュメントにDocumentSplitCriteriaを使用すると、リーダーアプリケーションでのコンテンツの外観にのみ影響します。コンテンツはチャプターに分割され、ドキュメントは連続して表示されなくなります。

このセクションでは、可能な分割基準の一部のみを検討します。

セクション{#split-a-document-by-sections}で文書を分割する

Aspose.Wordsでは、セクション区切りを使用して文書を分割し、HTMLに保存することもできます。 この目的のために、SectionBreakDocumentSplitCriteriaとして使用します:

次のコード例は、(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メソッドを使用して、ドキュメントをページ単位で分割するいくつかのユースケースについて説明します。

文書ページをページ{#split-a-document-page-by-page}で分割する

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));
}

ページ範囲{#split-a-document-by-page-ranges}で文書を分割する

Aspose.Words複数ページのドキュメントをページ範囲で分割できます。 1つのファイルをさまざまなページ範囲で複数のファイルに分割することも、1つの範囲を選択してソースドキュメントのこの部分のみを保存することもできます。 ドキュメントの最大ページ番号と最小ページ番号に応じて、ページ範囲を選択できることに注意してください。

次のコード例は、特定の開始インデックスと終了インデックスを使用して、ページ範囲ごとに文書を小さな部分に分割する方法を示しています:

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");

分割された文書を別の文書{#merge-the-split-document-with-another-file}とマージする

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");