Hantera kopplingar i presentationer med Python
Introduktion
En PowerPoint‑koppling är en specialiserad linje som länkar två former och förblir fäst när formerna flyttas eller omplaceras på en bild. Kopplingar fäster vid anslutningspunkter (gröna punkter) på former. Anslutningspunkter visas när pekaren närmar sig dem. Justeringhandtag (gula punkter), som finns på vissa kopplingar, låter dig ändra en kopplings position och form.
Kopplingstyper
I PowerPoint kan du använda tre typer av kopplingar: rak, armbåge (vinklad) och böjd.
Aspose.Slides stöder följande kopplingstyper:
| Kopplingstyp | Bild | Antal justeringspunkter |
|---|---|---|
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 |
Koppla former med kopplingar
Detta avsnitt visar hur man länkar former med kopplingar i Aspose.Slides. Du lägger till en koppling på en bild, fäster dess start och slut på målföremål. Genom att använda anslutningsställen säkerställs att kopplingen förblir “fast” på former även när de flyttas eller ändrar storlek.
- Skapa en instans av klassen Presentation.
- Hämta en referens till bilden enligt dess index.
- Lägg till två AutoShape-objekt på bilden med hjälp av metoden
add_auto_shapesom exponeras av objektet ShapeCollection. - Lägg till en koppling med metoden
add_connectorsom exponeras av objektet ShapeCollection och ange kopplingstypen. - Koppla formerna med kopplingen.
- Anropa metoden
rerouteför att tillämpa den kortaste anslutningsvägen. - Spara presentationen.
Följande Python‑kod visar hur man lägger till en böjd koppling mellan två former (en ellips och en rektangel):
import aspose.slides as slides
# Skapa ett Presentation‑objekt för att skapa en PPTX‑fil.
with slides.Presentation() as presentation:
# Hämta shapes‑samlingen för den första bilden.
shapes = presentation.slides[0].shapes
# Lägg till en ellips‑AutoShape.
ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)
# Lägg till en rektangel‑AutoShape.
rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)
# Lägg till en koppling på bilden.
connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR2, 0, 0, 10, 10)
# Koppla formerna med kopplingen.
connector.start_shape_connected_to = ellipse
connector.end_shape_connected_to = rectangle
# Anropa reroute för att ange den kortaste vägen.
connector.reroute()
# Spara presentationen.
presentation.save("connected_shapes.pptx", slides.export.SaveFormat.PPTX)
NOTE
connector.reroute‑metoden omdirigerar en koppling och tvingar den att följa den kortaste möjliga vägen mellan former. För att göra detta kan metoden ändra värdena start_shape_connection_site_index och end_shape_connection_site_index.
Ange anslutningspunkter
Detta avsnitt förklarar hur man fäster en koppling vid en specifik anslutningspunkt på en form i Aspose.Slides. Genom att rikta in sig på exakta anslutningsställen kan du styra kopplingsrutten och layouten, vilket ger rena och förutsägbara diagram i dina presentationer.
- Skapa en instans av klassen Presentation.
- Hämta en referens till bilden enligt dess index.
- Lägg till två AutoShape-objekt på bilden med hjälp av metoden
add_auto_shapesom exponeras av objektet ShapeCollection. - Lägg till en koppling med metoden
add_connectorpå objektet ShapeCollection och ange kopplingstypen. - Koppla formerna med kopplingen.
- Ange dina föredragna anslutningspunkter på formerna.
- Spara presentationen.
Följande Python‑kod visar hur man anger en föredragen anslutningspunkt:
import aspose.slides as slides
# Skapa ett Presentation‑objekt för att skapa en PPTX‑fil.
with slides.Presentation() as presentation:
# Hämta shapes‑samlingen för den första bilden.
shapes = presentation.slides[0].shapes
# Lägg till en ellips‑AutoShape.
ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)
# Lägg till en rektangel‑AutoShape.
rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)
# Lägg till en koppling till bildens shapes‑samling.
connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10)
# Koppla formerna med kopplingen.
connector.start_shape_connected_to = ellipse
connector.end_shape_connected_to = rectangle
# Ange föredraget anslutningsställe‑index på ellipsen.
site_index = 6
# Kontrollera att det föredragna indexet ligger inom det tillgängliga antalet anslutningsställen.
if ellipse.connection_site_count > site_index:
# Tilldela det föredragna anslutningsstället på ellips‑AutoShape.
connector.start_shape_connection_site_index = site_index
# Spara presentationen.
presentation.save("connection_points.pptx", slides.export.SaveFormat.PPTX)
Justera kopplingspunkter
Du kan ändra kopplingar med deras justeringspunkter. Endast kopplingar som exponerar justeringspunkter kan redigeras på detta sätt. För detaljer om vilka kopplingar som stödjer justeringar, se tabellen under Connector Types.
Enkelt fall
Tänk på ett fall där en koppling mellan två former (A och B) korsar en tredje form (C):

