Zmiana rozmiaru kształtów w prezentacjach przy użyciu Pythona
Przegląd
Jednym z najczęściej zadawanych pytań klientów Aspose.Slides dla Pythona jest to, jak zmienić rozmiar kształtów, aby przy zmianie rozmiaru slajdu dane nie były obcięte. Ten krótki artykuł techniczny pokazuje, jak to zrobić.
Zmiana rozmiaru kształtów
Aby zapobiec nieprawidłowemu rozmieszczeniu kształtów przy zmianie rozmiaru slajdu, zaktualizuj pozycję i wymiary każdego kształtu, aby dopasowały się do nowego układu slajdu.
import aspose.slides as slides
# Wczytaj plik prezentacji.
with slides.Presentation("sample.pptx") as presentation:
# Pobierz oryginalny rozmiar slajdu.
current_height = presentation.slide_size.size.height
current_width = presentation.slide_size.size.width
# Zmień rozmiar slajdu bez skalowania istniejących kształtów.
presentation.slide_size.set_size(slides.SlideSizeType.A4_PAPER, slides.SlideSizeScaleType.DO_NOT_SCALE)
# Pobierz nowy rozmiar slajdu.
new_height = presentation.slide_size.size.height
new_width = presentation.slide_size.size.width
height_ratio = new_height / current_height
width_ratio = new_width / current_width
# Zmień rozmiar i pozycję kształtów na każdym slajdzie.
for slide in presentation.slides:
for shape in slide.shapes:
# Skaluj rozmiar kształtu.
shape.height = shape.height * height_ratio
shape.width = shape.width * width_ratio
# Skaluj pozycję kształtu.
shape.y = shape.y * height_ratio
shape.x = shape.x * width_ratio
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Użyj poniższego kodu, aby zmienić rozmiar slajdów zawierających tabele. W przypadku tabel ustawianie szerokości lub wysokości jest przypadkiem specjalnym: musisz dostosować wysokości poszczególnych wierszy i szerokości kolumn, aby zmienić ogólny rozmiar tabeli.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
# Pobierz oryginalny rozmiar slajdu.
current_height = presentation.slide_size.size.height
current_width = presentation.slide_size.size.width
# Zmień rozmiar slajdu bez skalowania istniejących kształtów.
presentation.slide_size.set_size(slides.SlideSizeType.A4_PAPER, slides.SlideSizeScaleType.DO_NOT_SCALE)
# Pobierz nowy rozmiar slajdu.
new_height = presentation.slide_size.size.height
new_width = presentation.slide_size.size.width
height_ratio = new_height / current_height
width_ratio = new_width / current_width
for master in presentation.masters:
for shape in master.shapes:
# Skaluj rozmiar kształtu.
shape.height = shape.height * height_ratio
shape.width = shape.width * width_ratio
# Skaluj pozycję kształtu.
shape.y = shape.y * height_ratio
shape.x = shape.x * width_ratio
for layout_slide in master.layout_slides:
for shape in layout_slide.shapes:
# Skaluj rozmiar kształtu.
shape.height = shape.height * height_ratio
shape.width = shape.width * width_ratio
# Skaluj pozycję kształtu.
shape.y = shape.y * height_ratio
shape.x = shape.x * width_ratio
for slide in presentation.slides:
for shape in slide.shapes:
# Skaluj rozmiar kształtu.
shape.height = shape.height * height_ratio
shape.width = shape.width * width_ratio
# Skaluj pozycję kształtu.
shape.y = shape.y * height_ratio
shape.x = shape.x * width_ratio
if type(shape) is slides.Table:
for row in shape.rows:
row.minimal_height = row.minimal_height * height_ratio
for column in shape.columns:
column.width = column.width * width_ratio
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
FAQ
Dlaczego kształty są zniekształcone lub obcięte po zmianie rozmiaru slajdu?
Podczas zmiany rozmiaru slajdu kształty zachowują pierwotną pozycję i rozmiar, chyba że skala zostanie wyraźnie zmieniona. Może to spowodować przycięcie treści lub nieprawidłowe rozmieszczenie kształtów.
Czy podany kod działa dla wszystkich typów kształtów?
Podstawowy przykład działa dla większości typów kształtów (pola tekstowe, obrazy, wykresy itp.). Jednak w przypadku tabel należy obsługiwać wiersze i kolumny osobno, ponieważ wysokość i szerokość tabeli są określone przez wymiary poszczególnych komórek.
Jak zmienić rozmiar tabel przy zmianie rozmiaru slajdu?
Należy przejść przez wszystkie wiersze i kolumny tabeli i proporcjonalnie zmienić ich wysokość oraz szerokość, jak pokazano w drugim przykładzie kodu.
Czy to skalowanie działa dla slajdów master i layout?
Tak, ale należy także przejść przez Masters i Layout slides oraz zastosować tę samą logikę skalowania do ich kształtów, aby zapewnić spójność w całej prezentacji.
Czy mogę zmienić orientację slajdu (portret/poziom) razem ze skalowaniem?
Tak. Można użyć presentation.slide_size.orientation, aby zmienić orientację. Upewnij się, że logikę skalowania dostosowujesz odpowiednio, aby zachować układ.
Czy istnieje limit rozmiaru slajdu, który mogę ustawić?
Aspose.Slides obsługuje rozmiary niestandardowe, ale bardzo duże rozmiary mogą wpływać na wydajność lub kompatybilność z niektórymi wersjami PowerPointa.
Jak zapobiec zniekształceniu kształtów o stałym współczynniku proporcji?
Można sprawdzić właściwość aspect_ratio_locked kształtu przed skalowaniem. Jeśli jest zablokowana, należy proporcjonalnie dostosować szerokość lub wysokość zamiast skalować je osobno.