Python ile Sunumlarda Bağlayıcıları Yönet
Giriş
PowerPoint bağlayıcısı, iki şekli birbirine bağlayan ve şekiller slayt üzerinde hareket ettirildiğinde veya konumlandırıldığında hâlâ ekli kalan özel bir çizgidir. Bağlayıcılar şekillerin bağlantı noktalarına (yeşil noktalar) bağlanır. Bağlantı noktaları, işaretçi onlara yaklaştığında görünür. Belirli bağlayıcılarda bulunan ayarlama tutamaçları (sarı noktalar), bağlayıcının konumunu ve şeklini değiştirmenizi sağlar.
Bağlayıcı Türleri
PowerPoint’te üç tür bağlayıcı kullanabilirsiniz: düz, dirsek (açılı) ve eğimli.
Aspose.Slides aşağıdaki bağlayıcı türlerini destekler:
| Bağlayıcı Türü | Görsel | Ayarlama noktası sayısı |
|---|---|---|
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 |
Şekilleri Bağlayıcılarla Bağlama
Bu bölüm, Aspose.Slides içinde şekilleri bağlayıcılarla nasıl birleştireceğinizi gösterir. Bir bağlayıcıyı slayta ekleyecek, başlangıç ve bitiş noktalarını hedef şekillere bağlayacaksınız. Bağlantı noktalarını kullanmak, şekiller hareket ettiğinde veya yeniden boyutlandırıldığında bağlayıcının şekillere “yapışık” kalmasını sağlar.
- Presentation sınıfının bir örneğini oluşturun.
- Slayta, indeksine göre bir referans alın.
add_auto_shapeyöntemiyle ShapeCollection nesnesi tarafından sunulan iki AutoShape nesnesi ekleyin.add_connectoryöntemini kullanarak ShapeCollection nesnesi üzerinden bir bağlayıcı ekleyin ve bağlayıcı türünü belirtin.- Şekilleri bağlayıcı ile bağlayın.
- En kısa bağlantı yolunu uygulamak için
rerouteyöntemini çağırın. - Sunumu kaydedin.
import aspose.slides as slides
# Sunum sınıfını örnekleyerek bir PPTX dosyası oluştur.
with slides.Presentation() as presentation:
# İlk slayt için şekiller koleksiyonuna eriş.
shapes = presentation.slides[0].shapes
# Bir elips AutoShape ekle.
ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)
# Bir dikdörtgen AutoShape ekle.
rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)
# Slayta bir bağlayıcı ekle.
connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR2, 0, 0, 10, 10)
# Şekilleri bağlayıcıyla bağla.
connector.start_shape_connected_to = ellipse
connector.end_shape_connected_to = rectangle
# En kısa yolu ayarlamak için reroute metodunu çağır.
connector.reroute()
# Sunumu kaydet.
presentation.save("connected_shapes.pptx", slides.export.SaveFormat.PPTX)
NOTE
connector.reroute yöntemi bir bağlayıcıyı yeniden yönlendirir ve şekiller arasındaki en kısa yolu almasını zorlar. Bunu yapmak için yöntem start_shape_connection_site_index ve end_shape_connection_site_index değerlerini değiştirebilir.
Bağlantı Noktalarını Belirleme
Bu bölüm, Aspose.Slides içinde bir bağlayıcının bir şeklin belirli bir bağlantı noktasına nasıl bağlanacağını açıklar. Doğru bağlantı noktalarını hedefleyerek bağlayıcı yönlendirmesini ve düzenini kontrol edebilir, sunumlarınızda temiz ve öngörülebilir diyagramlar oluşturabilirsiniz.
- Presentation sınıfının bir örneğini oluşturun.
- Slayta, indeksine göre bir referans alın.
add_auto_shapeyöntemiyle ShapeCollection nesnesi tarafından sunulan iki AutoShape nesnesi ekleyin.add_connectoryöntemini ShapeCollection nesnesi üzerinde kullanarak bir bağlayıcı ekleyin ve bağlayıcı türünü belirtin.- Şekilleri bağlayıcı ile bağlayın.
- Şekiller üzerinde tercih ettiğiniz bağlantı noktalarını ayarlayın.
- Sunumu kaydedin.
import aspose.slides as slides
# PPTX dosyası oluşturmak için Presentation sınıfını örnekle.
with slides.Presentation() as presentation:
# İlk slayt için şekiller koleksiyonuna eriş.
shapes = presentation.slides[0].shapes
# Bir elips AutoShape ekle.
ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)
# Bir dikdörtgen AutoShape ekle.
rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)
# Bağlayıcıyı slaydın şekil koleksiyonuna ekle.
connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10)
# Şekilleri bağlayıcıyla bağla.
connector.start_shape_connected_to = ellipse
connector.end_shape_connected_to = rectangle
# Elips üzerinde tercih edilen bağlantı site indeksi ayarla.
site_index = 6
# Tercih edilen indeksin mevcut site sayısı içinde olduğundan emin ol.
if ellipse.connection_site_count > site_index:
# Elips AutoShape üzerinde tercih edilen bağlantı sitesini ata.
connector.start_shape_connection_site_index = site_index
# Sunumu kaydet.
presentation.save("connection_points.pptx", slides.export.SaveFormat.PPTX)
Bağlayıcı Noktalarını Ayarlama
Bağlayıcıları ayarlama noktalarını kullanarak değiştirebilirsiniz. Yalnızca ayarlama noktalarını sunan bağlayıcılar bu şekilde düzenlenebilir. Hangi bağlayıcıların ayarlamayı desteklediği hakkında ayrıntılar için Bağlayıcı Türleri altındaki tabloya bakın.
Basit Durum
İki şekil (A ve B) arasında bir bağlayıcı, üçüncü bir şekil (C) ile kesişiyorsa:

Kod örneği:
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
Üçüncü şekilden kaçınmak için bağlayıcının dikey segmentini sola kaydırarak düzenleyin:

adjustment2 = connector.adjustments[1]
adjustment2.raw_value += 10000
Karmaşık Durumlar
Daha gelişmiş ayarlamalar için aşağıdakileri göz önünde bulundurun:
- Bir bağlayıcının ayarlanabilir noktası, konumunu belirleyen bir formülle yönetilir. Bu noktanın değiştirilmesi, bağlayıcının genel şeklini değiştirebilir.
- Bağlayıcının ayarlama noktaları, bağlayıcının başlangıcından sonuna kadar numaralandırılmış, kesin bir sıralı dizide saklanır.
- Ayarlama noktası değerleri, bağlayıcı şeklinin genişlik/yükseklik yüzdelerini temsil eder.
- Şekil, bağlayıcının başlangıç ve bitiş noktalarıyla sınırlanır ve 1000 ile ölçeklenir.
- Birinci, ikinci ve üçüncü ayarlama noktaları sırasıyla: genişlik yüzdesi, yükseklik yüzdesi ve tekrar genişlik yüzdesi temsil eder.
- Ayarlama noktalarının koordinatlarını hesaplarken, bağlayıcının dönüş ve yansımasını dikkate alın. Not: Connector Types altında listelenen tüm bağlayıcılar için dönüş açısı 0’dır.
Durum 1
İki metin çerçevesi nesnesinin bir bağlayıcı ile bağlandığı bir durum düşünün:

Kod örneği:
import aspose.slides as slides
import aspose.pydrawing as draw
# PPTX dosyası oluşturmak için Presentation sınıfını örnekle.
with slides.Presentation() as presentation:
# İlk slaytı al.
slide = presentation.slides[0]
# İlk slaytı al.
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"
# Bir bağlayıcı ekle.
connector = slide.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR4, 20, 20, 400, 300)
# Bağlayıcının yönünü ayarla.
connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
# Bağlayıcının rengini ayarla.
connector.line_format.fill_format.fill_type = slides.FillType.SOLID
connector.line_format.fill_format.solid_fill_color.color = draw.Color.crimson
# Bağlayıcının çizgi kalınlığını ayarla.
connector.line_format.width = 3
# Şekilleri bağlayıcıyla bağla.
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
# Bağlayıcının ayarlama noktalarını al.
adjustment_0 = connector.adjustments[0]
adjustment_1 = connector.adjustments[1]
Ayarlama
Bağlayıcının ayarlama nokta değerlerini, genişlik yüzdesini %20, yükseklik yüzdesini ise %200 artırarak değiştirin:
# Ayarlama noktalarının değerlerini değiştir.
adjustment_0.raw_value += 20000
adjustment_1.raw_value += 200000
Sonuç:

connector.adjustments[0] konumundaki dik bileşeni temsil eden bir şekil oluşturarak bağlayıcının segmentlerinin koordinat ve şeklini belirlememizi sağlayan bir model tanımlayın:
# Bağlayıcının dikey bileşenini çiz.
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)
Sonuç:

