مدیریت اشکال در ارائهها با استفاده از Python
نمای کلی
این راهنما به معرفی دستکاری اشکال در Aspose.Slides برای Python از طریق .NET میپردازد. الگوهای عملی برای یافتن اشکال (از جمله با متن جایگزین)، تکثیر، حذف یا مخفیسازی، مرتبسازی، تنظیم مکان و وارونهسازی، خواندن شناسهها و قالببندی مبتنی بر طرح، و استخراج اشکال جداگانه به SVG با استفاده از APIهای Presentation و Shape را بیاموزید.
یافتن اشکال در اسلایدها
PowerPoint اشکال را فقط با شناسههای داخلی شناسایی میکند. یک متن Alt منحصربفرد به شکل هدف در PowerPoint اختصاص دهید، سپس ارائه را با Aspose.Slides برای Python باز کنید، بر روی اشکال اسلایدها تکرار کنید و شکلی که متن Alt آن مطابق است انتخاب کنید. متد find_shape این روش را پیادهسازی میکند و شکل مطابقتیافته را بر میگرداند.
import aspose.slides as slides
# یک شکل را در اسلاید با متن جایگزین آن پیدا میکند.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# یک نمونه از کلاس Presentation که نمایانگر یک فایل ارائه است ایجاد کنید.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# شکل با متن جایگزین "Shape1" را پیدا کنید.
shape = find_shape(slide, "Shape1")
if shape is not None:
print("Shape name:", shape.name)
کلون کردن اشکال
برای کلون کردن اشکال از یک اسلاید منبع به اسلاید جدید در Aspose.Slides، مراحل زیر را دنبال کنید:
- یک Presentation از فایل منبع ایجاد کنید.
- اسلاید منبع را با استفاده از ایندکس دریافت کنید و مجموعه اشکال آن را به دست آورید.
- یک طرحبندی خالی از اسلاید اصلی (master) بازیابی کنید.
- یک اسلاید خالی با استفاده از آن طرحبندی اضافه کنید و اشکال آن را دریافت کنید.
- اشکال را به اسلاید هدف کلون کنید.
- ارائه را بهصورت PPTX ذخیره کنید.
کد مثال زیر اشکال را از یک اسلاید به اسلاید دیگر کلون میکند.
import aspose.slides as slides
# یک نمونه از کلاس 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)
# ارائه را بر روی دیسک ذخیره کنید.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
حذف اشکال
Aspose.Slides به شما امکان حذف هر شکلی را از یک اسلاید میدهد. به عنوان مثال، برای حذف یک شکل از اسلاید اول با استفاده از متن جایگزین آن، مراحل زیر را انجام دهید:
- یک نمونه از Presentation ایجاد کرده و فایل را بارگذاری کنید.
- اسلاید اول را از مجموعه اسلایدها دسترسی پیدا کنید.
- شکل را با مقدار متن جایگزین پیدا کنید.
- شکل را از مجموعه اشکال اسلاید حذف کنید.
- ارائه را در فرمت PPTX بر روی دیسک ذخیره کنید.
import aspose.slides as slides
# یک شکل را در اسلاید با متن جایگزین آن پیدا میکند.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# یک نمونه از کلاس Presentation که نمایانگر یک فایل ارائه است ایجاد کنید.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# شکل با متن جایگزین "User Defined" را پیدا کنید.
shape = find_shape(slide, "User Defined")
# شکل را حذف کنید.
slide.shapes.remove(shape)
# ارائه را بر روی دیسک ذخیره کنید.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
مخفی کردن اشکال
Aspose.Slides به شما امکان مخفی کردن هر شکلی را بر روی اسلاید میدهد. به عنوان مثال، برای مخفی کردن یک شکل در اسلاید اول با استفاده از متن جایگزین آن، مراحل زیر را دنبال کنید:
- یک نمونه از Presentation ایجاد کرده و فایل را بارگذاری کنید.
- اسلاید اول را از مجموعه اسلایدها دسترسی پیدا کنید.
- شکل را با مقدار متن جایگزین پیدا کنید.
- شکل را مخفی کنید.
- ارائه را در فرمت PPTX بر روی دیسک ذخیره کنید.
# یک شکل را در اسلاید با متن جایگزین آن پیدا میکند.
def find_shape(slide, alt_text):
for slide_shape in slide.shapes:
if slide_shape.alternative_text == alt_text:
return slide_shape
return None
# یک نمونه از کلاس Presentation که نمایانگر یک فایل ارائه است ایجاد کنید.
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# شکل با متن جایگزین "User Defined" را پیدا کنید.
shape = find_shape(slide, "User Defined")
# شکل را مخفی کنید.
shape.hidden = True
# ارائه را بر روی دیسک ذخیره کنید.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
تغییر ترتیب اشکال
Aspose.Slides به توسعهدهندگان اجازه میدهد اشکال را دوباره ترتیب دهند (تغییر z-order). ترتیبدهی تعیین میکند کدام شکل در جلو یا پشت ظاهر میشود. برای مثال، برای ترتیبدهی دو شکل در اسلاید اول، مراحل زیر را اجرا کنید:
- یک نمونه از کلاس Presentation ایجاد کنید.
- به اسلاید اول دسترسی پیدا کنید.
- اولین شکل را اضافه کنید (مثلاً یک مستطیل).
- دومین شکل را اضافه کنید (مثلاً یک مثلث).
- اشکال را با جابجایی شکل دوم به موقعیت اولین در مجموعه، ترتیب دهید.
- ارائه را بر روی دیسک ذخیره کنید.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
# دو شکل به اسلاید اضافه کنید.
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)
# شکل دوم را به موقعیت اول منتقل کنید.
slide.shapes.reorder(0, shape2)
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
دریافت شناسه Interop Shape
Aspose.Slides به شما امکان میدهد شناسهی منحصربفرد یک شکل را در محدوده اسلاید دریافت کنید، برخلاف ویژگی unique_id که در کل ارائه یکتا است. ویژگی office_interop_shape_id در کلاس Shape موجود است. مقدار آن معادل Id شیء Microsoft.Office.Interop.PowerPoint.Shape است. یک قطعه کد نمونه در زیر نمایش داده شده است.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
# شناسه یکتای شکل را در اسلاید دریافت کنید.
officeInteropShapeId = presentation.slides[0].shapes[0].office_interop_shape_id
تنظیم متن جایگزین برای اشکال
Aspose.Slides به توسعهدهندگان اجازه میدهد متن جایگزین برای هر شکلی تنظیم کنند. میتوانید از متن جایگزین برای شناسایی و مکانیابی اشکال در یک ارائه استفاده کنید. ویژگی متن جایگزین میتواند از طریق Aspose.Slides و Microsoft PowerPoint خوانده و نوشته شود. با برچسبگذاری اشکال با این ویژگی، میتوانید بعداً آنها را حذف، مخفی یا ترتیبدهی کنید.
برای تنظیم متن جایگزین یک شکل، مراحل زیر را دنبال کنید:
- یک نمونه از کلاس Presentation ایجاد کنید.
- به اسلاید اول دسترسی پیدا کنید.
- یک شکل به اسلاید اضافه کنید.
- متن جایگزین را تنظیم کنید.
- ارائه را بر روی دیسک ذخیره کنید.
import aspose.slides as slides
# یک نمونه از کلاس Presentation که نمایانگر یک فایل PPTX است ایجاد کنید.
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# یک شکل اضافه کنید.
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 40, 150, 50)
# متن جایگزین برای شکل تنظیم کنید.
shape.alternative_text = "User Defined"
# ارائه را بر روی دیسک ذخیره کنید.
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
دسترسی به فرمتهای طرحبندی برای اشکال
Aspose.Slides یک API ساده برای دسترسی به فرمتهای طرحبندی برای اشکال فراهم میکند. این بخش نشان میدهد چگونه به فرمتهای طرحبندی دسترسی پیدا کنید.
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))
رندر کردن اشکال به عنوان SVG
Aspose.Slides از رندر کردن اشکال به صورت SVG پشتیبانی میکند. متد write_as_svg (و بارگذاریهای آن) در کلاس Shape به شما امکان میدهد محتویات یک شکل را به عنوان تصویر SVG ذخیره کنید. قطعه کد زیر نشان میدهد چگونه یک شکل را به فایل SVG صادر کنید.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
with open("output.svg", "wb") as image_stream:
# اولین شکل را در اولین اسلاید دریافت کنید.
shape = presentation.slides[0].shapes[0]
shape.write_as_svg(image_stream)
ترازبندی شکل
با استفاده از متد align_shape در کلاس SlidesUtil میتوانید:
- اشکال را نسبت به حاشیههای اسلاید ترازبندی کنید (مثال 1 را ببینید).
- اشکال را نسبت به یکدیگر ترازبندی کنید (مثال 2 را ببینید).
مقداردهی ShapesAlignmentType گزینههای ترازبندی موجود را تعریف میکند.
مثال 1
این کد Python نشان میدهد چگونه اشکالی با ایندکسهای 1، 2 و 4 را به لبه بالایی اسلاید ترازبندی کنید:
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)
مثال 2
این مثال Python نشان میدهد چگونه تمام اشکال یک مجموعه را نسبت به شکل پایینترین در آن مجموعه ترازبندی کنید:
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])
ویژگیهای وارونهسازی
در Aspose.Slides، کلاس ShapeFrame کنترل افقی و عمودی انعکاس اشکال را از طریق ویژگیهای flip_h و flip_v فراهم میکند. هر دو ویژگی از نوع NullableBool هستند و مقادیر TRUE برای وارونهسازی، FALSE برای عدم وارونهسازی یا NOT_DEFINED برای استفاده از رفتار پیشفرض را میپذیرند. این مقادیر از طریق Frame یک شکل قابل دسترسی هستند.
برای تغییر تنظیمات وارونهسازی، یک نمونه جدید از ShapeFrame با موقعیت و اندازهٔ جاری شکل، مقادیر دلخواه برای flip_h و flip_v و زاویهٔ چرخش ساخته میشود. اختصاص این نمونه به Frame شکل و ذخیرهٔ ارائه، تبدیلهای انعکاسی را اعمال و در فایل خروجی ذخیره میکند.
فرض کنید فایلی به نام sample.pptx داریم که اسلاید اول حاوی یک شکل با تنظیمات وارونهسازی پیشفرض است، همانطور که در زیر نشان داده شده است.

