Zarządzanie kształtami w prezentacjach przy użyciu Pythona
Przegląd
Ten przewodnik wprowadza manipulację kształtami w Aspose.Slides dla Pythona za pośrednictwem .NET. Poznaj praktyczne wzorce znajdowania kształtów (w tym według Alternatywnego Tekstu), duplikowania, usuwania lub ukrywania, zmiany kolejności, wyrównywania i odwracania, odczytywania identyfikatorów oraz formatowania opartego na układzie, oraz eksportowania pojedynczych kształtów do SVG przy użyciu interfejsów API Presentation i Shape.
Znajdowanie kształtów na slajdach
PowerPoint identyfikuje kształty tylko za pomocą wewnętrznych identyfikatorów. Przypisz unikalny Tekst alternatywny do docelowego kształtu w PowerPoint, a następnie otwórz prezentację przy użyciu Aspose.Slides for Python, iteruj po kształtach slajdu i wybierz ten, którego Tekst alternatywny się zgadza. Metoda find_shape implementuje to podejście i zwraca pasujący kształt.
import aspose.slides as slides
# Znajduje kształt na slajdzie według jego alternatywnego tekstu.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# Utwórz instancję klasy Presentation, która reprezentuje plik prezentacji.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Znajdź kształt z tekstem alternatywnym "Shape1".
shape = find_shape(slide, "Shape1")
if shape is not None:
print("Shape name:", shape.name)
Klonowanie kształtów
Aby sklonować kształty z slajdu źródłowego do nowego slajdu w Aspose.Slides, wykonaj następujące kroki:
- Utwórz Presentation z pliku źródłowego.
- Uzyskaj slajd źródłowy według indeksu oraz jego kolekcję kształtów.
- Pobierz pusty układ z slajdu głównego.
- Dodaj pusty slajd używając tego układu i pobierz jego kształty.
- Sklonuj kształty do docelowego slajdu.
- Zapisz prezentację jako PPTX.
Poniższy przykład kodu klonuje kształty z jednego slajdu do innego.
import aspose.slides as slides
# Utwórz instancję klasy Presentation.
with slides.Presentation("sample.pptx") as presentation:
source_shapes = presentation.slides[0].shapes
blank_layout = presentation.masters[0].layout_slides.get_by_type(slides.SlideLayoutType.BLANK)
target_slide = presentation.slides.add_empty_slide(blank_layout)
target_shapes = target_slide.shapes
target_shapes.add_clone(source_shapes[1], 50, 150 + source_shapes[0].height)
target_shapes.add_clone(source_shapes[2])
target_shapes.insert_clone(0, source_shapes[0], 50, 150)
# Zapisz prezentację na dysk.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Usuwanie kształtów
Aspose.Slides umożliwia usunięcie dowolnego kształtu ze slajdu. Na przykład, aby usunąć kształt z pierwszego slajdu za pomocą jego Alternatywnego Tekstu, wykonaj następujące kroki:
- Utwórz instancję Presentation i załaduj plik.
- Uzyskaj dostęp do pierwszego slajdu z kolekcji slajdów.
- Znajdź kształt według wartości Alternatywnego Tekstu.
- Usuń kształt z kolekcji kształtów slajdu.
- Zapisz prezentację na dysku w formacie PPTX.
import aspose.slides as slides
# Znajduje kształt na slajdzie według jego alternatywnego tekstu.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# Utwórz instancję klasy Presentation, która reprezentuje plik prezentacji.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Znajdź kształt z tekstem alternatywnym "User Defined".
shape = find_shape(slide, "User Defined")
# Usuń kształt.
slide.shapes.remove(shape)
# Zapisz prezentację na dysk.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Ukrywanie kształtów
Aspose.Slides umożliwia ukrycie dowolnego kształtu na slajdzie. Na przykład, aby ukryć kształt na pierwszym slajdzie za pomocą jego Alternatywnego Tekstu, wykonaj następujące kroki:
- Utwórz instancję Presentation i załaduj plik.
- Uzyskaj dostęp do pierwszego slajdu z kolekcji slajdów.
- Znajdź kształt według wartości Alternatywnego Tekstu.
- Ukryj kształt.
- Zapisz prezentację na dysku w formacie PPTX.
# Znajduje kształt na slajdzie według jego alternatywnego tekstu.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# Utwórz instancję klasy Presentation, która reprezentuje plik prezentacji.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Znajdź kształt z tekstem alternatywnym "User Defined".
shape = find_shape(slide, "User Defined")
# Ukryj kształt.
shape.hidden = True
# Zapisz prezentację na dysk.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Zmiana kolejności kształtów
Aspose.Slides pozwala programistom na zmianę kolejności kształtów (zmianę ich kolejności Z). Zmiana kolejności określa, który kształt znajduje się przed innym, a który za nim. Na przykład, aby zmienić kolejność dwóch kształtów na pierwszym slajdzie, wykonaj poniższe kroki:
- Utwórz instancję klasy Presentation.
- Uzyskaj dostęp do pierwszego slajdu.
- Dodaj pierwszy kształt (na przykład prostokąt).
- Dodaj drugi kształt (na przykład trójkąt).
- Zmień kolejność kształtów, przenosząc drugi kształt na pierwszą pozycję w kolekcji.
- Zapisz prezentację na dysk.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# Dodaj dwa kształty do slajdu.
shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 200, 150)
shape2 = slide.shapes.add_auto_shape(slides.ShapeType.TRIANGLE, 20, 200, 200, 150)
# Przenieś drugi kształt na pierwszą pozycję.
slide.shapes.reorder(0, shape2)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Pobranie identyfikatora Interop Shape
Aspose.Slides umożliwia uzyskanie unikalnego identyfikatora kształtu w zakresie slajdu, w przeciwieństwie do właściwości unique_id, która jest unikalna dla całej prezentacji. Właściwość office_interop_shape_id jest dostępna w klasie Shape. Jej wartość odpowiada Id obiektu Microsoft.Office.Interop.PowerPoint.Shape. Przykładowy fragment kodu przedstawiono poniżej.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
# Uzyskaj unikalny identyfikator kształtu w obrębie slajdu.
officeInteropShapeId = presentation.slides[0].shapes[0].office_interop_shape_id
Ustawienie alternatywnego tekstu dla kształtów
Aspose.Slides pozwala programistom ustawiać alternatywny tekst dla dowolnego kształtu. Alternatywny tekst można używać do identyfikacji i lokalizacji kształtów w prezentacji. Właśćność alternatywnego tekstu może być odczytywana i zapisywana zarówno przez Aspose.Slides, jak i Microsoft PowerPoint. Oznaczając kształty tą właściwością, można później usuwać, ukrywać lub zmieniać ich kolejność na slajdzie.
Aby ustawić alternatywny tekst kształtu, wykonaj następujące kroki:
- Utwórz instancję klasy Presentation.
- Uzyskaj dostęp do pierwszego slajdu.
- Dodaj kształt do slajdu.
- Ustaw alternatywny tekst.
- Zapisz prezentację na dysku.
import aspose.slides as slides
# Utwórz instancję klasy Presentation, która reprezentuje plik PPTX.
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Dodaj kształt.
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 40, 150, 50)
# Ustaw alternatywny tekst dla kształtu.
shape.alternative_text = "User Defined"
# Zapisz prezentację na dysk.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Dostęp do formatów układu dla kształtów
Aspose.Slides udostępnia prosty interfejs API do uzyskiwania formatów układu dla kształtów. Ta sekcja pokazuje, jak uzyskać dostęp do formatów układu.
import aspose.slides as slides
with slides.Presentation(folder_path + "sample.pptx") as presentation:
for layout_slide in presentation.layout_slides:
fill_formats = list(map(lambda shape: shape.fill_format, layout_slide.shapes))
line_formats = list(map(lambda shape: shape.line_format, layout_slide.shapes))
Renderowanie kształtów jako SVG
Aspose.Slides obsługuje renderowanie kształtów jako SVG. Metoda write_as_svg (oraz jej przeciążenia) w klasie Shape umożliwia zapisanie zawartości kształtu jako obrazu SVG. Poniższy fragment kodu pokazuje, jak wyeksportować kształt do pliku SVG.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
with open("output.svg", "wb") as image_stream:
# Pobierz pierwszy kształt na pierwszym slajdzie.
shape = presentation.slides[0].shapes[0]
shape.write_as_svg(image_stream)
Wyrównywanie kształtu
Używając metody align_shape w klasie SlidesUtil, możesz:
- Wyrównać kształty względem marginesów slajdu (zobacz Przykład 1).
- Wyrównać kształty względem siebie (zobacz Przykład 2).
Wyliczenie ShapesAlignmentType definiuje dostępne opcje wyrównywania.
Przykład 1
Ten kod w Pythonie pokazuje, jak wyrównać kształty o indeksach 1, 2 i 4 do górnej krawędzi slajdu:
import aspose.slides as slides
align_type = slides.ShapesAlignmentType.ALIGN_TOP
slide_indices = [1, 2, 4]
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
slides.util.SlideUtil.align_shapes(align_type, True, slide, slide_indices)
Przykład 2
Ten przykład w Pythonie pokazuje, jak wyrównać wszystkie kształty w kolekcji względem najniższego kształtu w tej kolekcji:
import aspose.slides as slides
align_type = slides.ShapesAlignmentType.ALIGN_BOTTOM
with slides.Presentation("sample.pptx") as presentation:
slides.util.SlideUtil.align_shapes(align_type, False, presentation.slides[0])
Właściwości odbicia
W Aspose.Slides klasa ShapeFrame zapewnia kontrolę nad poziomym i pionowym odbiciem kształtów za pomocą właściwości flip_h i flip_v. Obie właściwości są typu NullableBool, umożliwiając wartości TRUE wskazujące na odbicie, FALSE oznaczające brak odbicia lub NOT_DEFINED do użycia domyślnego zachowania. Wartości te są dostępne z Frame kształtu.
Aby zmodyfikować ustawienia odbicia, tworzona jest nowa instancja ShapeFrame z aktualną pozycją i rozmiarem kształtu, żądanymi wartościami flip_h i flip_v oraz kątem obrotu. Przypisanie tej instancji do Frame kształtu i zapisanie prezentacji stosuje transformacje odbicia i zapisuje je w pliku wyjściowym.
Załóżmy, że mamy plik sample.pptx, w którym pierwszy slajd zawiera pojedynczy kształt z domyślnymi ustawieniami odbicia, jak pokazano poniżej.

