Csatlakozók kezelése prezentációkban Python segítségével
Bevezetés
A PowerPoint csatlakozó egy speciális vonal, amely két alakzatot köt össze, és a dián az alakzatok mozgatása vagy áthelyezése esetén is rögzítve marad. A csatlakozók a kapcsolódási pontokhoz (zöld pontok) rögzülnek az alakzatokon. A kapcsolódási pontok akkor jelennek meg, amikor a mutató közelíti őket. A állítási fogantyúk (sárga pontok), bizonyos csatlakozók esetén elérhetők, lehetővé teszik a csatlakozó helyének és alakjának módosítását.
Csatlakozó típusok
A PowerPointban három típusú csatlakozót használhat: egyenes, könyök (szögelt) és ívelt.
Az Aspose.Slides a következő csatlakozó típusokat támogatja:
| Csatlakozó típusa | Kép | Állítási pontok száma |
|---|---|---|
ShapeType.LINE |
![]() |
0 |
ShapeType.STRAIGHT_CONNECTOR1 |
![]() |
0 |
ShapeType.BENT_CONNECTOR2 |
![]() |
0 |
ShapeType.BENT_CONNECTOR3 |
![]() |
1 |
ShapeType.BENT_CONNECTOR4 |
![]() |
2 |
ShapeType.BENT_CONNECTOR5 |
![]() |
3 |
ShapeType.CURVED_CONNECTOR2 |
![]() |
0 |
ShapeType.CURVED_CONNECTOR3 |
![]() |
1 |
ShapeType.CURVED_CONNECTOR4 |
![]() |
2 |
ShapeType.CURVED_CONNECTOR5 |
![]() |
3 |
Alakzatok összekapcsolása csatlakozókkal
Ez a szakasz bemutatja, hogyan lehet alakzatokat összekapcsolni csatlakozókkal az Aspose.Slides-ban. Hozzáad egy csatlakozót a diára, a kezdő és végpontját a cél alakzatokhoz rögzítve. A kapcsolódási pontok használata biztosítja, hogy a csatlakozó a “ragasztott” állapotban maradjon az alakzatokhoz, még ha azok mozognak vagy méreteződnek is.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze be a dia hivatkozását az indexe alapján.
- Adjon hozzá két AutoShape objektumot a diához a ShapeCollection objektum által nyújtott
add_auto_shapemetódus segítségével. - Adjon hozzá egy csatlakozót a ShapeCollection objektum által nyújtott
add_connectormetódus használatával, és adja meg a csatlakozó típusát. - Kapcsolja össze az alakzatokat a csatlakozóval.
- Hívja meg a
reroutemetódust a legrövidebb kapcsolati útvonal alkalmazásához. - Mentse a prezentációt.
import aspose.slides as slides
# Példányosítja a Presentation osztályt egy PPTX fájl létrehozásához.
with slides.Presentation() as presentation:
# Eléri az alakzatok gyűjteményét az első dián.
shapes = presentation.slides[0].shapes
# Hozzáad egy ellipszis AutoShape-et.
ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)
# Hozzáad egy téglalap AutoShape-et.
rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)
# Hozzáad egy csatlakozót a diára.
connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR2, 0, 0, 10, 10)
# Összekapcsolja az alakzatokat a csatlakozóval.
connector.start_shape_connected_to = ellipse
connector.end_shape_connected_to = rectangle
# Meghívja a reroute metódust a legrövidebb út beállításához.
connector.reroute()
# Mentse a prezentációt.
presentation.save("connected_shapes.pptx", slides.export.SaveFormat.PPTX)
NOTE
Aconnector.reroute metódus újratervezi a csatlakozót, és kényszeríti, hogy a alakzatok között a lehető legrövidebb utat vegye. Ennek érdekében a metódus módosíthatja a start_shape_connection_site_index és end_shape_connection_site_index értékeket.
Kapcsolódási pontok megadása
Ez a szakasz bemutatja, hogyan lehet egy csatlakozót egy alakzat adott kapcsolódási pontjához rögzíteni az Aspose.Slides-ban. A pontos kapcsolódási helyek megcélzása lehetővé teszi a csatlakozó útvonalának és elrendezésének vezérlését, így tiszta és előre látható diagramokat hozhat létre a prezentációiban.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze be a dia hivatkozását az indexe alapján.
- Adjon hozzá két AutoShape objektumot a diához a
add_auto_shapemetódus segítségével a ShapeCollection objektumtól. - Adjon hozzá egy csatlakozót a
add_connectormetódusra a ShapeCollection objektumon, és adja meg a csatlakozó típusát. - Kapcsolja össze az alakzatokat a csatlakozóval.
- Állítsa be a kívánt kapcsolódási pontokat az alakzatokon.
- Mentse a prezentációt.
import aspose.slides as slides
# Példányosítja a Presentation osztályt egy PPTX fájl létrehozásához.
with slides.Presentation() as presentation:
# Az első dia alakzatgyűjteményéhez fér hozzá.
shapes = presentation.slides[0].shapes
# Hozzáad egy ellipszis AutoShape-et.
ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)
# Hozzáad egy téglalap AutoShape-et.
rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)
# Hozzáad egy csatlakozót a dia alakzatgyűjteményéhez.
connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10)
# Összekapcsolja az alakzatokat a csatlakozóval.
connector.start_shape_connected_to = ellipse
connector.end_shape_connected_to = rectangle
# Beállítja a preferált kapcsolódási hely indexét az ellipszisnél.
site_index = 6
# Ellenőrzi, hogy a preferált index a rendelkezésre álló helyek számán belül van-e.
if ellipse.connection_site_count > site_index:
# Hozzáadja a preferált kapcsolódási helyet az ellipszis AutoShape-hez.
connector.start_shape_connection_site_index = site_index
# Mentse a prezentációt.
presentation.save("connection_points.pptx", slides.export.SaveFormat.PPTX)
A csatlakozó pontjainak módosítása
A csatlakozókat módosíthatja a beállítási pontjaik használatával. Csak azok a csatlakozók módosíthatók ezzel, amelyek beállítási pontokat biztosítanak. A részletekért, hogy mely csatlakozók támogatják a módosításokat, lásd a Connector Types alatti táblázatot.
Egyszerű eset
Tekintsen egy olyan esetre, ahol egy csatlakozó két alakzat (A és B) között egy harmadik alakzatot (C) metsz.

