วิธีทำงานกับ Sections ใน .NET

วิธีทำงานกับ Sections ใน .NET

คู่มือนี้แสดงวิธีการสร้างการแบ่งส่วน, กำหนดค่าการตั้งค่าหน้า, และจัดการส่วนหัว, ส่วนท้าย, และการจัดเรียงหลายคอลัมน์ใน Aspose.Words FOSS สำหรับ .NET, โดยใช้ Section and PageSetup คลาส. ครอบคลุมการอ่านส่วนที่มีอยู่แล้วในเอกสาร, การเริ่มส่วนใหม่ด้วย DocumentBuilder, การกำหนดขนาดหน้าและขอบ, การเพิ่มตัวแปรส่วนหัวและส่วนท้าย, และการจัดวางข้อความหลักในหลายคอลัมน์.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ

Aspose.Words FOSS for .NET ยังไม่ได้เผยแพร่แพ็กเกจ NuGet – ให้สร้างไลบรารีจากซอร์สโค้ดแทน. คัดลอก https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, จากนั้นสร้าง Aspose.Words.sln ในโหมด Release ด้วย .NET SDK และอ้างอิง assembly Aspose.Words ที่สร้างขึ้นจากโครงการของคุณ. ไลบรารีนี้ตั้งเป้าหมายที่ .NET Standard 2.0, ดังนั้นจึงทำงานบน .NET Framework 4.6.2+ และ .NET 6/8/10.


ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น

เพิ่มคำสั่ง using Aspose.Words; – Section, PageSetup, HeaderFooter, และ enum ที่เกี่ยวข้องที่ใช้ในคู่มือนี้ทั้งหมดอยู่โดยตรงใน namespace Aspose.Words ควบคู่กับ Document และ DocumentBuilder.


ขั้นตอนที่ 3: อ่านส่วนที่มีอยู่แล้วในเอกสาร

Document.Sections ส่งคืน SectionCollection ที่เก็บทุก Section ในเอกสาร, แต่ละอันเป็น CompositeNode ซึ่งเป็นส่วนหนึ่งของโครงสร้างโหนดโดยรวม. Document.FirstSection และ Document.LastSection ให้การเข้าถึงโดยตรงไปยังส่วนขอบโดยไม่ต้องวนรอบคอลเลกชัน. แต่ละ Section มี Body หนึ่งรายการ – เข้าถึงได้เช่นเดียวกับ Story ใด ๆ – และเมื่อมี, เนื้อหาส่วนหัวและส่วนท้ายสามารถเข้าถึงได้ผ่าน Section.HeadersFooters.


ขั้นตอนที่ 4: เริ่มส่วนใหม่ด้วย Section Break

Call DocumentBuilder.InsertBreak(BreakType) ที่ตำแหน่งเคอร์เซอร์เพื่อเริ่มส่วนใหม่. ส่ง BreakType.SectionBreakNewPage เมื่อส่วนใหม่ควรเริ่มเสมอบนหน้าว่างใหม่, BreakType.SectionBreakContinuous เมื่อต้องการเพียงการเปลี่ยนแปลงการตั้งค่าหน้าเท่านั้น (เช่น การสลับเป็นข้อความหลายคอลัมน์) โดยไม่บังคับให้มีการแบ่งหน้า, หรือ BreakType.SectionBreakNewColumn, SectionBreakEvenPage, และ SectionBreakOddPage สำหรับพฤติกรรมการเริ่มส่วนอื่นที่ Word รองรับ. การแทรกส่วนจะพาเอาการจัดรูปแบบของส่วนที่ follows ของมัน, ดังนั้นตั้งค่า PageSetup คุณสมบัติบนส่วนใหม่ Section – ไม่ใช่ส่วนก่อนหน้า – ทันทีที่การแทรกส่วนถูกแทรก. DocumentBuilder.MoveToSection(sectionIndex) ย้ายเคอร์เซอร์ไปยังจุดเริ่มต้นของเนื้อหาส่วนเฉพาะ, และ PageSetup.SectionStart อ่านหรือกำหนดค่า SectionStart ประเภทการแทรกส่วนที่บันทึกไว้แล้วในส่วนที่มีอยู่.


