วิธีทำงานกับข้อความใน .NET
คู่มือนี้แสดงวิธีทำงานกับข้อความใน Aspose.Words FOSS สำหรับ .NET: การจัดรูปแบบแบบอักษรของ run, การจัดรูปแบบย่อหน้า, การค้นหาและแทนที่ข้อความด้วย Range, การเพิ่มความคิดเห็น, และการแปลงย่อหน้าเป็นรายการ. Aspose.Words FOSS สำหรับ .NET มีให้ผ่าน NuGet หรือโดยการสร้างจากซอร์ส.
คู่มือแบบเป็นขั้นตอน
ขั้นตอนที่ 1: ดึงไลบรารี
คัดลอกรีโพซิทอรีและสร้าง Aspose.Words.sln ในโหมด Release จากนั้นเพิ่มการอ้างอิงโครงการไปยัง Aspose.Words.csproj จากโครงการ .NET ของคุณเอง ตามที่อธิบายใน คู่มือการติดตั้ง. เพิ่ม using Aspose.Words; ที่ส่วนบนของไฟล์ใด ๆ ที่ทำงานกับข้อความ.
ขั้นตอนที่ 2: จัดรูปแบบแบบอักษรของ Run
Run คือช่วงของข้อความที่ใช้การจัดรูปแบบชุดเดียวกัน; คุณสมบัติ Text ของมันเก็บเนื้อหาข้อความแบบธรรมดาและคุณสมบัติ Font (ออบเจกต์ Font) เก็บการจัดรูปแบบระดับอักขระ — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, และ StrikeThrough เป็นต้น. Font.ClearFormatting() จะรีเซ็ต run กลับไปเป็นค่าเริ่มต้น. runs ของย่อหน้าสามารถเข้าถึงได้ผ่านคุณสมบัติ Runs ของมัน, ซึ่งเป็น RunCollection. การตั้งค่าคุณสมบัติแบบอักษรบน DocumentBuilder.Font ก่อนเขียนข้อความใหม่มักจะง่ายกว่าการจัดรูปแบบออบเจกต์ Run แต่ละอันหลังจากนั้น.
ขั้นตอนที่ 3: จัดรูปแบบย่อหน้า
Paragraph.ParagraphFormat (วัตถุ ParagraphFormat) ควบคุมการจัดวางระดับย่อหน้า: Alignment, การเยื้อง (LeftIndent, RightIndent, FirstLineIndent), ระยะห่าง (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule) และพฤติกรรมการแบ่งหน้า (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() รีเซ็ตค่าทั้งหมดเป็นค่าเริ่มต้น และ Paragraph.JoinRunsWithSameFormatting() รวมรันที่ติดกันที่มีการจัดรูปแบบเดียวกัน — มีประโยชน์หลังจากการแก้ไขเชิงโปรแกรมหลายขั้นตอนทำให้ย่อหน้ามีรันมากเกินกว่าที่จำเป็น.
ขั้นตอนที่ 4: ค้นหาและแทนที่ข้อความด้วยช่วง
โหนดที่บรรจุเนื้อหาแต่ละอัน — ไม่ว่าจะเป็น Document, Section, Paragraph หรือ Run — จะเปิดเผย Range. Range.Text คืนค่าข้อความธรรมดาของทุกอย่างภายในช่วงนั้น, และ Range.Replace(pattern, replacement) ทำการค้นหาและแทนที่ที่จำกัดเฉพาะช่วงนั้น: เรียกใช้บน Paragraph ของ Range เพื่อเปลี่ยนข้อความในย่อหน้าเดียวเท่านั้น, หรือบน Document.Range เพื่อค้นหาทั้งเอกสาร. Range.Delete() ลบเนื้อหาของช่วงนั้นโดยตรง.
ขั้นตอนที่ 5: เพิ่มความคิดเห็น
สร้าง Comment ด้วย new Comment(doc, author, initial, dateTime), ตั้งข้อความของมันด้วย SetText(text), แล้วแทรกลงในโครงต้นไม้เหมือนโหนดอื่นใด. Comment.AddReply(author, initial, dateTime, text) แนบการตอบแบบเธรด — ซึ่งเป็น Comment — และ RemoveReply(reply) / RemoveAllReplies() จะดึงการตอบกลับออก. ความคิดเห็นของเอกสารจะถูกรวบรวมใน CommentCollection.
ขั้นตอนที่ 6: แปลงย่อหน้าให้เป็นรายการ
Paragraph.ListFormat (วัตถุ ListFormat) รายงานและควบคุมว่ามีย่อหน้าเข้าร่วมรายการหรือไม่: IsListItem และ ListLevelNumber รายงานสถานะปัจจุบันของมัน. ApplyBulletDefault() แปลงย่อหน้าเป็นรายการหัวข้อแบบจุดเริ่มต้นโดยค่าเริ่มต้นและ ApplyNumberDefault() เป็นรายการลำดับเลขโดยค่าเริ่มต้น; ListIndent() / ListOutdent() ปรับระดับการซ้อน, และ RemoveNumbers() แปลงกลับเป็นย่อหน้าธรรมดา.
ปัญหาทั่วไปและวิธีแก้ไข
การจัดรูปแบบหนึ่ง Runฟอนต์ของมันไม่ได้เปลี่ยนข้อความใกล้เคียง. ข้อความที่อยู่ติดกันเป็นข้อความที่แตกต่าง Run โดยมีของตนเอง Font อินสแตนซ์ ทั้งนี้ให้ค้นหาและจัดรูปแบบทุกส่วนที่ได้รับผลกระทบ Run, หรือกำหนดรูปแบบบน DocumentBuilder.Font ก่อนเขียนข้อความใหม่.
Range.Replace เปลี่ยนข้อความนอกพื้นที่ที่ต้องการ. Replace ถูกเรียกบน Document.Range แทนช่วงของโหนดที่แคบกว่า. เรียกใช้บนเฉพาะ Paragraph or Section ซึ่งข้อความควรเปลี่ยนแปลง.
ย่อหน้าดูเหมือนรายการสัญลักษณ์แต่ IsListItem is false. สัญลักษณ์เป็นข้อความที่พิมพ์ขึ้น ไม่ใช่การจัดรูปแบบรายการจริง ใช้กับ ListFormat.ApplyBulletDefault() แทน.
เอกสารสุดท้ายจะมีโหนกมากกว่า Run ที่คาดไว้. การแก้ไขเชิงโปรแกรมขนาดเล็กซ้ำหลายครั้งทำให้ runs ถูกแยกโดยไม่รวมกันใหม่ Call Paragraph.JoinRunsWithSameFormatting() หลังจาก batch ของการแก้ไข.
คำถามที่พบบ่อย
ความแตกต่างระหว่าง Run และ Paragraph คืออะไร?
A Run คือช่วงข้อความที่ใช้การจัดรูปแบบอักขระชุดเดียว (Font). A Paragraph คือโหนดเชิงประกอบที่มีหนึ่งหรือหลาย run พร้อมการจัดรูปแบบระดับย่อหน้า (ParagraphFormat).
ฉันจะอ่านข้อความทั้งหมดในเอกสารหรือในส่วนเดียวได้อย่างไร?
อ่านคุณสมบัติ Text ของ Range ของโหนดนั้น — document.Range.Text หรือ section.Range.Text.
ฉันจะแทนที่ข้อความภายในเพียงย่อหน้าเดียว ไม่ใช่ทั้งเอกสารได้อย่างไร?
เรียก Replace(pattern, replacement) บน Range ของ Paragraph นั้น, ไม่ใช่บน Document.Range.
ฉันจะตอบกลับความคิดเห็นที่มีอยู่ได้อย่างไร?
เรียก Comment.AddReply(author, initial, dateTime, text) บนอินสแตนซ์ Comment ดั้งเดิม.
ฉันจะเปลี่ยนรายการลำดับเลขให้กลับเป็นย่อหน้าธรรมดาได้อย่างไร?
เรียก RemoveNumbers() บน ListFormat ของย่อหน้านั้น.