ドキュメントを分割する
Splitting または ドキュメントの分割 は、大きなドキュメントを多数の小さなファイルに分割するプロセスです。ファイルを分割する理由はさまざまです。たとえば、特定のドキュメントの一部のページのみが必要であり、ドキュメント全体ではありません。または、プライバシー上の理由から、ドキュメントの一部のみを他の人と共有したい場合があります。分割機能を使用すると、ドキュメントの必要な部分のみを取得し、マークアップ、保存、送信などの必要なアクションを実行できます。
Aspose.Words は、見出しまたはセクションごとに 1 つのドキュメントを複数のドキュメントに分割する効率的な方法を提供します。ドキュメントをページまたはページ範囲ごとに分割することもできます。この記事では両方の分割オプションについて説明します。
Aspose.Words を使用してドキュメントを小さなファイルに分割するには、次の手順に従う必要があります。
- サポートされている形式でドキュメントをロードします。
- 文書を分割します。
- 出力ドキュメントを保存します。
ドキュメントを分割すると、必要なページやテキストなどで始まるすべての出力ドキュメントを開くことができるようになります。
オンラインで試す
この機能は 無料のオンラインドキュメントスプリッター で試すことができます。
異なる基準を使用してドキュメントを分割する
Aspose.Words を使用すると、EPUB または HTML ドキュメントをさまざまな基準に従って章に分割できます。このプロセスでは、ソース ドキュメントのスタイルとレイアウトが出力ドキュメントでも保持されます。
DocumentSplitCriteria 列挙を使用して基準を指定できます。したがって、次の基準のいずれかを使用してドキュメントを章に分割するか、複数の基準を組み合わせて使用できます。
- 見出し段落、
- セクション区切り、
- 列の区切り、
- ページ区切り。
出力を HTML に保存する場合、Aspose.Words は個々の章を個別の HTML ファイルとして保存します。その結果、ドキュメントは複数の HTML ファイルに分割されます。出力を EPUB に保存する場合、Aspose.Words は、使用した DocumentSplitCriteria
値に関係なく、結果を単一の EPUB ファイルに保存します。したがって、EPUB ドキュメントに DocumentSplitCriteria を使用すると、リーダー アプリケーションでのコンテンツの外観にのみ影響します。コンテンツは章に分割され、ドキュメントは連続して表示されなくなります。
このセクションでは、考えられる分割基準の一部のみを検討します。
文書を見出しごとに分割する
ドキュメントを見出しごとに章に分割するには、DocumentSplitCriteria プロパティの HeadingParagraph 値を使用します。
見出し 1、2、3 など、見出し段落の特定のレベルで文書を分割する必要がある場合は、DocumentSplitHeadingLevel プロパティも使用します。出力は、指定された見出しレベルで書式設定された段落ごとに分割されます。
次のコード例は、見出しごとにドキュメントを小さな部分に分割する方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// Open a Word document | |
Document doc = new Document(dataDir + "Test File (doc).docx"); | |
HtmlSaveOptions options = new HtmlSaveOptions(); | |
// Split a document into smaller parts, in this instance split by heading | |
options.DocumentSplitCriteria = DocumentSplitCriteria.HeadingParagraph; | |
// Save the output file | |
doc.Save(dataDir + "SplitDocumentByHeadings_out.html", options); |
この基準では、Aspose.Words は分割時に HTML 形式での保存のみをサポートしていることに注意してください。
EPUB に保存する場合、ドキュメントは複数のファイルに分割されず、出力ファイルは 1 つだけになります。
ドキュメントをセクションごとに分割する
Aspose.Words では、セクション区切りを使用してドキュメントを分割し、HTML に保存することもできます。この目的のために、SectionBreak を DocumentSplitCriteria として使用します。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
HtmlSaveOptions options = new HtmlSaveOptions(); | |
options.DocumentSplitCriteria = DocumentSplitCriteria.HeadingParagraph; |
ソース ドキュメントを複数の出力ドキュメントに分割する別の方法もあり、Aspose.Words でサポートされている任意の出力形式を選択できます。
次のコード例は、(DocumentSplitCriteria
プロパティを使用せずに) セクション区切りによってドキュメントを小さな部分に分割する方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// Open a Word document | |
Document doc = new Document(dataDir + "TestFile (Split).docx"); | |
for (int i = 0; i < doc.Sections.Count; i++) | |
{ | |
// Split a document into smaller parts, in this instance split by section | |
Section section = doc.Sections[i].Clone(); | |
Document newDoc = new Document(); | |
newDoc.Sections.Clear(); | |
Section newSection = (Section) newDoc.ImportNode(section, true); | |
newDoc.Sections.Add(newSection); | |
// Save each section as a separate document | |
newDoc.Save(dataDir + $"SplitDocumentBySectionsOut_{i}.docx"); | |
} |
ページごとに分割
ドキュメントをページごと、ページ範囲ごと、または指定したページ番号から開始して分割することもできます。このような場合には、ExtractPages メソッドが機能します。
このセクションでは、Document クラスと ExtractPages メソッドを使用してページ単位でドキュメントを分割するいくつかの使用例について説明します。
ドキュメントをページごとに分割する
Aspose.Words を使用すると、複数ページのドキュメントをページごとに分割できます。
次のコード例は、ドキュメントを分割し、各ページを個別のドキュメントとして保存する方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(MyDir + "Big document.docx"); | |
int pageCount = doc.PageCount; | |
for (int page = 0; page < pageCount; page++) | |
{ | |
// Save each page as a separate document. | |
Document extractedPage = doc.ExtractPages(page, 1); | |
extractedPage.Save(ArtifactsDir + $"SplitDocument.PageByPage_{page + 1}.docx"); | |
} |
ページ範囲ごとにドキュメントを分割する
Aspose.Words を使用すると、複数ページのドキュメントをページ範囲ごとに分割できます。 1 つのファイルをさまざまなページ範囲を持つ複数のファイルに分割したり、1 つの範囲だけを選択してソース文書のこの部分のみを保存したりできます。ドキュメントの最大ページ番号と最小ページ番号に従ってページ範囲を選択できることに注意してください。
次のコード例は、特定の開始インデックスと終了インデックスを使用して、ページ範囲ごとにドキュメントを小さな部分に分割する方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(MyDir + "Big document.docx"); | |
// Get part of the document. | |
Document extractedPages = doc.ExtractPages(3, 6); | |
extractedPages.Save(ArtifactsDir + "SplitDocument.ByPageRange.docx"); |
ドキュメントを保存するためのコールバック オプション
DocumentPartSavingCallback プロパティを使用すると、このドキュメントを HTML 形式にエクスポートするときに Aspose.Words がドキュメント パーツを保存する方法を制御できます。このプロパティを使用すると、出力ファイルの名前を変更したり、出力ファイルをカスタム ストリームにリダイレクトしたりすることができます。
すべての出力部分は 1 つのコンテナ (.epub ファイル) に保存する必要があるため、EPUB に保存する場合、このコールバックは役に立たないことに注意してください。したがって、ストリームのリダイレクトはサポートされておらず、ファイルの名前はコンテナ内で変更されるため、名前変更の効果は見えません。
分割ドキュメントを別のドキュメントと結合する
Aspose.Words を使用すると、出力された分割ドキュメントを別のドキュメントと結合して、新しいドキュメントを形成できます。これを文書の結合と呼ぶことができます。
次のコード例は、分割ドキュメントを別のドキュメントと結合する方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public static void MergeDocuments(string dataDir) | |
{ | |
// Find documents using for merge | |
FileSystemInfo[] documentPaths = new DirectoryInfo(dataDir) | |
.GetFileSystemInfos("SplitDocumentPageByPageOut_*.docx").OrderBy(f => f.CreationTime).ToArray(); | |
string sourceDocumentPath = | |
Directory.GetFiles(dataDir, "SplitDocumentPageByPageOut_1.docx", SearchOption.TopDirectoryOnly)[0]; | |
// Open the first part of the resulting document | |
Document sourceDoc = new Document(sourceDocumentPath); | |
// Create a new resulting document | |
Document mergedDoc = new Document(); | |
DocumentBuilder mergedDocBuilder = new DocumentBuilder(mergedDoc); | |
// Merge document parts one by one | |
foreach (FileSystemInfo documentPath in documentPaths) | |
{ | |
if (documentPath.FullName == sourceDocumentPath) | |
continue; | |
mergedDocBuilder.MoveToDocumentEnd(); | |
mergedDocBuilder.InsertDocument(sourceDoc, ImportFormatMode.KeepSourceFormatting); | |
sourceDoc = new Document(documentPath.FullName); | |
} | |
// Save the output file | |
mergedDoc.Save(dataDir + "MergeDocuments_out.docx"); | |
} |