Felsorolásjeles és számozott listák kezelése prezentációkban Java-ban

Áttekintés

Az Aspose.Slides for Java lehetővé teszi, hogy felsorolásjelekkel és számozott listákkal hozzon létre és formázzon PowerPoint és OpenDocument prezentációkat. A listaelem egy bekezdés, amelynek a felsorolásjeles beállításai a bekezdés formázásán keresztül szabályozhatók.

Használja a IParagraph.getParagraphFormat metódust a bekezdés szintű lista beállítások eléréséhez. A fő belépési pont a IParagraphFormat.getBullet, amely egy IBulletFormat objektumot ad vissza. Ezzel az objektummal beállíthatja a felsorolásjel típusát, szimbólumát, képét, színét, méretét, a számozási stílust és a kezdő számot.

Ez a cikk bemutatja, hogyan:

  • létrehozni egy felsorolásjeles listát egy egyéni szimbólummal
  • létrehozni egy képes felsorolásjelet
  • létrehozni több szintű listát a bekezdés mélység beállításával
  • létrehozni egy számozott listát
  • vizsgálni és módosítani a lista formázását egy meglévő prezentációban
  • kiolvasni a tényleges lista jelzőket és számokat a bekezdés szövege mellett

Felsorolásjeles lista létrehozása

Felsorolásjeles lista létrehozásához adjon IParagraph objektumokat egy ITextFrame elemhez, és állítsa be a IBulletFormat.setType értékét BulletType.Symbol-ra. Ezután beállíthatja a IBulletFormat.setChar, a IBulletFormat.getColor és a IBulletFormat.setHeight értékeket a felsorolásjel megjelenésének vezérléséhez.

