Bekerja dengan Bagian

Terkadang Anda menginginkan dokumen yang tidak memiliki format yang sama di semua halaman. Misalnya, Anda mungkin perlu mengubah format nomor halaman, memiliki ukuran dan orientasi halaman yang berbeda, atau menjadikan halaman dokumen pertama sebagai halaman sampul tanpa penomoran apa pun. Anda dapat mencapainya dengan beberapa bagian.

Bagian adalah node tingkat yang mengontrol header dan footer, orientasi, kolom, margin, format nomor halaman, dan lain-lain.

Aspose.Words memungkinkan Anda mengelola bagian, membagi dokumen menjadi beberapa bagian, dan membuat perubahan format yang hanya berlaku untuk bagian tertentu. Aspose.Words menyimpan informasi tentang pemformatan bagian seperti header dan footer, pengaturan halaman, dan pengaturan kolom di hentian bagian.

Artikel ini menjelaskan cara bekerja dengan bagian dan hentian bagian.

Apa Bagian dan Bagian Istirahat Itu

Bagian dokumen diwakili oleh kelas Section dan SectionCollection. Objek bagian adalah turunan langsung dari node Document dan dapat diakses melalui properti Sections. Anda dapat mengelola node tersebut dengan menggunakan beberapa metode seperti Remove, Add, IndexOf, dan lainnya.

Hentian bagian adalah opsi yang membagi halaman dokumen menjadi beberapa bagian dengan tata letak yang dapat disesuaikan.

Jenis Bagian Istirahat

Aspose.Words memungkinkan Anda membagi dan memformat dokumen menggunakan hentian bagian berbeda dari enumerasi BreakType:

  • BagianIstirahat Berkelanjutan
  • BagianBreakKolom Baru
  • BagianBreakHalaman Baru
  • BagianBreakEvenPage
  • BagianBreakOddPage

Anda juga dapat menggunakan enumerasi SectionStart untuk memilih jenis jeda yang hanya berlaku untuk bagian pertama seperti NewColumn, NewPage, EvenPage, dan OddPage.

Kelola Bagian

Karena suatu bagian adalah node komposit normal, API manipulasi seluruh node dapat digunakan untuk memanipulasi bagian: untuk menambah, menghapus, dan operasi lain pada bagian. Anda dapat membaca lebih lanjut tentang node di artikel Aspose.Words Document Object Model (DOM).

Di sisi lain, Anda juga dapat menggunakan DocumentBuilder API untuk bekerja dengan bagian. Pada artikel ini, kami akan fokus pada cara khusus bekerja dengan bagian ini.

Menyisipkan atau Menghapus Hentian Bagian

Aspose.Words memungkinkan Anda menyisipkan pemisah bagian ke dalam teks menggunakan metode InsertBreak.

Contoh kode berikut menunjukkan cara menyisipkan pemisah bagian ke dalam dokumen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
/// <summary>
/// Insert section breaks before the specified paragraphs.
/// </summary>
private void InsertSectionBreaks(List<Paragraph> topicStartParas)
{
DocumentBuilder builder = new DocumentBuilder(mDoc);
foreach (Paragraph para in topicStartParas)
{
Section section = para.ParentSection;
// Insert section break if the paragraph is not at the beginning of a section already.
if (para != section.Body.FirstParagraph)
{
builder.MoveTo(para.FirstChild);
builder.InsertBreak(BreakType.SectionBreakNewPage);
// This is the paragraph that was inserted at the end of the now old section.
// We don't really need the extra paragraph, we just needed the section.
section.Body.LastParagraph.Remove();
}
}
}

Gunakan metode Remove untuk menghapus hentian bagian. Jika Anda tidak perlu menghapus hentian bagian tertentu dan malah menghapus konten bagian tersebut, Anda dapat menggunakan metode ClearContent.

Contoh kode berikut menunjukkan cara menghapus hentian bagian:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
private void RemoveSectionBreaks(Document doc)
{
// Loop through all sections starting from the section that precedes the last one and moving to the first section.
for (int i = doc.Sections.Count - 2; i >= 0; i--)
{
// Copy the content of the current section to the beginning of the last section.
doc.LastSection.PrependContent(doc.Sections[i]);
// Remove the copied section.
doc.Sections[i].Remove();
}
}

