แยกเอกสาร

Splitting หรือ แยกเอกสาร เป็นกระบวนการแบ่งเอกสารขนาดใหญ่ออกเป็นไฟล์ขนาดเล็กจำนวนมากขึ้น มีเหตุผลหลายประการในการแบ่งไฟล์ ตัวอย่างเช่น คุณต้องการเพียงบางหน้าจากเอกสารที่ระบุ ไม่ใช่ทั้งหน้า หรือด้วยเหตุผลด้านความเป็นส่วนตัว คุณต้องการแชร์เฉพาะบางส่วนของเอกสารกับผู้อื่น ด้วยคุณสมบัติการแยก คุณสามารถรับเฉพาะส่วนที่จำเป็นของเอกสาร และดำเนินการที่จำเป็นกับส่วนเหล่านั้น เช่น เพื่อมาร์กอัป บันทึก หรือส่ง

Aspose.Words มอบวิธีที่มีประสิทธิภาพในการแบ่งเอกสารหนึ่งฉบับออกเป็นหลายเอกสารตามหัวข้อหรือส่วนต่างๆ คุณยังสามารถแบ่งเอกสารตามหน้าหรือตามช่วงหน้าได้ ตัวเลือกการแยกทั้งสองจะอธิบายไว้ในบทความนี้

หากต้องการแยกเอกสารเป็นไฟล์ขนาดเล็กโดยใช้ Aspose.Words คุณต้องทำตามขั้นตอนเหล่านี้:

  1. โหลดเอกสารในรูปแบบที่รองรับ
  2. แยกเอกสาร
  3. บันทึกเอกสารผลลัพธ์

หลังจากที่คุณแยกเอกสาร คุณจะสามารถเปิดเอกสารเอาต์พุตทั้งหมดที่จะเริ่มต้นด้วยหน้า ข้อความ ฯลฯ ที่ต้องการ

แยกเอกสารโดยใช้เกณฑ์ที่แตกต่างกัน

Aspose.Words ช่วยให้คุณสามารถแบ่งเอกสาร EPUB หรือ HTML ออกเป็นบทต่างๆ ตามเกณฑ์ต่างๆ ในกระบวนการนี้ สไตล์และโครงร่างของเอกสารต้นทางจะถูกรักษาไว้สำหรับเอกสารเอาท์พุต

คุณสามารถระบุเกณฑ์ได้โดยใช้การแจงนับ DocumentSplitCriteria ดังนั้นคุณจึงสามารถแบ่งเอกสารออกเป็นบทๆ ได้โดยใช้เกณฑ์ข้อใดข้อหนึ่งต่อไปนี้ หรือรวมเกณฑ์มากกว่าหนึ่งเกณฑ์เข้าด้วยกัน:

  • ย่อหน้าหัวเรื่อง
  • ตัวแบ่งส่วน
  • ตัวแบ่งคอลัมน์
  • ตัวแบ่งหน้า

เมื่อบันทึกเอาต์พุตเป็น HTML Aspose.Words จะบันทึกแต่ละบทเป็นไฟล์ HTML แยกกัน เป็นผลให้เอกสารถูกแบ่งออกเป็นไฟล์ HTML หลายไฟล์ เมื่อบันทึกเอาต์พุตเป็น EPUB Aspose.Words จะบันทึกผลลัพธ์เป็นไฟล์ EPUB ไฟล์เดียว โดยไม่คำนึงถึงค่า DocumentSplitCriteria ที่คุณใช้ ดังนั้น การใช้ DocumentSplitCriteria สำหรับเอกสาร EPUB จะส่งผลต่อลักษณะที่ปรากฏของเนื้อหาในแอปพลิเคชันโปรแกรมอ่านเท่านั้น โดยเนื้อหาจะถูกแบ่งออกเป็นบทต่างๆ และเอกสารจะไม่ปรากฏต่อเนื่องอีกต่อไป

ในส่วนนี้ เราจะพิจารณาเฉพาะเกณฑ์การแยกที่เป็นไปได้บางส่วนเท่านั้น

แยกเอกสารตามส่วนหัว

หากต้องการแบ่งเอกสารออกเป็นบทต่างๆ ตามหัวข้อ ให้ใช้ค่า HeadingParagraph ของคุณสมบัติ DocumentSplitCriteria

หากคุณต้องการแบ่งเอกสารตามระดับเฉพาะของย่อหน้าส่วนหัว เช่น ส่วนหัว 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 เอกสารจะไม่แบ่งออกเป็นหลายไฟล์ และจะมีไฟล์เอาต์พุตเพียงไฟล์เดียวเท่านั้น

แยกเอกสารตามส่วน

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 อนุญาตให้แยกเอกสารหลายหน้าตามช่วงหน้า คุณสามารถแบ่งไฟล์หนึ่งไฟล์ออกเป็นหลายไฟล์โดยมีช่วงหน้าต่างๆ หรือเพียงเลือกช่วงเดียวและบันทึกเฉพาะส่วนนี้ของเอกสารต้นฉบับ โปรดทราบว่าคุณสามารถเลือกช่วงหน้าตามหมายเลขหน้าสูงสุดและต่ำสุดของเอกสารได้

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแบ่งเอกสารออกเป็นส่วนเล็ก ๆ ตามช่วงหน้าด้วยดัชนีเริ่มต้นและสิ้นสุดเฉพาะ:

// 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 เพื่อควบคุมวิธีที่ Aspose.Words บันทึกส่วนของเอกสารเมื่อเอกสารนี้ถูกส่งออกเป็นรูปแบบ HTML คุณสมบัตินี้ช่วยให้คุณสามารถเปลี่ยนชื่อไฟล์เอาต์พุตหรือแม้กระทั่งเปลี่ยนเส้นทางไปยังสตรีมที่กำหนดเองได้

โปรดทราบว่าการโทรกลับนี้ไม่มีประโยชน์เมื่อบันทึกเป็น 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");
}