จัดการรายการแบบหัวข้อสัญลักษณ์และลำดับเลขในงานนำเสนอด้วย .NET

ภาพรวม

Aspose.Slides for .NET ช่วยให้คุณสร้างและจัดรูปแบบรายการแบบหัวข้อสัญลักษณ์และรายการลำดับเลขในงานนำเสนอ PowerPoint และ OpenDocument รายการแต่ละรายการคือย่อหน้าที่การตั้งค่าหัวข้อสัญลักษณ์ถูกควบคุมผ่านรูปแบบย่อหน้า

ใช้คุณสมบัติ IParagraph.ParagraphFormat เพื่อเข้าถึงการตั้งค่ารายการระดับย่อหน้า จุดเข้าสำคัญคือ IParagraphFormat.Bullet ซึ่งคืนค่าออบเจกต์ IBulletFormat ด้วยออบเจกต์นี้ คุณสามารถตั้งค่าประเภทสัญลักษณ์, สัญลักษณ์, รูปภาพ, สี, ขนาด, รูปแบบการลำดับเลข, และหมายเลขเริ่มต้น

บทความนี้แสดงวิธีการ:

  • สร้างรายการแบบหัวข้อสัญลักษณ์ด้วยสัญลักษณ์ที่กำหนดเอง
  • สร้างหัวข้อสัญลักษณ์รูปภาพ
  • สร้างรายการหลายระดับโดยกำหนดความลึกของย่อหน้า
  • สร้างรายการลำดับเลข
  • ตรวจสอบและเปลี่ยนการจัดรูปแบบรายการในงานนำเสนอที่มีอยู่
  • อ่านสัญลักษณ์รายการและหมายเลขจริงพร้อมกับข้อความย่อหน้า

สร้างรายการแบบหัวข้อสัญลักษณ์

เพื่อสร้างรายการแบบหัวข้อสัญลักษณ์ ให้เพิ่มออบเจกต์ IParagraph ไปยัง ITextFrame และตั้งค่า IBulletFormat.Type เป็น BulletType.Symbol. จากนั้นคุณสามารถตั้งค่า IBulletFormat.Char, IBulletFormat.Color, และ IBulletFormat.Height เพื่อควบคุมลักษณะของหัวข้อสัญลักษณ์ได้

โค้ด C# ด้านล่างแสดงวิธีการสร้างรายการแบบหัวข้อสัญลักษณ์ในสไลด์:

using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

static Paragraph CreateParagraph(string text)
{
    var paragraph = new Paragraph();
    paragraph.ParagraphFormat.Bullet.Type = BulletType.Symbol;
    paragraph.ParagraphFormat.Bullet.Char = '*';
    paragraph.ParagraphFormat.Indent = 15;
    paragraph.ParagraphFormat.Bullet.IsBulletHardColor = NullableBool.True;
    paragraph.ParagraphFormat.Bullet.Color.Color = Color.IndianRed;
    paragraph.ParagraphFormat.Bullet.Height = 100;
    paragraph.Text = text;
    return paragraph;
}

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 200, 50);

var textFrame = autoShape.TextFrame;
textFrame.Paragraphs.Clear();

var paragraph1 = CreateParagraph("The first paragraph");
textFrame.Paragraphs.Add(paragraph1);

var paragraph2 = CreateParagraph("The second paragraph");
textFrame.Paragraphs.Add(paragraph2);

presentation.Save("symbol_bullets.pptx", SaveFormat.Pptx);

ผลลัพธ์:

หัวข้อสัญลักษณ์

สร้างรายการลำดับเลข

ใช้รายการลำดับเลขเมื่อลำดับของรายการสำคัญ ตั้งค่า IBulletFormat.Type เป็น BulletType.Numbered. คุณยังสามารถเลือกรูปแบบเลขลำดับด้วย IBulletFormat.NumberedBulletStyle หรือกำหนด IBulletFormat.NumberedBulletStartWith เมื่อรายการควรเริ่มจากค่าที่ไม่ใช่ 1

โค้ด C# ด้านล่างแสดงวิธีการสร้างรายการลำดับเลขในสไลด์:

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 90, 80);

var textFrame = autoShape.TextFrame;
textFrame.Paragraphs.Clear();

var paragraph1 = new Paragraph();
paragraph1.ParagraphFormat.Bullet.Type = BulletType.Numbered;
paragraph1.Text = "Apple";
textFrame.Paragraphs.Add(paragraph1);

var paragraph2 = new Paragraph();
paragraph2.ParagraphFormat.Bullet.Type = BulletType.Numbered;
paragraph2.Text = "Orange";
textFrame.Paragraphs.Add(paragraph2);

