Як з’єднати форми з конекторами у Java

Як з’єднати форми з конекторами у Java

З’єднувачі в Aspose.Slides FOSS — це лінійні форми, які приєднуються до місць з’єднання на інших формах. Коли ви переміщуєте підключену форму, кінець з’єднувача переміщується разом з нею. Найпоширеніший тип з’єднувача — BENT_CONNECTOR3, який прокладає шлях навколо перешкод з одним вигином у вигляді ліктя.


Вимоги

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

Індекси сайтів підключення

Кожна форма має чотири пронумеровані точки підключення:

ІндексПозиція
0Верхній центр
1Лівий центр
2Нижній центр
3Правий центр

З’єднати дві форми

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

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

    // Add two rectangles
    IAutoShape box1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 200, 200, 100
    );
    IAutoShape box2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 450, 200, 200, 100
    );

    box1.addTextFrame("Start");
    box2.addTextFrame("End");

    // Add a bent connector (initial bounds are overwritten by the connection)
    IConnector conn = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );

    // Connect right side of box1 (site 3) to left side of box2 (site 1)
    conn.setStartShapeConnectedTo(box1);
    conn.setStartShapeConnectionSiteIndex(3);
    conn.setEndShapeConnectedTo(box2);
    conn.setEndShapeConnectionSiteIndex(1);

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

Обмеження заповнювача (0, 0, 10, 10), передані до addConnector, ігноруються після встановлення кінцевих точок з’єднання; PowerPoint перенаправляє з’єднувач до приєднаних форм.


Типи конекторів

import org.aspose.slides.foss.ShapeType;

// Straight line
ShapeType.STRAIGHT_CONNECTOR1

// Single elbow (L-shape)
ShapeType.BENT_CONNECTOR2

// Double elbow (Z-shape): most common
ShapeType.BENT_CONNECTOR3

// Curved connector
ShapeType.CURVED_CONNECTOR3

Стилізуйте лінію з’єднання

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

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

    IAutoShape box1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 150, 180, 80
    );
    IAutoShape box2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 500, 300, 180, 80
    );

    IConnector conn = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn.setStartShapeConnectedTo(box1);
    conn.setStartShapeConnectionSiteIndex(2);   // bottom of box1
    conn.setEndShapeConnectedTo(box2);
    conn.setEndShapeConnectionSiteIndex(0);     // top of box2

    // Style: 2 pt width, blue color
    ILineFormat lf = conn.getLineFormat();
    lf.setWidth(2.0);
    lf.getFillFormat().getSolidFillColor().setColor(
        Color.fromArgb(255, 0, 0, 255)
    );

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

Блок‑схема з кількома з’єднувачами

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

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

    // Three-step flowchart
    IAutoShape step1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 50, 200, 70
    );
    IAutoShape step2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 220, 200, 70
    );
    IAutoShape step3 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 390, 200, 70
    );

    step1.addTextFrame("Step 1");
    step2.addTextFrame("Step 2");
    step3.addTextFrame("Step 3");

    // Connect step1 -> step2
    IConnector conn1 = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn1.setStartShapeConnectedTo(step1);
    conn1.setStartShapeConnectionSiteIndex(2);   // bottom
    conn1.setEndShapeConnectedTo(step2);
    conn1.setEndShapeConnectionSiteIndex(0);     // top

    // Connect step2 -> step3
    IConnector conn2 = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn2.setStartShapeConnectedTo(step2);
    conn2.setStartShapeConnectionSiteIndex(2);
    conn2.setEndShapeConnectedTo(step3);
    conn2.setEndShapeConnectionSiteIndex(0);

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

Прочитати властивості конектора

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation("connected.pptx")) {
    for (IShape shape : prs.getSlides().get(0).getShapes()) {
        if (shape instanceof Connector) {
            IConnector conn = (IConnector) shape;
            IShape start = conn.getStartShapeConnectedTo();
            IShape end = conn.getEndShapeConnectedTo();
            System.out.println("Connector: "
                + (start != null ? start.getName() : "?")
                + " -> "
                + (end != null ? end.getName() : "?"));
        }
    }
}

Дивіться також

 Українська