Ako pridať tvary do PowerPointu v Jave

Ako pridať tvary do PowerPointu v Jave

Aspose.Slides FOSS for Java podporuje pridávanie AutoShapes, Tables, Connectors a PictureFrames do snímok prezentácie. Všetky typy tvarov sa pridávajú prostredníctvom kolekcie slide.getShapes().

Krok za krokom sprievodca

Krok 1: Pridajte Maven závislosť

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

Krok 2: Vytvoriť prezentáciu

Vždy používajte try-with-resources na správu zdrojov.

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: Pridať AutoShape

slide.getShapes().addAutoShape(shapeType, x, y, width, height) umiestni tvar na zadanú pozíciu a veľkosť (všetko v bodoch). Použite konštanty ShapeType na výber 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: Pridať tabuľku

slide.getShapes().addTable(x, y, colWidths, rowHeights) vytvára tabuľku na určenom mieste. Šírky stĺpcov a výšky riadkov sú polia hodnôt v bodoch.

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: Pridať konektor

Konektory vizuálne spájajú dva tvary. Najprv vytvorte tvary, potom pridajte konektor a nastavte jeho počiatočné a koncové body pripojenia.

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 miest pripojenia sú očíslované 0-3 pre obdĺžnik: top=0, left=1, bottom=2, right=3.


Krok 6: Pridať rámik obrázka

Vložte obrázok a pridajte ho do snímky ako PictureFrame. Najprv prečítajte bajty obrázka, pridajte ich do kolekcie obrázkov prezentácie a potom vytvorte 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);
}

Bežné problémy a riešenia

Tvar sa objavuje mimo viditeľnej oblasti snímky

Snímky majú predvolene 720 × 540 bodov. Hodnoty x alebo y mimo týchto hraníc umiestnia tvar mimo snímky. Zachovajte x < 720 a y < 540 a zabezpečte x + width <= 720 a y + height <= 540.

NullPointerException pri čítaní textu tvaru

addAutoShape() vracia objekt tvaru priamo. Ak vidíte null, skontrolujte, že neodstraňujete návratovú hodnotu. Tiež overte, že getTextFrame() nie je null pred čítaním textu.

Text bunky tabuľky je po priradení prázdny

Správna metóda je .getTextFrame().setText(value). Prístup k bunkám ako table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").


Často kladené otázky

Koľko tvarov môžem pridať na snímku?

Neexistuje žiadny limit uložený knižnicou. Praktické limity závisia od veľkosti súboru a schopnosti vykresľovania cieľového prehliadača PPTX.

Môžem zmeniť pozíciu tvaru po jeho pridávaní?

Áno. Objekt tvaru vrátený pomocou addAutoShape() má vlastnosti polohy a veľkosti prostredníctvom getShapeFrame().

Sú grafy podporované?

Nie. Grafy, SmartArt a OLE objekty nie sú v tejto edícii implementované a vyvolávajú UnsupportedOperationException.


Pozri tiež

 Slovenčina