import aspose.slides as slides
import aspose.pydrawing as draw
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 300, 150, 150, 75)
shape_from = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 500, 400, 100, 50)
shape_to = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 70, 30)
connector = slide.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR5, 20, 20, 400, 300)
connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
connector.line_format.fill_format.fill_type = slides.FillType.SOLID
connector.line_format.fill_format.solid_fill_color.color = draw.Color.black
connector.start_shape_connected_to = shape_from
connector.end_shape_connected_to = shape_to
connector.start_shape_connection_site_index = 2
A harmadik alakzat elkerüléséhez módosítsa a csatlakozót úgy, hogy a függőleges szakaszát balra mozdítja:

adjustment2 = connector.adjustments[1]
adjustment2.raw_value += 10000
Összetett esetek
Haladóbb módosításokhoz vegye figyelembe a következőket:
- A csatlakozó állítható pontját egy képlet szabályozza, amely meghatározza a pozícióját. Ennek a pontnak a módosítása megváltoztathatja a csatlakozó teljes alakját.
- A csatlakozó állítási pontjai szigorúan rendezett tömbben tárolódnak, a csatlakozó kezdettől a végéig számozva.
- Az állítási pont értékek a csatlakozó alakzat szélességének/magasságának százalékát jelentik.
- Az alakzatot a csatlakozó kezdő és végpontjai határolják, és 1000-vel skálázódik.
- Az első, második és harmadik állítási pont a következőt jelenti: szélesség százaléka, magasság százaléka, és újra a szélesség százaléka.
- Az állítási pontok koordinátáinak kiszámításakor vegye figyelembe a csatlakozó forgatását és tükröződését. Megjegyzés: Az Connector Types alatt felsorolt összes csatlakozó esetén a forgatási szög 0.
Eset 1
Tekintsen egy olyan esetre, ahol két szövegkeret objektumot egy csatlakozó kapcsol össze:

import aspose.slides as slides
import aspose.pydrawing as draw
# Példányosítja a Presentation osztályt egy PPTX fájl létrehozásához.
with slides.Presentation() as presentation:
# Lekéri az első diát.
slide = presentation.slides[0]
# Lekéri az első diát.
shape_from = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 60, 25)
shape_from.text_frame.text = "From"
shape_to = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 500, 100, 60, 25)
shape_to.text_frame.text = "To"
# Hozzáad egy csatlakozót.
connector = slide.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR4, 20, 20, 400, 300)
# Beállítja a csatlakozó irányát.
connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
# Beállítja a csatlakozó színét.
connector.line_format.fill_format.fill_type = slides.FillType.SOLID
connector.line_format.fill_format.solid_fill_color.color = draw.Color.crimson
# Beállítja a csatlakozó vonalvastagságát.
connector.line_format.width = 3
# Összekapcsolja az alakzatokat a csatlakozóval.
connector.start_shape_connected_to = shape_from
connector.start_shape_connection_site_index = 3
connector.end_shape_connected_to = shape_to
connector.end_shape_connection_site_index = 2
# Lekéri a csatlakozó állítási pontjait.
adjustment_0 = connector.adjustments[0]
adjustment_1 = connector.adjustments[1]
Módosítás
Módosítsa a csatlakozó állítási pontjainak értékeit úgy, hogy a szélesség százalékát 20%-kal, a magasság százalékát pedig 200%-kal növeli:
# Módosítsa az állítási pontok értékeit.
adjustment_0.raw_value += 20000
adjustment_1.raw_value += 200000
Az eredmény:

Egy olyan modell definiálásához, amely lehetővé teszi a csatlakozó szegmensek koordinátáinak és alakjának meghatározását, hozzon létre egy alakzatot, amely a connector.adjustments[0] függőleges komponensének felel meg:
# Rajzolja meg a csatlakozó függőleges komponensét.
x = connector.x + connector.width * adjustment_0.raw_value / 100000
y = connector.y
height = connector.height * adjustment_1.raw_value / 100000
slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, x, y, 0, height)
Az eredmény:

Eset 2
Az Eset 1-ben egyszerű csatlakozó módosítást mutattunk be alapelvek használatával. Általános esetekben figyelembe kell venni a csatlakozó forgatásét és a megjelenítési beállításait (amelyeket a connector.rotation, connector.frame.flip_h és connector.frame.flip_v szabályoz). Íme, hogyan működik a folyamat.
Először adjon hozzá egy új szövegkeret objektumot (To 1) a diához (kapcsolódás céljából), és hozzon létre egy új zöld csatlakozót, amely összeköti a meglévő objektumokkal.
# Hozzon létre egy új célobjektumot.
shape_to_1 = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 400, 60, 25)
shape_to_1.text_frame.text = "To 1"
# Hozzon létre egy új csatlakozót.
connector = sld.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR4, 20, 20, 400, 300)
connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
connector.line_format.fill_format.fill_type = slides.FillType.SOLID
connector.line_format.fill_format.solid_fill_color.color = draw.Color.medium_aquamarine
connector.line_format.width = 3
# Kapcsolja össze az objektumokat az újonnan létrehozott csatlakozóval.
connector.start_shape_connected_to = shapeFrom
connector.start_shape_connection_site_index = 2
connector.end_shape_connected_to = shape_to_1
connector.end_shape_connection_site_index = 3
# Lekéri a csatlakozó állítási pontjait.
adjustment_0 = connector.adjustments[0]
adjustment_1 = connector.adjustments[1]
# Módosítsa az állítási pontok értékeit.
adjustment_0.raw_value += 20000
adjustment_1.raw_value += 200000
Az eredmény:

Másodszor hozzon létre egy alakzatot, amely a csatlakozó vízszintes szakaszának felel meg, amely áthalad az új csatlakozó állítási pontján, a connector.adjustments[0]-n. Használja a connector.rotation, connector.frame.flip_h, és connector.frame.flip_v értékeket, és alkalmazza a szabványos koordinátakonverziós képletet a meghatározott x0 pont körüli forgatáshoz:
X = (x — x0) * cos(alpha) — (y — y0) * sin(alpha) + x0; Y = (x — x0) * sin(alpha) + (y — y0) * cos(alpha) + y0;
A mi esetünkben az objektum forgatási szöge 90 fok, és a csatlakozó függőlegesen jelenik meg, ezért a megfelelő kód a következő:
# Mentse el a csatlakozó koordinátáit.
x = connector.x
y = connector.y
# Javítsa a csatlakozó koordinátáit, ha meg van fordítva.
if connector.frame.flip_h == 1:
x += connector.width
if connector.frame.flip_v == 1:
y += connector.height
# Használja az állítási pont értékét koordinátaként.
x += connector.width * adjValue_0.raw_value / 100000
# Konvertálja a koordinátákat, mert sin(90°) = 1 és cos(90°) = 0.
xx = connector.frame.center_x - y + connector.frame.center_y
yy = x - connector.frame.center_x + connector.frame.center_y
# Határozza meg a vízszintes szakasz szélességét a második állítási pont értéke alapján.
width = connector.height * adjValue_1.raw_value / 100000
shape = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, xx, yy, width, 0)
shape.line_format.fill_format.fill_type = slides.FillType.SOLID
shape.line_format.fill_format.solid_fill_color.color = draw.Color.red
Az eredmény:

Bemutattuk az egyszerű módosítások és a komplexebb állítási pontok (amelyek figyelembe veszik a forgást) számításait. Ezzel a tudással saját modell kidolgozhat— vagy kódot írhat— egy GraphicsPath objektum előállításához vagy akár egy csatlakozó állítási pontjainak értékének beállításához meghatározott diakoordináták alapján.
A csatlakozó vonalak szögeinek meghatározása
Használja az alábbi példát a csatlakozó vonalak szögének meghatározásához egy dián az Aspose.Slides segítségével. Megtanulja, hogyan olvassa ki egy csatlakozó végpontjait, és számolja ki annak tájolását, hogy pontosan illeszthesse a nyilakat, címkéket és egyéb alakzatokat.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze be a dia hivatkozását az index alapján.
- Hozzáfér a csatlakozó vonal alakzathoz.
- Használja a vonal szélességét és magasságát, valamint az alakzat keretének szélességét és magasságát a szög kiszámításához.
import aspose.slides as slides
import math
def get_direction(w, h, flip_h, flip_v):
end_line_x = w * (-1 if flip_h else 1)
end_line_y = h * (-1 if flip_v else 1)
end_y_axis_x = 0
end_y_axis_y = h
angle = math.atan2(end_y_axis_y, end_y_axis_x) - math.atan2(end_line_y, end_line_x)
if (angle < 0):
angle += 2 * math.pi
return angle * 180.0 / math.pi
with slides.Presentation("connector_line_angle.pptx") as presentation:
slide = presentation.slides[0]
for shape_index in range(len(slide.shapes)):
direction = 0.0
shape = slide.shapes[shape_index]
if type(shape) is slides.AutoShape and shape.shape_type == slides.ShapeType.LINE:
direction = get_direction(shape.width, shape.height, shape.frame.flip_h, shape.frame.flip_v)
elif type(shape) is slides.Connector:
direction = get_direction(shape.width, shape.height, shape.frame.flip_h, shape.frame.flip_v)
print(direction)
GYIK
Hogyan deríthetem ki, hogy egy csatlakozó “ragasztva” tud-e maradni egy adott alakzathoz?
Ellenőrizze, hogy az alakzat connection sites elérhető-e. Ha nincs vagy a szám nulla, a ragasztás nem lehetséges; ebben az esetben használjon szabad végpontokat, és helyezze el őket manuálisan. Célszerű a helyek számát ellenőrizni a csatlakoztatás előtt.
Mi történik egy csatlakozóval, ha törlök egy kapcsolódó alakzatot?
A végpontjai leválasztódnak; a csatlakozó a dián egy szokásos vonalként marad szabad kezdő/end pontokkal. Törölheti vagy újrakötheti a kapcsolódásokat, és ha szükséges, reroute‑t hívhat.
Megmaradnak-e a csatlakozó kötései, ha egy diát másik prezentációba másolok?
Általában igen, amennyiben a cél alakzatok is másolásra kerülnek. Ha a diát egy másik fájlba illeszti be a kapcsolódó alakzatok nélkül, a végpontok szabadokká válnak, és újra kell őket csatlakoztatni.