var paragraph3 = new Paragraph();
paragraph3.ParagraphFormat.Bullet.Type = BulletType.Numbered;
paragraph3.Text = "Banana";
textFrame.Paragraphs.Add(paragraph3);

presentation.Save("numbered_bullets.pptx", SaveFormat.Pptx);

ผลลัพธ์:

หัวข้อสัญลักษณ์ลำดับเลข

สร้างหัวข้อสัญลักษณ์รูปภาพ

Aspose.Slides ให้คุณแทนที่สัญลักษณ์หัวข้อสัญลักษณ์ปกติด้วยรูปภาพ. หัวข้อสัญลักษณ์รูปภาพทำงานได้ดีที่สุดกับรูปภาพที่เรียบง่ายและยังคงอ่านได้ที่ขนาดเล็ก เช่น ไอคอนหรือไฟล์ PNG โปร่งใสขนาดเลาะ.

เพื่อสร้างหัวข้อสัญลักษณ์รูปภาพ ให้เพิ่มรูปภาพไปยัง Presentation.Images และกำหนดออบเจกต์รูปภาพที่คืนค่าให้กับ IBulletFormat.Picture. ตั้งค่า IBulletFormat.Type เป็น BulletType.Picture ก่อนการกำหนดรูปภาพ.

สมมุติว่าเรามีไฟล์ “image.png”:

รูปภาพสำหรับหัวข้อสัญลักษณ์

โค้ด C# ด้านล่างแสดงวิธีการสร้างหัวข้อสัญลักษณ์รูปภาพในสไลด์:

using Aspose.Slides;
using Aspose.Slides.Export;

static Paragraph CreateParagraph(string text, IPPImage image)
{
    var paragraph = new Paragraph();
    paragraph.ParagraphFormat.Bullet.Type = BulletType.Picture;
    paragraph.ParagraphFormat.Bullet.Picture.Image = image;
    paragraph.ParagraphFormat.Indent = 15;
    paragraph.ParagraphFormat.Bullet.Height = 100;
    paragraph.Text = text;
    return paragraph;
}

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 200, 50);

var textFrame = autoShape.TextFrame;
textFrame.Paragraphs.Clear();

var imageBytes = File.ReadAllBytes("image.png");
var bulletImage = presentation.Images.AddImage(imageBytes);

var paragraph1 = CreateParagraph("The first paragraph", bulletImage);
textFrame.Paragraphs.Add(paragraph1);

var paragraph2 = CreateParagraph("The second paragraph", bulletImage);
textFrame.Paragraphs.Add(paragraph2);

presentation.Save("picture_bullets.pptx", SaveFormat.Pptx);

ผลลัพธ์:

หัวข้อสัญลักษณ์รูปภาพ

สร้างรายการหลายระดับ

ใช้ IParagraphFormat.Depth เพื่อวางรายการในระดับต่าง ๆ ระดับ 0 คือระดับบนสุด, ระดับ 1 อยู่ด้านล่างในระดับย่อย, เป็นต้น.

โค้ด C# ด้านล่างแสดงวิธีการสร้างรายการแบบหัวข้อสัญลักษณ์หลายระดับ:

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var autoShape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 260, 110);

var textFrame = autoShape.TextFrame;
textFrame.Paragraphs.Clear();

var paragraph1 = new Paragraph();
paragraph1.ParagraphFormat.Depth = 0;
paragraph1.Text = "My text - Depth 0";
textFrame.Paragraphs.Add(paragraph1);

var paragraph2 = new Paragraph();
paragraph2.ParagraphFormat.Depth = 1;
paragraph2.Text = "My text - Depth 1";
textFrame.Paragraphs.Add(paragraph2);

var paragraph3 = new Paragraph();
paragraph3.ParagraphFormat.Depth = 2;
paragraph3.Text = "My text - Depth 2";
textFrame.Paragraphs.Add(paragraph3);

var paragraph4 = new Paragraph();
paragraph4.ParagraphFormat.Depth = 3;
paragraph4.Text = "My text - Depth 3";
textFrame.Paragraphs.Add(paragraph4);

presentation.Save("multilevel_bullets.pptx", SaveFormat.Pptx);

ผลลัพธ์:

รายการหลายระดับ

เปลี่ยนรายการที่มีอยู่

เพื่อเปลี่ยนการจัดรูปแบบรายการในงานนำเสนอที่มีอยู่ ให้เข้าถึงย่อหน้าเป้าหมายและอัปเดตการตั้งค่า IParagraphFormat.Bullet ของมัน คุณสมบัติเหมือนกันที่ใช้สร้างรายการสามารถใช้เพื่อสอบถามหรือแก้ไขรายการที่โหลดจากไฟล์ PPT, PPTX หรือ ODP ได้.