Pindahkan Bagian

Jika Anda ingin memindahkan suatu bagian dari satu posisi ke posisi lain dalam dokumen Anda, Anda perlu mendapatkan indeks bagian tersebut. Aspose.Words memungkinkan Anda mendapatkan posisi bagian dari SectionCollection dengan menggunakan properti Item. Anda dapat menggunakan properti Sections untuk mendapatkan semua bagian dalam dokumen Anda. Namun jika Anda ingin mendapatkan bagian pertama saja, Anda bisa menggunakan properti FirstSection.

Contoh kode berikut menunjukkan cara mengakses bagian pertama dan melakukan iterasi melalui turunan node komposit:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Write("Section 1");
builder.MoveToHeaderFooter(HeaderFooterType.HeaderPrimary);
builder.Write("Primary header");
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);
builder.Write("Primary footer");
Section section = doc.FirstSection;
// A Section is a composite node and can contain child nodes,
// but only if those child nodes are of a "Body" or "HeaderFooter" node type.
foreach (Node node in section)
{
switch (node.NodeType)
{
case NodeType.Body:
{
Body body = (Body)node;
Console.WriteLine("Body:");
Console.WriteLine($"\t\"{body.GetText().Trim()}\"");
break;
}
case NodeType.HeaderFooter:
{
HeaderFooter headerFooter = (HeaderFooter)node;
Console.WriteLine($"HeaderFooter type: {headerFooter.HeaderFooterType}:");
Console.WriteLine($"\t\"{headerFooter.GetText().Trim()}\"");
break;
}
default:
{
throw new Exception("Unexpected node type in a section.");
}
}
}

Tentukan Tata Letak Bagian

Terkadang Anda ingin dokumen Anda terlihat lebih baik dengan membuat tata letak kreatif untuk bagian dokumen yang berbeda. Jika Anda ingin menentukan tipe kisi bagian saat ini, Anda dapat memilih mode tata letak bagian menggunakan enumerasi SectionLayoutMode:

  • Bawaan
  • Kisi
  • GarisGrid
  • SnapToChars

