Jak přidat tvary do PowerPointu v Javě

Jak přidat tvary do PowerPointu v Javě

Aspose.Slides FOSS for Java podporuje přidávání AutoShapes, Tables, Connectors a PictureFrames do snímků prezentace. Všechny typy tvarů jsou přidávány prostřednictvím kolekce slide.getShapes().

Průvodce krok za krokem

Krok 1: Přidejte Maven závislost

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Krok 2: Vytvořit prezentaci

Vždy používejte try-with-resources pro správu prostředků.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    // ... add shapes ...
    prs.save("output.pptx", SaveFormat.PPTX);
}

Krok 3: Přidat AutoShape

slide.getShapes().addAutoShape(shapeType, x, y, width, height) umístí tvar na zadanou pozici a velikost (vše v bodech). Použijte konstanty ShapeType k výběru tvaru.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    // Rectangle
    IAutoShape rect = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 300, 100
    );
    rect.addTextFrame("Rectangle shape");

    // Ellipse
    IAutoShape ellipse = slide.getShapes().addAutoShape(
        ShapeType.ELLIPSE, 400, 50, 200, 100
    );
    ellipse.addTextFrame("Ellipse shape");

    prs.save("autoshapes.pptx", SaveFormat.PPTX);
}

Krok 4: Přidat tabulku

slide.getShapes().addTable(x, y, colWidths, rowHeights) vytvoří tabulku na zadané pozici. Šířky sloupců a výšky řádků jsou pole hodnot v bodech.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    double[] colWidths = {150.0, 150.0, 150.0};
    double[] rowHeights = {40.0, 40.0, 40.0};
    ITable table = slide.getShapes().addTable(50, 200, colWidths, rowHeights);

    // Set header row text
    String[] headers = {"Product", "Units", "Revenue"};
    for (int col = 0; col < headers.length; col++) {
        table.getRows().get(0).get(col).getTextFrame().setText(headers[col]);
    }

    // Set data rows
    String[][] rows = {
        {"Widget A", "120", "$2,400"},
        {"Widget B", "85", "$1,700"},
    };
    for (int row = 0; row < rows.length; row++) {
        for (int col = 0; col < rows[row].length; col++) {
            table.getRows().get(row + 1).get(col)
                .getTextFrame().setText(rows[row][col]);
        }
    }

    prs.save("table.pptx", SaveFormat.PPTX);
}

Krok 5: Přidat konektor

Spojnice vizuálně propojují dva tvary. Nejprve vytvořte tvary, poté přidejte spojnici a nastavte její počáteční a koncové připojovací body.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    IAutoShape box1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 100, 150, 60
    );
    box1.addTextFrame("Start");

    IAutoShape box2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 100, 150, 60
    );
    box2.addTextFrame("End");

    IConnector conn = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn.setStartShapeConnectedTo(box1);
    conn.setStartShapeConnectionSiteIndex(3);  // right side of box1
    conn.setEndShapeConnectedTo(box2);
    conn.setEndShapeConnectionSiteIndex(1);    // left side of box2

    prs.save("connector.pptx", SaveFormat.PPTX);
}

Indexy připojovacích míst jsou očíslovány 0‑3 pro obdélník: horní=0, levý=1, dolní=2, pravý=3.


Krok 6: Přidat rám obrázku

Vložte obrázek a přidejte jej do snímku jako PictureFrame. Nejprve načtěte bajty obrázku, přidejte je do kolekce obrázků prezentace a poté vytvořte rámec.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Paths;

try (Presentation prs = new Presentation()) {
    byte[] imageData = Files.readAllBytes(Paths.get("logo.png"));
    IPPImage image = prs.getImages().addImage(imageData);

    ISlide slide = prs.getSlides().get(0);
    slide.getShapes().addPictureFrame(
        ShapeType.RECTANGLE,  // bounding shape type
        50, 50,               // x, y in points
        200, 150,             // width, height in points
        image
    );

    prs.save("with-image.pptx", SaveFormat.PPTX);
}

Běžné problémy a opravy

Tvar se zobrazuje mimo viditelnou oblast snímku

Snímky mají ve výchozím nastavení rozměry 720 × 540 bodů. Hodnoty x nebo y mimo tyto hranice umístí tvar mimo snímek. Zachovejte x < 720 a y < 540 a zajistěte x + width <= 720 a y + height <= 540.

NullPointerException při čtení textu tvaru

addAutoShape() vrací objekt tvaru přímo. Pokud vidíte null, zkontrolujte, že neodhazujete návratovou hodnotu. Také ověřte, že getTextFrame() není null před čtením textu.

Text buňky tabulky je po přiřazení prázdný

Správná metoda je .getTextFrame().setText(value). Přístup k buňkám jako table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").


Často kladené otázky

Kolik tvarů mohu přidat na snímek?

Neexistuje žádné omezení uložené knihovnou. Praktická omezení závisí na velikosti souboru a na schopnosti vykreslování vašeho cílového prohlížeče PPTX.

Mohu změnit pozici tvaru po jeho přidání?

Ano. Objekt tvaru vrácený pomocí addAutoShape() má vlastnosti pozice a velikosti prostřednictvím getShapeFrame().

Jsou grafy podporovány?

Ne. Grafy, SmartArt a OLE objekty nejsou v této edici implementovány a vyvolávají UnsupportedOperationException.


Viz také

 Čeština