โค้ด C# ด้านล่างเปลี่ยนย่อหน้าแรกในฟรมข้อความให้ใช้สไตล์รายการลำดับเลข:

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("input.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];

var paragraph = autoShape.TextFrame.Paragraphs[0];
paragraph.ParagraphFormat.Bullet.Type = BulletType.Numbered;
paragraph.ParagraphFormat.Bullet.NumberedBulletStyle = NumberedBulletStyle.BulletRomanUCPeriod;
paragraph.ParagraphFormat.Bullet.NumberedBulletStartWith = 1;
paragraph.ParagraphFormat.MarginLeft = 30;
paragraph.ParagraphFormat.Indent = -20;

presentation.Save("updated_list.pptx", SaveFormat.Pptx);

อ่านค่าหัวข้อสัญลักษณ์จริง

เมื่อสกัดเนื้องานนำเสนอ ให้เก็บสัญลักษณ์รายการพร้อมกับข้อความย่อหน้า เรียกใช้ IParagraphFormat.GetEffective และเข้าถึง IParagraphFormatEffectiveData.Bullet เพื่อรับรูปแบบหัวข้อสัญลักษณ์ที่มีผล ตรวจสอบ Type ก่อนอ่าน ActualBulletValue.

สำหรับรายการลำดับเลข ให้แยกแยะค่าต่อไปนี้สามค่า:

  • NumberedBulletStyle กำหนดรูปแบบ เช่น ตัวเลขอารบิกตามด้วยจุด หรือ ตัวอักษรตัวเล็กตามด้วยจุด.
  • NumberedBulletStartWith ระบุหมายเลขเริ่มต้นสำหรับกลุ่มย่อหน้าลำดับเลข.
  • ActualBulletValue คืนค่าตัวบ่งชี้ที่จัดรูปแบบสำหรับย่อหน้าที่กำหนด ตัวอย่าง รายการที่สองในรายการที่เริ่มจาก 5 จะคืนค่า 6..

รักษา Depth กับแต่ละย่อหน้าเพื่อคงระดับการซ้อนกันของมัน ตัวบ่งชี้จริงไม่ได้เข้ารหัสลำดับขั้นทั้งหมด: รายการซ้อนอาจคืนค่า c. แทนที่จะเป็นป้ายกำกับรวมเช่น 6.c..

ตัวอย่างที่ทำงานอิสระต่อไปนี้สร้างรายการ, บันทึกลงในงานนำเสนอ, และโหลดงานนำเสนอใหม่เพื่อรายงานข้อความของแต่ละย่อหน้า, ความลึก, ประเภทหัวข้อสัญลักษณ์, และค่าจริง. ตัวบ่งชี้รูปภาพสีน้ำเงินขนาดเล็กถูกสร้างจาก SVG ในบรรทัด.

using System;
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

using (var presentation = new Presentation())
{
    presentation.SlideSize.SetSize(720, 440, SlideSizeScaleType.DoNotScale);
    var slide = presentation.Slides[0];

    var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 20, 660, 400);
    shape.FillFormat.FillType = FillType.NoFill;
    shape.LineFormat.FillFormat.FillType = FillType.NoFill;

    var textFrame = shape.TextFrame;
    textFrame.Paragraphs.Clear();

    // สร้างสัญลักษณ์รูปภาพโดยไม่ต้องอ้างอิงไฟล์ภาพภายนอก.
    var svg = new SvgImage("<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16'><rect width='16' height='16' rx='4' fill='#0078D4'/></svg>");
    var bulletImage = presentation.Images.AddImage(svg);

    void AddParagraph(string text, short depth, BulletType type, short start = 1, NumberedBulletStyle style = NumberedBulletStyle.BulletArabicPeriod)
    {
        var paragraph = new Paragraph { Text = text };

        var format = paragraph.ParagraphFormat;
        format.Depth = depth;
        format.MarginLeft = 30 + depth * 40;
        format.Indent = -28;
        format.SpaceAfter = 8;
        format.DefaultPortionFormat.FontHeight = 22;
        format.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
        format.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
        format.Bullet.Type = type;
        format.Bullet.IsBulletHardColor = NullableBool.True;
        format.Bullet.Color.Color = Color.Black;
        if (type == BulletType.Numbered)
        {
            format.Bullet.NumberedBulletStyle = style;
            format.Bullet.NumberedBulletStartWith = start;
        }
        else if (type == BulletType.Symbol)
        {
            format.Bullet.Char = '\u2022';
        }
        else if (type == BulletType.Picture)
        {
            format.Bullet.Picture.Image = bulletImage;
        }

        textFrame.Paragraphs.Add(paragraph);
    }

    AddParagraph("First item", 0, BulletType.Numbered, 5);
    AddParagraph("Second item", 0, BulletType.Numbered, 5);
    AddParagraph("Nested item", 1, BulletType.Numbered, 3, NumberedBulletStyle.BulletAlphaLCPeriod);
    AddParagraph("Next nested item", 1, BulletType.Numbered, 3, NumberedBulletStyle.BulletAlphaLCPeriod);
    AddParagraph("Deep item", 2, BulletType.Numbered, 4, NumberedBulletStyle.BulletRomanLCPeriod);
    AddParagraph("Back to top level", 0, BulletType.Numbered, 5);
    AddParagraph("Symbol marker", 0, BulletType.Symbol);
    AddParagraph("No bullet", 0, BulletType.None);
    AddParagraph("Picture marker", 0, BulletType.Picture);
    presentation.Save("actual_bullet_values.pptx", SaveFormat.Pptx);
}