ขั้นตอนที่ 5: กำหนดค่าขนาดหน้าและขอบกระดาษ

แต่ละ Section.PageSetup เป็นอินสแตนซ์ของ PageSetup. ตั้งค่า PageWidth, PageHeight, LeftMargin, RightMargin, TopMargin, BottomMargin, และ Gutter สำหรับขนาดหน้าและขอบกระดาษ, หรือกำหนดค่าพรีเซ็ต Margins โดยตรงให้กับ PageSetup.Margins. Orientation และ PaperSize ควบคุมการวางแนวหน้ากระดาษและขนาดกระดาษ. ขอบหน้ากระดาษกำหนดค่าด้วย Borders (ซึ่งเป็น BorderCollection), BorderAppliesTo (PageBorderAppliesTo), BorderDistanceFrom (PageBorderDistanceFrom), BorderAlwaysInFront, BorderSurroundsHeader, และ BorderSurroundsFooter. เรียก PageSetup.ClearFormatting() เพื่อรีเซ็ตการตั้งค่าหน้าของส่วนให้กลับไปเป็นค่าเริ่มต้นก่อนที่จะกำหนดค่าใหม่ตั้งแต่ต้น.


ขั้นตอนที่ 6: เพิ่มและเชื่อมโยงส่วนหัวและส่วนท้าย

Section.HeadersFooters เป็น HeaderFooterCollection ที่มีตัวเข้าถึงแบบพิมพ์ – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – พร้อมกับ GetByHeaderFooterType() สำหรับการค้นหาโดย HeaderFooterType และ Add() เพื่อเพิ่มรายการใหม่. แต่ละ HeaderFooter เป็น Story, มีแฟล็ก IsHeader และ IsLinkedToPrevious. เปิดใช้งาน PageSetup.DifferentFirstPageHeaderFooter หรือ PageSetup.OddAndEvenPagesHeaderFooter ก่อนการเพิ่มตัวแปรที่สอดคล้องกัน HeaderFirst/FooterFirst หรือ HeaderEven/FooterEven – แฟล็กและตัวแปรจะทำงานร่วมกันเท่านั้น. เรียก HeaderFooterCollection.LinkToPrevious() เพื่อเชื่อมส่วนหัวหรือส่วนท้ายของส่วนใหม่ให้สืบทอดเนื้อหาจากส่วนก่อนหน้า, หรือเพื่อยกเลิกการเชื่อมโยงเพื่อให้ส่วนใหม่เริ่มต้นด้วยเนื้อหาอิสระ.


ขั้นตอนที่ 7: จัดวางข้อความหลักในหลายคอลัมน์

PageSetup.TextColumns คืนค่า TextColumnCollection สำหรับส่วนนั้น. เรียก SetCount() พร้อมจำนวนคอลัมน์ที่ข้อความหลักควรไหลเข้าไป, จากนั้นปรับ EvenlySpaced, Spacing, LineBetween, และ Width เพื่อควบคุมการจัดวางคอลัมน์. เมื่อคอลเลกชันมีมากกว่าหนึ่งคอลัมน์, ตัวอย่าง TextColumn แต่ละอันจะแสดง Width และ SpaceAfter ของตนเอง.


ขั้นตอนที่ 8: ล้างหรือแก้ไขเนื้อหาส่วนเป็นกลุ่ม

Section.AppendContent() และ PrependContent() คัดลอกเนื้อหาข้อความหลักของส่วนอื่นเข้ามาในส่วนนี้; ClearContent() ทำให้เนื้อหาข้อความหลักของส่วนเป็นค่าว่างเป็นกลุ่ม. ClearHeadersFooters() และ DeleteHeaderFooterShapes() ล้างเนื้อหาหัวเรื่องและท้ายเรื่องทั่วทั้งส่วนโดยไม่ลบส่วนนั้นออก.

ปัญหาทั่วไปและวิธีแก้