Contoh kode berikut menunjukkan cara membatasi jumlah baris yang dimiliki setiap halaman:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Enable pitching, and then use it to set the number of lines per page in this section.
// A large enough font size will push some lines down onto the next page to avoid overlapping characters.
builder.PageSetup.LayoutMode = SectionLayoutMode.LineGrid;
builder.PageSetup.LinesPerPage = 15;
builder.ParagraphFormat.SnapToGrid = true;
for (int i = 0; i < 30; i++)
builder.Write("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
doc.Save(ArtifactsDir + "WorkingWithDocumentOptionsAndSettings.LinesPerPage.docx");

Edit Bagian

Saat Anda menambahkan bagian baru ke dokumen Anda, tidak akan ada isi atau paragraf yang dapat Anda edit. Aspose.Words memungkinkan Anda menjamin bahwa suatu bagian berisi badan dengan setidaknya satu paragraf menggunakan metode EnsureMinimum – metode ini akan secara otomatis menambahkan simpul Badan (atau HeaderFooter) ke dokumen dan kemudian menambahkan Paragraf ke dalamnya.

Contoh kode berikut menunjukkan cara menyiapkan node bagian baru menggunakan EnsureMinimum:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
// If we add a new section like this, it will not have a body, or any other child nodes.
doc.Sections.Add(new Section(doc));
// Run the "EnsureMinimum" method to add a body and a paragraph to this section to begin editing it.
doc.LastSection.EnsureMinimum();
doc.Sections[0].Body.FirstParagraph.AppendChild(new Run(doc, "Hello world!"));

Tambahkan atau Tambahkan Konten

Jika Anda ingin menggambar suatu bentuk atau menambahkan teks atau gambar di awal/akhir bagian, Anda bisa menggunakan metode AppendContent dan PrependContent dari kelas Section.

Contoh kode berikut menunjukkan cara menambahkan konten bagian yang sudah ada:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Write("Section 1");
builder.InsertBreak(BreakType.SectionBreakNewPage);
builder.Write("Section 2");
builder.InsertBreak(BreakType.SectionBreakNewPage);
builder.Write("Section 3");
Section section = doc.Sections[2];
// Insert the contents of the first section to the beginning of the third section.
Section sectionToPrepend = doc.Sections[0];
section.PrependContent(sectionToPrepend);
// Insert the contents of the second section to the end of the third section.
Section sectionToAppend = doc.Sections[1];
section.AppendContent(sectionToAppend);

Mengkloning Bagian

Aspose.Words memungkinkan Anda menduplikasi suatu bagian dengan membuat salinan lengkapnya menggunakan metode Clone.

Contoh kode berikut menunjukkan cara mengkloning bagian pertama dalam dokumen Anda:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Document.docx");
Section cloneSection = doc.Sections[0].Clone();

Salin Bagian antar Dokumen

Dalam beberapa kasus, Anda mungkin memiliki dokumen besar dengan banyak bagian dan Anda ingin menyalin konten suatu bagian dari satu dokumen ke dokumen lainnya.

Aspose.Words memungkinkan Anda menyalin bagian antar dokumen menggunakan metode ImportNode.

Contoh kode berikut menunjukkan cara menyalin bagian antar dokumen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document srcDoc = new Document(MyDir + "Document.docx");
Document dstDoc = new Document();
Section sourceSection = srcDoc.Sections[0];
Section newSection = (Section)dstDoc.ImportNode(sourceSection, true);
dstDoc.Sections.Add(newSection);
dstDoc.Save(ArtifactsDir + "WorkingWithSection.CopySection.docx");
view raw copy-section.cs hosted with ❤ by GitHub

Aturan dasar untuk menampilkan header atau footer untuk setiap bagian cukup sederhana:

  1. Jika bagian tersebut tidak memiliki header/footer jenis tertentu, maka diambil dari bagian sebelumnya.
  2. Jenis header/footer yang ditampilkan pada halaman dikontrol oleh pengaturan bagian “Halaman Pertama Berbeda” dan “Halaman Ganjil & Genap Berbeda” – jika dinonaktifkan, maka judul bagian itu sendiri akan diabaikan.

Contoh kode berikut menunjukkan cara membuat 2 bagian dengan header berbeda:

Jika Anda ingin menghapus teks header dan footer tanpa menghapus objek HeaderFooter di dokumen Anda, Anda dapat menggunakan metode ClearHeadersFooters. Selain itu, Anda bisa menggunakan metode DeleteHeaderFooterShapes untuk menghapus semua bentuk dari header dan footer di dokumen Anda.

Contoh kode berikut menunjukkan cara menghapus konten semua header dan footer di suatu bagian:

Berikut contoh kode cara menghapus semua bentuk dari semua header dan footer dalam suatu bagian:

Sesuaikan Properti Halaman di Bagian

Sebelum mencetak halaman atau dokumen, Anda mungkin ingin menyesuaikan dan mengubah ukuran dan tata letak satu halaman atau keseluruhan dokumen. Dengan pengaturan halaman, Anda dapat mengubah pengaturan halaman dokumen seperti margin, orientasi, dan ukuran untuk mencetak halaman pertama atau halaman ganjil yang berbeda.

Aspose.Words memungkinkan Anda untuk menyesuaikan properti halaman dan bagian menggunakan kelas PageSetup.

Contoh kode berikut menunjukkan cara mengatur properti seperti ukuran halaman dan orientasi untuk bagian saat ini:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.PageSetup.Orientation = Orientation.Landscape;
builder.PageSetup.LeftMargin = 50;
builder.PageSetup.PaperSize = PaperSize.Paper10x14;
doc.Save(ArtifactsDir + "WorkingWithDocumentOptionsAndSettings.PageSetupAndSectionFormatting.docx");

Contoh kode berikut menunjukkan cara mengubah properti halaman di semua bagian:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Section 1");
doc.AppendChild(new Section(doc));
builder.Writeln("Section 2");
doc.AppendChild(new Section(doc));
builder.Writeln("Section 3");
doc.AppendChild(new Section(doc));
builder.Writeln("Section 4");
// It is important to understand that a document can contain many sections,
// and each section has its page setup. In this case, we want to modify them all.
foreach (Section section in doc)
section.PageSetup.PaperSize = PaperSize.Letter;
doc.Save(ArtifactsDir + "WorkingWithSection.ModifyPageSetupInAllSections.doc");

Lihat juga