Durum 2
Durum 1‘de temel prensiplerle basit bir bağlayıcı ayarlaması gösterdik. Tipik senaryolarda, bağlayıcının dönüşünü ve görüntü ayarlarını (connector.rotation, connector.frame.flip_h, connector.frame.flip_v) dikkate almanız gerekir. Sürecin nasıl çalıştığını aşağıda bulabilirsiniz.
İlk olarak, slayta yeni bir metin çerçevesi nesnesi (To 1) ekleyin (bağlantı için) ve mevcut nesnelerle bağlayan yeni bir yeşil bağlayıcı oluşturun.
# Yeni bir hedef nesne oluştur.
shape_to_1 = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 400, 60, 25)
shape_to_1.text_frame.text = "To 1"
# Yeni bir bağlayıcı oluştur.
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
# Yeni oluşturulan bağlayıcıyı kullanarak nesneleri bağla.
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
# Bağlayıcının ayarlama noktalarını al.
adjustment_0 = connector.adjustments[0]
adjustment_1 = connector.adjustments[1]
# Ayarlama noktalarının değerlerini değiştir.
adjustment_0.raw_value += 20000
adjustment_1.raw_value += 200000
Sonuç:

İkinci olarak, yeni bağlayıcının ayarlama noktası connector.adjustments[0] üzerinden geçen yatay segmenti temsil eden bir şekil oluşturun. connector.rotation, connector.frame.flip_h ve connector.frame.flip_v değerlerini kullanın ve verilen x0 noktasına göre dönüş için standart koordinat dönüşüm formülünü uygulayın:
X = (x — x0) * cos(alpha) — (y — y0) * sin(alpha) + x0;
Y = (x — x0) * sin(alpha) + (y — y0) * cos(alpha) + y0;
Bizim durumumuzda nesnenin dönüş açısı 90 derece ve bağlayıcı dikey olarak görüntüleniyor, bu yüzden ilgili kod aşağıdaki gibidir:
# Bağlayıcı koordinatlarını kaydet.
x = connector.x
y = connector.y
# Bağlayıcı koordinatlarını tersse düzelt.
if connector.frame.flip_h == 1:
x += connector.width
if connector.frame.flip_v == 1:
y += connector.height
# Ayarlama noktası değerini koordinat olarak kullan.
x += connector.width * adjValue_0.raw_value / 100000
# Koordinatları dönüştür; çünkü sin(90°) = 1 ve cos(90°) = 0.
xx = connector.frame.center_x - y + connector.frame.center_y
yy = x - connector.frame.center_x + connector.frame.center_y
# İkinci ayarlama noktası değerini kullanarak yatay segmentin genişliğini belirle.
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
Sonuç:

Basit ayarlamaları ve dönüşü de dikkate alan daha karmaşık ayarlama noktalarını içeren hesaplamaları gösterdik. Bu bilgiyle, kendi modelinizi geliştirebilir veya belirli slayt koordinatlarına göre bir GraphicsPath nesnesi elde etmek ya da bağlayıcının ayarlama noktası değerlerini ayarlamak için kod yazabilirsiniz.
Bağlayıcı Çizgi Açılarının Bulunması
Aşağıdaki örnek, Aspose.Slides kullanarak bir slayttaki bağlayıcı çizgi açılarını nasıl belirleyeceğinizi gösterir. Bağlayıcının uç noktalarını okuyacak ve yönünü hesaplayarak oklar, etiketler ve diğer şekillerin tam olarak hizalanmasını sağlayacaksınız.
- Presentation sınıfının bir örneğini oluşturun.
- İndexe göre slayta bir referans alın.
- Bağlayıcı çizgi şekline erişin.
- Çizginin genişliği ve yüksekliği ile şekil çerçevesinin genişliği ve yüksekliğini kullanarak açıyı hesaplayın.
Aşağıdaki Python kodu, bir bağlayıcı çizgi şeklinin açısını nasıl hesaplayacağınızı gösterir:
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
Bir bağlayıcının belirli bir şekle “yapıştırılıp” yapıştırılamadığını nasıl anlayabilirim?
Şeklin bağlantı noktalarını açığa çıkarıp çıkarmadığını kontrol edin. Hiç bağlantı noktası yoksa veya sayısı sıfırsa, yapıştırma özelliği mevcut değildir; bu durumda serbest uçları kullanıp konumlarını manuel olarak ayarlamanız gerekir. Bağlayıcıyı eklemeden önce site sayısını kontrol etmek mantıklıdır.
Bağlantılı şekillerden birini sildiğimde bağlayıcıya ne olur?
Uçları kopar; bağlayıcı serbest bir başlangıç/bitişle normal bir çizgi olarak slaytta kalır. İsterseniz silebilir ya da bağlantıları yeniden atayabilir ve gerekirse reroute metodunu kullanabilirsiniz.
Bir slaytı başka bir sunuma kopyaladığımda bağlayıcı bağlamaları korunur mu?
Genellikle evet, hedef şekiller de kopyalandığı sürece korunur. Slayt, bağlanmış şekiller olmadan başka bir dosyaya eklenirse uçlar serbest olur ve yeniden bağlamanız gerekir.