قطعه کد زیر ویژگیهای وارونهسازی جاری شکل را دریافت کرده و آن را هم به صورت افقی و هم عمودی وارونه میکند.
with slides.Presentation("sample.pptx") as presentation:
shape = presentation.slides[0].shapes[0]
# دریافت ویژگی وارونهسازی افقی شکل.
horizontal_flip = shape.frame.flip_h
print("Horizontal flip:", horizontal_flip)
# دریافت ویژگی وارونهسازی عمودی شکل.
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 # وارونهسازی افقی و عمودی.
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)
نتیجه:

پرسشهای متداول
آیا میتوانم اشکال را (اتحاد/تقاطع/تفریق) در یک اسلاید مانند یک ویرایشگر دسکتاپ ترکیب کنم؟
یک API عملیات منطقی داخلی وجود ندارد. میتوانید با ساختن شکل جدیدی که مرزهای مورد نظر را شامل میشود—به عنوان مثال محاسبهٔ هندسهٔ نتیجهگیری با استفاده از GeometryPath و ایجاد یک شکل جدید با همان زمینه—تقریباً این کار را انجام دهید و در صورت نیاز اشکال اصلی را حذف کنید.
چگونه میتوانم ترتیب لایه (z-order) را کنترل کنم تا یک شکل همیشه «در بالا» بماند؟
ترتیب درج/جابهجایی را در مجموعهٔ shapes اسلاید تنظیم کنید. برای نتایج قابل پیشبینی، پس از تمام تغییرات اسلاید، ترتیب z را نهایی کنید.
آیا میتوانم یک شکل را «قفل» کنم تا کاربران در PowerPoint نتوانند آن را ویرایش کنند؟
بله. پرچمهای حفاظت در سطح شکل را تنظیم کنید (مانند قفل انتخاب، حرکت، تغییر اندازه، ویرایش متن). در صورت نیاز، این محدودیتها را در مستر یا طرحبندی نیز اعمال کنید. توجه داشته باشید این محافظت سطح UI است و ویژگی امنیتی نیست؛ برای حفاظت قویتر میتوانید آن را با محدودیتهای سطح فایل مانند توصیههای فقط‑خواندنی یا پسورد ترکیب کنید.