Python üzerinden Java ile Sunum Slaytlarındaki Şekilleri Yeniden Boyutlandırma

Genel Bakış

Aspose.Slides for Python via Java müşterilerinin en yaygın sorularından biri, slayt boyutu değiştiğinde verinin kesilmemesi için şekillerin nasıl yeniden boyutlandırılacağıdır. Bu kısa teknik makale bunu nasıl yapacağınızı gösterir.

Şekilleri Yeniden Boyutlandırma

Slayt boyutu değiştiğinde şekillerin hizalanmasının bozulmasını önlemek için, her bir şeklin konum ve boyutlarını yeni slayt düzenine uyması üzere güncelleyin.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideSizeType, SlideSizeScaleType, SlideOrientation

# Sunum dosyasını yükleyin.
presentation = Presentation("sample.ppt")
try:
    # Orijinal slayt boyutunu alın.
    current_height = presentation.getSlideSize().getSize().getHeight()
    current_width = presentation.getSlideSize().getSize().getWidth()

    # Mevcut şekilleri ölçeklendirmeden slayt boyutunu değiştirin.
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)

    # Yeni slayt boyutunu alın.
    new_height = presentation.getSlideSize().getSize().getHeight()
    new_width = presentation.getSlideSize().getSize().getWidth()

    height_ratio = new_height / current_height
    width_ratio = new_width / current_width

    # Her slayttaki şekilleri yeniden boyutlandırın ve konumlandırın.
    for slide in presentation.getSlides():
        for shape in slide.getShapes():

            # Şekil boyutunu ölçeklendirin.
            shape.setHeight(shape.getHeight() * height_ratio)
            shape.setWidth(shape.getWidth() * width_ratio)

            # Şekil konumunu ölçeklendirin.
            shape.setY(shape.getY() * height_ratio)
            shape.setX(shape.getX() * width_ratio)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Yukarıdaki kod yalnızca slaytlardaki şekilleri değiştirir. Master slaytlar ve düzen slaytları kendi şekillerine sahiptir, bu yüzden tüm sunumun yeni slayt boyutuna uymasını istediğinizde onları da ölçeklendirin:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideSizeType, SlideSizeScaleType, SlideOrientation

presentation = Presentation("sample.pptx")
try:
    # Orijinal slayt boyutunu alın.
    current_height = presentation.getSlideSize().getSize().getHeight()
    current_width = presentation.getSlideSize().getSize().getWidth()

    # Mevcut şekilleri ölçeklendirmeden slayt boyutunu değiştir.
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)
    # presentation.getSlideSize().setOrientation(SlideOrientation.Portrait)

    # Yeni slayt boyutunu alın.
    new_height = presentation.getSlideSize().getSize().getHeight()
    new_width = presentation.getSlideSize().getSize().getWidth()

    height_ratio = new_height / current_height
    width_ratio = new_width / current_width

    for master in presentation.getMasters():
        for shape in master.getShapes():
            # Şekil boyutunu ölçeklendirin.
            shape.setHeight(shape.getHeight() * height_ratio)
            shape.setWidth(shape.getWidth() * width_ratio)

            # Şekil konumunu ölçeklendirin.
            shape.setY(shape.getY() * height_ratio)
            shape.setX(shape.getX() * width_ratio)

        for layout_slide in master.getLayoutSlides():
            for shape in layout_slide.getShapes():
                # Şekil boyutunu ölçeklendirin.
                shape.setHeight(shape.getHeight() * height_ratio)
                shape.setWidth(shape.getWidth() * width_ratio)

                # Şekil konumunu ölçeklendirin.
                shape.setY(shape.getY() * height_ratio)
                shape.setX(shape.getX() * width_ratio)

    for slide in presentation.getSlides():
        for shape in slide.getShapes():
            # Şekil boyutunu ölçeklendirin.
            shape.setHeight(shape.getHeight() * height_ratio)
            shape.setWidth(shape.getWidth() * width_ratio)

            # Şekil konumunu ölçeklendirin.
            shape.setY(shape.getY() * height_ratio)
            shape.setX(shape.getX() * width_ratio)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

FAQ

Bir slaytı yeniden boyutlandırdıktan sonra şekiller neden bozuluyor veya kesiliyor?

Bir slaytı yeniden boyutlandırdığınızda, ölçek açıkça değiştirilmediği sürece şekiller orijinal konum ve boyutlarını korur. Bu, içeriğin kırpılmasına veya şekillerin hizalanmasının bozulmasına neden olabilir.

Sağlanan kod tüm şekil türleri için çalışıyor mu?

Evet. Yükseklik ve genişlik ayarlaması metin kutuları, resimler, grafikler ve tablolar için aynı şekilde çalışır.

Bir slaytı yeniden boyutlandırırken tabloları nasıl yeniden boyutlandırırım?

Tablo şeklinin kendisini, diğer şekiller gibi ölçeklendirin. Satır ve sütunları orantılı olarak izler, bu yüzden sonradan onları tekrar ölçeklendirmeyin.

Bu yeniden boyutlandırma master slaytlar ve düzen slaytları için de geçerli olacak mı?

Evet, ancak Presentation.getMasters ve Presentation.getLayoutSlides döngüsüyle de geçerek, şekillerine aynı ölçekleme mantığını uygulamalısınız; böylece sunum genelinde tutarlılık sağlanır.

Yeniden boyutlandırma sırasında bir slaytın yönünü (dikey/yatay) değiştirebilir miyim?

Evet. Yönü değiştirmek için SlideSize.setOrientation metodunu kullanabilirsiniz. Düzeni korumak için ölçekleme mantığını buna göre ayarladığınızdan emin olun.

Ayarlayabileceğim slayt boyutu için bir sınırlama var mı?

Aspose.Slides özel boyutları destekler, ancak çok büyük boyutlar performansı veya bazı PowerPoint sürümleriyle uyumluluğu etkileyebilir.

Sabit en‑boy oranına sahip şekillerin bozulmasını nasıl önleyebilirim?

Ölçeklendirmeden önce şekil kilidinin getAspectRatioLocked metodunu kontrol edebilirsiniz. Eğer kilitli ise, genişlik veya yüksekliği bireysel olarak ölçeklendirmek yerine orantılı olarak ayarlayın.