Vormen schalen op presentatiedia's in Python
Overzicht
Wanneer u de dia‑afmeting van een presentatie wijzigt, moet u mogelijk ook de vormen aanpassen en hun positie wijzigen zodat ze passen binnen de nieuwe afmetingen. Dit artikel laat zien hoe u vormen handmatig schaalt en hoe u tabellen op dia’s, masters en lay‑outs behandelt.
Vormen herschalen
Om de relatieve positie en grootte van elke vorm te behouden, vermenigvuldigt u de horizontale coördinaten en de breedte met de verhouding tussen de nieuwe dia‑breedte en de oorspronkelijke breedte. Pas de overeenkomstige hoogteverhouding toe op de verticale coördinaten en de hoogte.
Het eerste voorbeeld laadt een presentatie waarvan de dia’s geen tabellen bevatten, wijzigt de dia‑grootte naar A4 en slaat het resultaat op. Het gebruikt SlideSize.set_size met SlideSizeScaleType.DO_NOT_SCALE zodat de daaropvolgende lus de schaal bepaalt. De verhoudingen zijn dimensieloos; vormposities en -afmetingen worden gemeten in punten. Verschillende breedte‑ en hoogte‑verhoudingen kunnen vormen vervormen, en het wijzigen van de afmetingen van een vorm schaalt de lettergroottes niet.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
# Bereken onafhankelijke horizontale en verticale schaalfactoren.
original_size = presentation.slide_size.size
presentation.slide_size.set_size(slides.SlideSizeType.A4_PAPER, slides.SlideSizeScaleType.DO_NOT_SCALE)
target_size = presentation.slide_size.size
width_ratio = target_size.width / original_size.width
height_ratio = target_size.height / original_size.height
for slide in presentation.slides:
for shape in slide.shapes:
shape.width *= width_ratio
shape.height *= height_ratio
shape.x *= width_ratio
shape.y *= height_ratio
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Note
Tabellen vereisen aparte verwerking: schaals hun kolombreedtes en rijhoogtes in plaats van de totale breedte en hoogte van de tabel toe te wijzen. Rijhoogtes kunnen groter blijven dan aangevraagd als de celinhoud meer ruimte nodig heeft.Het tweede voorbeeld ondersteunt tabellen en verwerkt vormen op masters en lay‑outs evenals individuele dia’s voordat de vergrote presentatie wordt opgeslagen. De hulpfunctie behandelt elke Table door Column.width en Row.minimal_height te schalen. Vervolgens schaalt het de positie van de tabel zonder de totale afmetingen afzonderlijk te schalen.
import aspose.slides as slides
def resize_shapes(shapes, width_ratio, height_ratio):
for shape in shapes:
if isinstance(shape, slides.Table):
# Tabelafmetingen worden gecontroleerd door kolombreedtes en rijhoogtes.
for column in shape.columns:
column.width *= width_ratio
for row in shape.rows:
row.minimal_height *= height_ratio
else:
shape.width *= width_ratio
shape.height *= height_ratio
shape.x *= width_ratio
shape.y *= height_ratio
with slides.Presentation("sample.pptx") as presentation:
# Bereken onafhankelijke horizontale en verticale schaalfactoren.
original_size = presentation.slide_size.size
presentation.slide_size.set_size(slides.SlideSizeType.A4_PAPER, slides.SlideSizeScaleType.DO_NOT_SCALE)
target_size = presentation.slide_size.size
width_ratio = target_size.width / original_size.width
height_ratio = target_size.height / original_size.height
# Schaal vormen die gedefinieerd zijn op masters en lay-outs evenals op individuele dia's.
for master in presentation.masters:
resize_shapes(master.shapes, width_ratio, height_ratio)
for layout_slide in master.layout_slides:
resize_shapes(layout_slide.shapes, width_ratio, height_ratio)
for slide in presentation.slides:
resize_shapes(slide.shapes, width_ratio, height_ratio)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
FAQ
Waarom worden vormen vervormd of afgesneden na het wijzigen van de dia‑grootte?
Als u de dia‑grootte wijzigt zonder de vormen te schalen, behouden ze hun oorspronkelijke posities en afmetingen en kunnen ze buiten de dia uitsteken. Het schalen van breedte en hoogte met verschillende verhoudingen kan vormen eveneens vervormen.
Werkt de meegeleverde code voor alle vormtypen?
Het eerste voorbeeld wijzigt de grenzen van vormen direct en is bedoeld voor dia’s zonder tabellen. Het tweede voorbeeld behandelt tabellen apart. Controleer de resulterende lay‑out, vooral tekst en tabellen, aangezien deze voorbeelden de lettergroottes niet schalen en de inhoud van tabellen de rijhoogtes kan beperken.
Hoe pas ik de grootte van tabellen aan bij het wijzigen van een dia?
Schaal de kolombreedtes met de breedte‑verhouding en de minimale rijhoogtes met de hoogte‑verhouding, en schaal vervolgens de positie van de tabel, zoals getoond in het tweede voorbeeld.
Werkt deze grootte‑aanpassing ook voor masterdia’s en lay‑outdia’s?
Ja. Het tweede voorbeeld doorloopt Presentation.masters en voor elke master de MasterSlide.layout_slides en past dezelfde grootte‑aanpassingslogica toe op hun vormen.
Kan ik de oriëntatie van een dia (staand/liggend) wijzigen samen met de grootte‑aanpassing?
Ja. Stel SlideSize.orientation in nadat u de dia‑grootte hebt gewijzigd en vóór het lezen van de doeldimensies, zodat de schaalfactoren de uiteindelijke oriëntatie weerspiegelen.
Is er een limiet aan de dia‑grootte die ik kan instellen?
U kunt aangepaste dia‑afmetingen opgeven met SlideSize.set_size. De ondersteunde afmetingen hangen ook af van het presentatie‑formaat en de toepassing die het bestand opent.
Hoe kan ik voorkomen dat vormen met een vaste aspectverhouding vervormd raken?
Gebruik dezelfde schaalfactor voor breedte en hoogte. Om de oorspronkelijke lay‑out binnen de nieuwe dia‑afmetingen te passen, gebruikt u de kleinste van de breedte‑ en hoogte‑verhoudingen voor beide dimensies en posities. Dit behoudt de verhoudingen, maar kan ongebruikte ruimte langs één rand achterlaten.