Poniższy przykład kodu pobiera bieżące właściwości odbicia kształtu i odbija go zarówno poziomo, jak i pionowo.
with slides.Presentation("sample.pptx") as presentation:
shape = presentation.slides[0].shapes[0]
# Pobierz właściwość odbicia poziomego kształtu.
horizontal_flip = shape.frame.flip_h
print("Horizontal flip:", horizontal_flip)
# Pobierz właściwość odbicia pionowego kształtu.
vertical_flip = shape.frame.flip_v
print("Vertical flip:", vertical_flip)
x, y = shape.frame.x, shape.frame.y
width, height = shape.frame.width, shape.frame.height
flip_h, flip_v = slides.NullableBool.TRUE, slides.NullableBool.TRUE # Odbij w poziomie i w pionie.
rotation = shape.frame.rotation
shape.frame = slides.ShapeFrame(x, y, width, height, flip_h, flip_v, rotation)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Wynik:

FAQ
Czy mogę łączyć kształty (union/intersect/subtract) na slajdzie jak w edytorze desktopowym?
Nie ma wbudowanego interfejsu API operacji Boolowskich. Możesz przybliżyć to, tworząc własny kontur — np. obliczyć wynikową geometrię (przy użyciu GeometryPath) i utworzyć nowy kształt z tym obrysem, opcjonalnie usuwając oryginały.
Jak mogę kontrolować kolejność nakładania (z-order), aby kształt zawsze pozostawał „na wierzchu”?
Zmień kolejność wstawiania/przenoszenia w kolekcji shapes slajdu. Aby uzyskać przewidywalne wyniki, sfinalizuj kolejność Z po wszystkich pozostałych modyfikacjach slajdu.
Czy mogę „zablokować” kształt, aby uniemożliwić użytkownikom jego edycję w PowerPoint?
Tak. Ustaw flagi ochrony na poziomie kształtu (np. blokada zaznaczania, przemieszczania, zmiany rozmiaru, edycji tekstu). W razie potrzeby zastosuj te same ograniczenia w masterze lub układzie. Należy zauważyć, że jest to ochrona na poziomie interfejsu użytkownika, a nie funkcja bezpieczeństwa; dla silniejszej ochrony, połącz to z ograniczeniami na poziomie pliku, takimi jak zalecenia tylko do odczytu lub hasła.