การตั้งค่าหน้าของส่วนใหม่ไม่ตรงกับที่ฉันตั้งค่าไว้ PageSetup ถูกตั้งค่าในส่วนที่ผิด Section อินสแตนซ์. ตัวแบ่งส่วนจะถ่ายทอดการจัดรูปแบบไปยังส่วนที่ตามมาหลังจากนั้น – ตั้งค่า PageSetup บนส่วนที่ตามมา InsertBreak(), ไม่ใช่ส่วนก่อนหน้า.

เนื้อหาฮีดเดอร์หรือฟุตเตอร์จากส่วนก่อนหน้าปรากฏในส่วนใหม่โดยไม่คาดคิด ฮีดเดอร์หรือฟุตเตอร์ของส่วนใหม่ยังคงเชื่อมโยงกับส่วนก่อนหน้าอยู่ เรียก HeaderFooterCollection.LinkToPrevious(false), หรือเพิ่มเนื้อหาฮีดเดอร์/ฟุตเตอร์ที่แตกต่างให้กับส่วนใหม่ เพื่อยกเลิกการเชื่อมโยง.

ส่วนหัว/ส่วนท้ายของหน้าหนึ่งหรือหน้าคู่จะถูกละเว้น DifferentFirstPageHeaderFooter or OddAndEvenPagesHeaderFooter is false, หรือการจับคู่ HeaderFooterType รูปแบบไม่พบใน Section.HeadersFooters. ตั้งค่าสถานะบน PageSetup และเพิ่มรูปแบบส่วนหัว/ส่วนท้ายที่สอดคล้องกันเข้าด้วยกัน.

การจัดวางหลายคอลัมน์ไม่สามารถใช้ได้ TextColumns.SetCount() ถูกเรียกด้วยจำนวนหนึ่ง, หรือในส่วนที่ไม่ถูกต้องของ PageSetup. เรียก SetCount() โดยมีมากกว่าหนึ่งคอลัมน์ในส่วนเป้าหมายของ PageSetup.TextColumns.

การแทรกการแบ่งส่วนในตำแหน่งเอกสารที่ไม่ถูกต้อง DocumentBuilder.InsertBreak(BreakType) แทรกที่เคอร์เซอร์ปัจจุบันของตัวสร้าง ใช้ DocumentBuilder.MoveToSection() หรือสมาชิกอื่นของตัวสร้างที่ใช้กำหนดตำแหน่งเคอร์เซอร์เพื่อวางเคอร์เซอร์ก่อนเรียก InsertBreak().

คำถามที่พบบ่อย

ฉันจะเริ่มส่วนใหม่โดยไม่เริ่มหน้ใหม่ได้อย่างไร?

แทรกการหยุด SectionBreakContinuous ด้วย DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).

ฉันจะกำหนดระยะขอบและการวางแนวของส่วนให้เป็นของตัวเองได้อย่างไร?

แทรกการหยุดส่วน, แล้วตั้งค่า TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation, และ PaperSize บน PageSetup ของส่วนใหม่.

ฉันจะทำให้หน้าแรกของส่วนใช้ส่วนหัวที่แตกต่างกันได้อย่างไร?

ตั้งค่า PageSetup.DifferentFirstPageHeaderFooter = true บนส่วนนั้น และเพิ่ม HeaderFooter ชนิด HeaderFirst (และ FooterFirst หากต้องการ) ไปยังคอลเลกชัน HeadersFooters ของมัน.

ฉันจะจัดวางข้อความของส่วนเป็นสองคอลัมน์ได้อย่างไร?

เรียกใช้ PageSetup.TextColumns.SetCount(2) บนส่วนนั้น แล้วปรับค่า Spacing, EvenlySpaced หรือค่าของ TextColumn.Width แต่ละรายการตามต้องการ.

ฉันจะเข้าถึงส่วนแรกและส่วนสุดท้ายโดยตรงได้อย่างไร?

อ่าน Document.FirstSection และ Document.LastSection แทนการอ้างอิงด้วยดัชนีใน Document.Sections.

ดูเพิ่มเติม

 ภาษาไทย