Kodexempel:
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
För att undvika den tredje formen, justera kopplingen genom att flytta dess vertikala segment åt vänster:

adjustment2 = connector.adjustments[1]
adjustment2.raw_value += 10000
Komplexa fall
För mer avancerade justeringar, överväg följande:
- En justerbar punkt i en koppling styrs av en formel som bestämmer dess position. Att ändra denna punkt kan förändra kopplingens övergripande form.
- En kopplings justeringspunkter lagras i en strikt ordnad array, numrerade från kopplingens start till dess slut.
- Värdena för justeringspunkterna representerar procent av kopplingsformens bredd/höjd.
- Formen begränsas av kopplingens start- och slutpunkter och skalas med 1000.
- Den första, andra och tredje justeringspunkten representerar: procent av bredd, procent av höjd och återigen procent av bredd, respektive.
- När koordinaterna för justeringspunkterna beräknas, ta hänsyn till kopplingens rotation och reflektion. Obs: För alla kopplingar som listas under Connector Types är rotationsvinkeln 0.
Fall 1
Tänk på ett fall där två textramsobjekt länkas med en koppling:

import aspose.slides as slides
import aspose.pydrawing as draw
# Skapa ett Presentation‑objekt för att skapa en PPTX‑fil.
with slides.Presentation() as presentation:
# Hämta den första bilden.
slide = presentation.slides[0]
# Hämta den första bilden.
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"
# Lägg till en koppling.
connector = slide.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR4, 20, 20, 400, 300)
# Ange kopplingens riktning.
connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
# Ange kopplingens färg.
connector.line_format.fill_format.fill_type = slides.FillType.SOLID
connector.line_format.fill_format.solid_fill_color.color = draw.Color.crimson
# Ange kopplingens linjetjocklek.
connector.line_format.width = 3
# Koppla formerna med kopplingen.
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
# Hämta kopplingens justeringspunkter.
adjustment_0 = connector.adjustments[0]
adjustment_1 = connector.adjustments[1]
Justering
Ändra kopplingens justeringspunktsvärden genom att öka breddprocenten med 20 % respektive höjdprocenten med 200 %:
# Ändra värdena för justeringspunkterna.
adjustment_0.raw_value += 20000
adjustment_1.raw_value += 200000
Resultatet:

För att definiera en modell som låter oss bestämma koordinaterna och formen för kopplingens segment, skapa en form som motsvarar den vertikala komponenten av kopplingen vid connector.adjustments[0]:
# Rita den vertikala komponenten av kopplingen.
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)
Resultatet:

Fall 2
I Fall 1 demonstrerade vi en enkel kopplingsjustering med grundläggande principer. I vanliga scenarier måste du ta hänsyn till kopplingens rotation och dess visningsinställningar (styrda av connector.rotation, connector.frame.flip_h och connector.frame.flip_v). Så här fungerar processen.
Först, lägg till ett nytt textramsobjekt (Till 1) på bilden (för anslutning) och skapa en ny grön koppling som länkar det till de befintliga objekten.
# Skapa ett nytt målobjekt.
shape_to_1 = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 400, 60, 25)
shape_to_1.text_frame.text = "To 1"
# Skapa en ny koppling.
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
# Koppla objekten med den nyskapade kopplingen.
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
# Hämta kopplingens justeringspunkter.
adjustment_0 = connector.adjustments[0]
adjustment_1 = connector.adjustments[1]
# Ändra värdena för justeringspunkterna.
adjustment_0.raw_value += 20000
adjustment_1.raw_value += 200000
Resultatet:

Sedan, skapa en form som motsvarar den horisontella delen av kopplingen som passerar genom den nya kopplingens justeringspunkt, connector.adjustments[0]. Använd värdena från connector.rotation, connector.frame.flip_h och connector.frame.flip_v och applicera den standardformel för koordinatkonvertering vid rotation runt en given punkt x0:
X = (x — x0) * cos(alpha) — (y — y0) * sin(alpha) + x0;
Y = (x — x0) * sin(alpha) + (y — y0) * cos(alpha) + y0;
I vårt fall är objektets rotationsvinkel 90 grader och kopplingen visas vertikalt, så motsvarande kod är:
# Spara kopplingens koordinater.
x = connector.x
y = connector.y
# Korrigera kopplingens koordinater om den är speglad.
if connector.frame.flip_h == 1:
x += connector.width
if connector.frame.flip_v == 1:
y += connector.height
# Använd justeringspunktens värde som koordinat.
x += connector.width * adjValue_0.raw_value / 100000
# Omvandla koordinaterna eftersom sin(90°) = 1 och cos(90°) = 0.
xx = connector.frame.center_x - y + connector.frame.center_y
yy = x - connector.frame.center_x + connector.frame.center_y
# Bestäm bredden på den horisontella segmentet med hjälp av värdet för den andra justeringspunkten.
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
Resultatet:

Vi demonstrerade beräkningar som involverar enkla justeringar och mer komplexa justeringspunkter (de som tar hänsyn till rotation). Med denna kunskap kan du utveckla din egen modell – eller skriva kod – för att erhålla ett GraphicsPath‑objekt eller till och med sätta en kopplings justeringspunktsvärde baserat på specifika bildkoordinater.
Hitta kopplingslinjens vinklar
Använd exemplet nedan för att bestämma vinkeln på kopplingslinjer i en bild med Aspose.Slides. Du lär dig hur du läser en kopplings ändpunkter och beräknar dess orientering så att du exakt kan justera pilar, etiketter och andra former.
- Skapa en instans av klassen Presentation.
- Hämta en referens till bilden via dess index.
- Åtkomst till kopplingslinjeformen.
- Använd linjens bredd och höjd samt formramens bredd och höjd för att beräkna vinkeln.
Följande Python‑kod visar hur man beräknar vinkeln för en kopplingslinjeform:
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)
FAQ
Hur kan jag avgöra om en koppling kan “fästas” på en specifik form?
Kontrollera att formen exponerar anslutningsställen. Om det inte finns några eller antalet är noll, är fästning inte tillgänglig; i så fall använder du fria ändpunkter och placerar dem manuellt. Det är klokt att kontrollera antalet ställen innan du fäster.
Vad händer med en koppling om jag raderar en av de anslutna formerna?
Dess ändar kommer att lossna; kopplingen kvarstår på bilden som en vanlig linje med fria start/slut. Du kan antingen ta bort den eller omfördela anslutningarna och, vid behov, reroute.
Behålls kopplingsbindningar när en bild kopieras till en annan presentation?
Generellt ja, förutsatt att de målformer som är kopplade också kopieras. Om bilden infogas i en annan fil utan de anslutna formerna blir ändarna fria och du måste återfästa dem.