using var loadedPresentation = new Presentation("actual_bullet_values.pptx");
var loadedShape = (IAutoShape)loadedPresentation.Slides[0].Shapes[0];
Console.WriteLine("Text | Depth | Type | Actual value");
foreach (var paragraph in loadedShape.TextFrame.Paragraphs)
{
    var bullet = paragraph.ParagraphFormat.GetEffective().Bullet;
    string marker;
    switch (bullet.Type)
    {
        case BulletType.Numbered:
        case BulletType.Symbol:
            marker = bullet.ActualBulletValue;
            break;
        case BulletType.None:
            marker = $"{bullet.ActualBulletValue ?? "null"} (no bullet)";
            break;
        case BulletType.Picture:
            marker = $"{bullet.ActualBulletValue ?? "null"} (image required)";
            break;
        default:
            marker = "unsupported bullet type";
            break;
    }
    Console.WriteLine($"{paragraph.Text} | {paragraph.ParagraphFormat.Depth} | {bullet.Type} | {marker}");
}

รายการที่แสดงด้านล่างเป็นแหล่งข้อมูลของรายการ:

รายการที่เริ่มจาก 5, รายการอักษรและเลขโรมันซ้อน, สัญลักษณ์, ย่อหน้าไม่มีหัวข้อสัญลักษณ์, และตัวบ่งชี้รูปภาพสีน้ำเงิน

รายงานตรงกับสัญลักษณ์ที่แสดงใน PowerPoint:

Text | Depth | Type | Actual value
First item | 0 | Numbered | 5.
Second item | 0 | Numbered | 6.
Nested item | 1 | Numbered | c.
Next nested item | 1 | Numbered | d.
Deep item | 2 | Numbered | iv.
Back to top level | 0 | Numbered | 7.
Symbol marker | 0 | Symbol | •
No bullet | 0 | None | null (no bullet)
Picture marker | 0 | Picture | null (image required)

สำหรับ BulletType.None and BulletType.Picture ActualBulletValue คืนค่า null ไม่ใช่สตริงว่าง ให้จัดการประเภทเหล่านี้แยกกัน: ประเภทแรกไม่มีตัวบ่งชี้, ในขณะที่ประเภทที่สองต้องทำการสกัดรูปภาพหัวข้อสัญลักษณ์แยกต่างหาก. หัวข้อสัญลักษณ์รูปภาพไม่สามารถจำลองได้โดยเพียงสกัดตัวบ่งชี้ข้อความ.

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

สามารถส่งออกรายการแบบหัวข้อสัญลักษณ์และลำดับเลขเป็น PDF หรือภาพได้หรือไม่?

ใช่. Aspose.Slides รักษาการจัดรูปแบบรายการเมื่อรูปแบบเป้าหมายสนับสนุนการจัดวางข้อความและฟีเจอร์หัวข้อสัญลักษณ์ที่สอดคล้อง.

ฉันสามารถแก้ไขรายการในงานนำเสนอที่มีอยู่ได้หรือไม่?

ใช่. โหลดงานนำเสนอ, เข้าถึงย่อหน้าเป้าหมาย, ตรวจสอบหรืออัปเดตการตั้งค่า IParagraphFormat.Bullet ของมัน, แล้วบันทึกงานนำเสนอ.

รายการสามารถประกอบด้วยข้อความที่ไม่ใช่ละตินได้หรือไม่?

ใช่. ข้อความของรายการสามารถมีอักขระ Unicode, ดังนั้นคุณสามารถสร้างรายการในงานนำเสนอหลายภาษาได้. ตรวจสอบให้แน่ใจว่าแบบอักษรที่ใช้ในงานนำเสนอสนับสนุนอักขระที่คุณต้องการ.