Az alábbi Java kód bemutatja, hogyan hozhat létre egy felsorolásjeles listát egy dián:

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 200, 50);

    ITextFrame textFrame = autoShape.getTextFrame();
    textFrame.getParagraphs().clear();

    Color bulletColor = new Color(205, 92, 92);

    Paragraph paragraph1 = new Paragraph();
    paragraph1.getParagraphFormat().getBullet().setType(BulletType.Symbol);
    paragraph1.getParagraphFormat().getBullet().setChar('*');
    paragraph1.getParagraphFormat().setIndent(15);
    paragraph1.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True);
    paragraph1.getParagraphFormat().getBullet().getColor().setColor(bulletColor);
    paragraph1.getParagraphFormat().getBullet().setHeight(100);
    paragraph1.setText("The first paragraph");
    textFrame.getParagraphs().add(paragraph1);

    Paragraph paragraph2 = new Paragraph();
    paragraph2.getParagraphFormat().getBullet().setType(BulletType.Symbol);
    paragraph2.getParagraphFormat().getBullet().setChar('*');
    paragraph2.getParagraphFormat().setIndent(15);
    paragraph2.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True);
    paragraph2.getParagraphFormat().getBullet().getColor().setColor(bulletColor);
    paragraph2.getParagraphFormat().getBullet().setHeight(100);
    paragraph2.setText("The second paragraph");
    textFrame.getParagraphs().add(paragraph2);

    presentation.save("symbol_bullets.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Az eredmény:

A szimbólum felsorolásjelek

Számozott lista létrehozása

Használjon számozott listákat, ha az elemek sorrendje fontos. Állítsa be a IBulletFormat.setType értékét BulletType.Numbered-ra. A számozási formátumot a IBulletFormat.setNumberedBulletStyle metódussal is kiválaszthatja, vagy a IBulletFormat.setNumberedBulletStartWith segítségével állíthatja be, ha a lista 1 helyett más értékkel kezdődjön.

Az alábbi Java kód bemutatja, hogyan hozhat létre egy számozott listát egy dián:

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 90, 80);

    ITextFrame textFrame = autoShape.getTextFrame();
    textFrame.getParagraphs().clear();

    Paragraph paragraph1 = new Paragraph();
    paragraph1.getParagraphFormat().getBullet().setType(BulletType.Numbered);
    paragraph1.setText("Apple");
    textFrame.getParagraphs().add(paragraph1);

    Paragraph paragraph2 = new Paragraph();
    paragraph2.getParagraphFormat().getBullet().setType(BulletType.Numbered);
    paragraph2.setText("Orange");
    textFrame.getParagraphs().add(paragraph2);

    Paragraph paragraph3 = new Paragraph();
    paragraph3.getParagraphFormat().getBullet().setType(BulletType.Numbered);
    paragraph3.setText("Banana");
    textFrame.getParagraphs().add(paragraph3);

    presentation.save("numbered_bullets.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Az eredmény:

A számozott felsorolásjelek

Képes felsorolásjel létrehozása

Az Aspose.Slides lehetővé teszi, hogy a szokásos felsorolásjeles szimbólumot egy képpel helyettesítse. A képes felsorolásjelek a legegyszerűbb képekkel működnek a legjobban, amelyek kis méretben is olvashatóak, például ikonok vagy kis átlátszó PNG fájlok.

Képes felsorolásjel létrehozásához adjon egy képet a Presentation.getImages metódushoz, és rendelje hozzá a visszaadott képobjektumot a IBulletFormat.getPicture metódushoz. A képet hozzárendelés előtt állítsa be a IBulletFormat.setType értékét BulletType.Picture-ra.

Tegyük fel, hogy van egy “image.png” fájlunk:

Kép a felsorolásjelekhez

Az alábbi Java kód bemutatja, hogyan hozhat létre képes felsorolásjeleket egy dián:

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 200, 50);

    ITextFrame textFrame = autoShape.getTextFrame();
    textFrame.getParagraphs().clear();

    IPPImage bulletImage = presentation.getImages().addImage(Images.fromFile("image.png"));

    Paragraph paragraph1 = new Paragraph();
    paragraph1.getParagraphFormat().getBullet().setType(BulletType.Picture);
    paragraph1.getParagraphFormat().getBullet().getPicture().setImage(bulletImage);
    paragraph1.getParagraphFormat().setIndent(15);
    paragraph1.getParagraphFormat().getBullet().setHeight(100);
    paragraph1.setText("The first paragraph");
    textFrame.getParagraphs().add(paragraph1);

    Paragraph paragraph2 = new Paragraph();
    paragraph2.getParagraphFormat().getBullet().setType(BulletType.Picture);
    paragraph2.getParagraphFormat().getBullet().getPicture().setImage(bulletImage);
    paragraph2.getParagraphFormat().setIndent(15);
    paragraph2.getParagraphFormat().getBullet().setHeight(100);
    paragraph2.setText("The second paragraph");
    textFrame.getParagraphs().add(paragraph2);

    presentation.save("picture_bullets.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Az eredmény:

A képes felsorolásjelek

Többszintű lista létrehozása

Használja az IParagraphFormat.setDepth metódust a listaelemek különböző szintekre helyezéséhez. A 0. szint a legfelső szint, az 1. szint alatta van, és így tovább.

Az alábbi Java kód bemutatja, hogyan hozhat létre egy többszintű felsorolásjeles listát:

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 260, 110);

    ITextFrame textFrame = autoShape.getTextFrame();
    textFrame.getParagraphs().clear();

    Paragraph paragraph1 = new Paragraph();
    paragraph1.getParagraphFormat().setDepth((short) 0);
    paragraph1.setText("My text - Depth 0");
    textFrame.getParagraphs().add(paragraph1);

    Paragraph paragraph2 = new Paragraph();
    paragraph2.getParagraphFormat().setDepth((short) 1);
    paragraph2.setText("My text - Depth 1");
    textFrame.getParagraphs().add(paragraph2);

    Paragraph paragraph3 = new Paragraph();
    paragraph3.getParagraphFormat().setDepth((short) 2);
    paragraph3.setText("My text - Depth 2");
    textFrame.getParagraphs().add(paragraph3);

    Paragraph paragraph4 = new Paragraph();
    paragraph4.getParagraphFormat().setDepth((short) 3);
    paragraph4.setText("My text - Depth 3");
    textFrame.getParagraphs().add(paragraph4);

    presentation.save("multilevel_bullets.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Az eredmény:

A többszintű lista

Meglévő lista módosítása

A lista formázásának meglévő prezentációban történő módosításához érje el a célnékezetet, és frissítse annak IParagraphFormat.getBullet beállításait. Ugyanazok a tulajdonságok, amelyeket listák létrehozásához használt, felhasználhatók a PPT, PPTX vagy ODP fájlból betöltött listák megtekintésére vagy módosítására.

Az alábbi Java kód megváltoztatja egy szövegkeret első bekezdését, hogy számozott lista stílust használjon:

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape autoShape = (IAutoShape) slide.getShapes().get_Item(0);

    IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
    paragraph.getParagraphFormat().getBullet().setType(BulletType.Numbered);
    paragraph.getParagraphFormat().getBullet().setNumberedBulletStyle(NumberedBulletStyle.BulletRomanUCPeriod);
    paragraph.getParagraphFormat().getBullet().setNumberedBulletStartWith((short) 1);
    paragraph.getParagraphFormat().setMarginLeft(30);
    paragraph.getParagraphFormat().setIndent(-20);

    presentation.save("updated_list.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

A tényleges felsorolásjel értékek olvasása

Prezentáció tartalmának kinyerésekor tartsa meg a lista jelzőket a bekezdés szövegével együtt. Hívja meg az IParagraphFormat.getEffective metódust, és érje el a IParagraphFormatEffectiveData.getBullet értékét a tényleges felsorolásjelformátum megszerzéséhez. Olvasás előtt ellenőrizze a getType értékét a getActualBulletValue meghívása előtt.

Számozott listák esetén különböztesse meg a következő három értéket:

  • getNumberedBulletStyle meghatározza a formátumot, például arab számok ponttal vagy kisbetűs betűk ponttal követve.
  • getNumberedBulletStartWith adja meg a kezdő számot egy számozott bekezdéscsoport számára.
  • getActualBulletValue visszaadja egy adott bekezdés formázott jelzőjét. Például egy 5-től induló lista második eleme 6.-ot ad vissza.

Minden bekezdésnél őrizze meg a getDepth értékét a beágyazási szint megtartásához. A tényleges jelző nem kódolja a teljes hierarchiát: egy belső elem c.-t adhat vissza a 6.c.-hez hasonló kombinált címke helyett.

Az alábbi önálló példa listákat hoz létre, elmenti őket egy prezentációba, majd újratölti a prezentációt, hogy jelentést készítsen minden bekezdés szövegéről, mélységéről, felsorolásjeles típusáról és tényleges értékéről. A kicsi kék képjelző inline SVG-ből jön létre.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(720, 440, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 20, 660, 400);
    shape.getFillFormat().setFillType(FillType.NoFill);
    shape.getLineFormat().getFillFormat().setFillType(FillType.NoFill);

    ITextFrame textFrame = shape.getTextFrame();
    textFrame.getParagraphs().clear();

    // Készítsen képes jelzőt külső képfájl nélkül.
    SvgImage 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>");
    IPPImage bulletImage = presentation.getImages().addImage(svg);

    class ListBuilder {
        void addParagraph(String text, short depth, byte type, short start, byte style) {
            Paragraph paragraph = new Paragraph();
            paragraph.setText(text);

            IParagraphFormat format = paragraph.getParagraphFormat();
            format.setDepth(depth);
            format.setMarginLeft(30 + depth * 40);
            format.setIndent(-28);
            format.setSpaceAfter(8);
            format.getDefaultPortionFormat().setFontHeight(22);
            format.getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
            format.getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
            format.getBullet().setType(type);
            format.getBullet().setBulletHardColor(NullableBool.True);
            format.getBullet().getColor().setColor(Color.BLACK);
            if (type == BulletType.Numbered) {
                format.getBullet().setNumberedBulletStyle(style);
                format.getBullet().setNumberedBulletStartWith(start);
            } else if (type == BulletType.Symbol) {
                format.getBullet().setChar('\u2022');
            } else if (type == BulletType.Picture) {
                format.getBullet().getPicture().setImage(bulletImage);
            }

            textFrame.getParagraphs().add(paragraph);
        }
    }

    ListBuilder list = new ListBuilder();
    list.addParagraph("First item", (short) 0, BulletType.Numbered, (short) 5, NumberedBulletStyle.BulletArabicPeriod);
    list.addParagraph("Second item", (short) 0, BulletType.Numbered, (short) 5, NumberedBulletStyle.BulletArabicPeriod);
    list.addParagraph("Nested item", (short) 1, BulletType.Numbered, (short) 3, NumberedBulletStyle.BulletAlphaLCPeriod);
    list.addParagraph("Next nested item", (short) 1, BulletType.Numbered, (short) 3, NumberedBulletStyle.BulletAlphaLCPeriod);
    list.addParagraph("Deep item", (short) 2, BulletType.Numbered, (short) 4, NumberedBulletStyle.BulletRomanLCPeriod);
    list.addParagraph("Back to top level", (short) 0, BulletType.Numbered, (short) 5, NumberedBulletStyle.BulletArabicPeriod);
    list.addParagraph("Symbol marker", (short) 0, BulletType.Symbol, (short) 1, NumberedBulletStyle.BulletArabicPeriod);
    list.addParagraph("No bullet", (short) 0, BulletType.None, (short) 1, NumberedBulletStyle.BulletArabicPeriod);
    list.addParagraph("Picture marker", (short) 0, BulletType.Picture, (short) 1, NumberedBulletStyle.BulletArabicPeriod);
    presentation.save("actual_bullet_values.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Presentation loadedPresentation = new Presentation("actual_bullet_values.pptx");
try {
    IAutoShape loadedShape = (IAutoShape) loadedPresentation.getSlides().get_Item(0).getShapes().get_Item(0);
    System.out.println("Text | Depth | Type | Actual value");
    for (IParagraph paragraph : loadedShape.getTextFrame().getParagraphs()) {
        IBulletFormatEffectiveData bullet = paragraph.getParagraphFormat().getEffective().getBullet();
        String marker;
        switch (bullet.getType()) {
            case BulletType.Numbered:
            case BulletType.Symbol:
                marker = bullet.getActualBulletValue();
                break;
            case BulletType.None:
                marker = bullet.getActualBulletValue() + " (no bullet)";
                break;
            case BulletType.Picture:
                marker = bullet.getActualBulletValue() + " (image required)";
                break;
            default:
                marker = "unsupported bullet type";
                break;
        }
        String typeName = BulletType.getName(BulletType.class, bullet.getType());
        System.out.println(paragraph.getText() + " | " + paragraph.getParagraphFormat().getDepth() + " | " + typeName + " | " + marker);
    }
} finally {
    loadedPresentation.dispose();
}

Az eredeti listák alább láthatók.

5-től induló listák, beágyazott betű- és római számú elemek, szimbólum jelző, felsorolásjel nélküli bekezdés, és egy kék képes jelző

A jelentés megegyezik a PowerPointban megjelenített jelzőkkel:

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)

A BulletType.None and BulletType.Picture esetén a getActualBulletValue null értéket ad vissza, nem üres karakterláncot. Kezelje ezeket a típusokat külön: az előzőnek nincs jelzője, míg az utóbbit külön kell kivonni a felsorolásképből. A képes felsorolásjel nem reprodukálható csak egy szövegjelző kinyerésével.

GYIK

Exportálhatók-e a felsorolásjeles és számozott listák PDF-re vagy képekre?

Igen. Az Aspose.Slides megőrzi a lista formázását, ha a célformátum támogatja a megfelelő szövegelrendezést és felsorolásjeles funkciókat.

Szerkeszthetek listákat meglévő prezentációkban?

Igen. Töltse be a prezentációt, érje el a célnékezetet, vizsgálja vagy frissítse annak IParagraphFormat.getBullet beállításait, és mentse a prezentációt.

Tartalmazhatnak-e a listák nem latin karaktereket?

Igen. A listaelemek szövege tartalmazhat Unicode karaktereket, így többnyelvű prezentációkban is létrehozhat listákat. Győződjön meg róla, hogy a prezentációban használt betűtípusok támogatják a szükséges karaktereket.