عملیاتهای ارائه کمکد در PHP
بررسی اجمالی
فضای نام aspose.slides کلاسهای استاتیک کمکی برای عملیاتهای رایج ارائهها را فراهم میکند. این کمکیها جریانهای کاری پرکاربرد شیء‑مدل را در متدهای متمرکز میپیچند، بنابراین میتوانید فایلها را تبدیل یا ترکیب کنید، عناصر ارائه را پردازش کنید، اشکال را جمعآوری کنید و محتوای استفاده‑نشده را با کد کمتر حذف کنید.
کمکیهای کم‑کد وقتی که عملیات بر کل فایل یا ارائه اعمال میشود و جریان کاری پیشفرض با نیازهای شما منطبق است، بیشترین کاربرد را دارند. زمانی که نیاز به کنترل دقیق بر اسلایدهای منفرد، مسترها، لایهها، اشکال، تنظیمات خروجی یا روابط بین عناصر ارائه دارید، از Aspose.Slides object model کامل استفاده کنید.
جدول زیر خلاصهای از کمکیهای موجود را نشان میدهد:
| کمککننده | موارد استفاده |
|---|---|
| Convert | تبدیل یک ارائه به قالب دیگر با فراخوانی مستقیم فایل‑به‑فایل. |
| Merger | ترکیب کامل فایلهای ارائهای با همان قالب. |
| ForEach_ | اجرای یک callback برای هر اسلاید، شکل، پاراگراف یا بخش متن. |
| Collect | بازیابی اشکال از کل ارائه برای پردازش یا تحلیل مکرر. |
| Compress | حذف مسترها و لایههای استفادهنشده و کاهش دادههای قلمهای توکار. |
تبدیل یک ارائه
زمانی که پسوند فایل خروجی برای انتخاب قالب خروجی کافی است، از Convert::autoByExtension استفاده کنید. این متد ارائه منبع را باز میکند، قالب مورد نیاز را از مسیر خروجی تعیین میکند و نتیجه را مینویسد.
use aspose\slides\Convert;
Convert::autoByExtension("input.pptx", "output.pdf");
کلاس Convert همچنین متدهای اختصاصی برای خروجی PDF، SVG، JPEG، PNG و TIFF فراهم میکند. زمانی که نیاز به بررسی یا تغییر ارائه پیش از خروجی یا تنظیم گزینهای دارید که توسط کمکی انتخاب‑شده در دسترس نیست، از مدل شیء کامل استفاده کنید. برای گردشکارها و گزینههای خاص قالب، به صفحه تبدیل ارائه مراجعه کنید.
ترکیب ارائهها
برای ترکیب کامل فایلهای ارائهای با یک فراخوانی، از Merger::process استفاده کنید. ارائههای ورودی باید دارای همان قالب فایل باشند.
use aspose\slides\Merger;
$inputFiles = ["part-1.pptx", "part-2.pptx"];
Merger::process($inputFiles, "merged.pptx");
این کمکی زمانی مناسب است که همه اسلایدها باید بدون انتخاب یا بازنقشگذاری جداگانه، به یک نتیجه افزوده شوند. زمانی که نیاز به ترکیب اسلایدهای انتخابی، اعمال یک مستر یا لایه مقصد، حفظ بخشها بهصورت صریح یا تطبیق اندازههای اسلاید متفاوت دارید، از مدل شیء کامل استفاده کنید. برای این حالات، به صفحه ترکیب ارائهها مراجعه کنید.
تکرار در عناصر ارائه
کلاس ForEach_ برای هر نوع عنصر ارائهای که درخواست میشود، یک callback فراخوانی میکند. این کار از حلقههای تو در توی جمعآوری جلوگیری میکند و برای بازرسی یا تغییرات فرمتگذاری در سطح کل ارائه مناسب است.
مثال زیر از متدهای ForEach_::slide، ForEach_::shape، ForEach_::paragraph و ForEach_::portion برای بازرسی عناصر مربوطه استفاده میکند:
use aspose\slides\ForEach_;
use aspose\slides\Presentation;
class SlideCallback {
public function invoke($slide, $index): void {
$slideIndex = java_values($index);
$shapeCount = java_values($slide->getShapes()->size());
echo sprintf("Slide %d: %d shapes", $slideIndex, $shapeCount) . PHP_EOL;
}
}
class ShapeCallback {
public function invoke($shape, $slide, $index): void {
$shapeIndex = java_values($index);
$slideType = java_values($slide->getClass()->getSimpleName());
$shapeName = java_values($shape->getName());
echo sprintf("Shape %d on %s: %s", $shapeIndex, $slideType, $shapeName) . PHP_EOL;
}
}
class ParagraphCallback {
public function invoke($paragraph, $slide, $index): void {
$paragraphIndex = java_values($index);
$slideType = java_values($slide->getClass()->getSimpleName());
$text = java_values($paragraph->getText());
echo sprintf("Paragraph %d on %s: %s", $paragraphIndex, $slideType, $text) . PHP_EOL;
}
}
class PortionCallback {
public function invoke($portion, $paragraph, $slide, $index): void {
$portionIndex = java_values($index);
$slideType = java_values($slide->getClass()->getSimpleName());
$text = java_values($portion->getText());
echo sprintf("Portion %d on %s: %s", $portionIndex, $slideType, $text) . PHP_EOL;
}
}
$presentation = new Presentation("input.pptx");
try {
$slideCallback = java_closure(new SlideCallback(), null, java('com.aspose.slides.ForEach_$ForEachSlideCallback'));
$shapeCallback = java_closure(new ShapeCallback(), null, java('com.aspose.slides.ForEach_$ForEachShapeCallback'));
$paragraphCallback = java_closure(new ParagraphCallback(), null, java('com.aspose.slides.ForEach_$ForEachParagraphCallback'));
$portionCallback = java_closure(new PortionCallback(), null, java('com.aspose.slides.ForEach_$ForEachPortionCallback'));
ForEach_::slide($presentation, $slideCallback);
ForEach_::shape($presentation, $shapeCallback);
ForEach_::paragraph($presentation, $paragraphCallback);
ForEach_::portion($presentation, $portionCallback);
} finally {
$presentation->dispose();
}
بهطور پیشفرض، پیمایش اشکال و متن در سطح کلی ارائه شامل اسلایدهای معمولی، مستر و لایه است. بارگذاریهای overload شده با پارامتر includeNotes میتوانند اسلایدهای یادداشتها را نیز پردازش کنند. وقتی ترتیب پیمایش، خروج زودهنگام، فیلتر قبل از فراخوانی callback یا کنترل دقیق والد‑فرزند مهم است، بهتر است از حلقههای مستقیم جمعآوری استفاده کنید.
جمعآوری اشکال
زمانی که به یک مجموعه از تمام اشکال موجود در یک ارائه نیاز دارید (به جای یک callback برای هر شکل)، از Collect::shapes استفاده کنید. این کار زمانی مفید است که همان مجموعه چندین بار فیلتر، شمارش یا پردازش شود.
use aspose\slides\Collect;
use aspose\slides\Presentation;
$presentation = new Presentation("input.pptx");
try {
$shapes = Collect::shapes($presentation);
foreach ($shapes as $shape) {
$shapeName = java_values($shape->getName());
$shapeType = java_values($shape->getClass()->getSimpleName());
echo sprintf("%s: %s", $shapeName, $shapeType) . PHP_EOL;
}
} finally {
$presentation->dispose();
}
اگر هر شکل میتواند بلافاصله درون یک callback پردازش شود و نیازی به حفظ نتیجه جمعآوریشده ندارید، به جای آن از ForEach_::shape استفاده کنید.
فشردهسازی محتوای ارائه
کلاس Compress میتواند عناصر ساختاری استفادهنشده را حذف و دادههای قلمهای توکار را کاهش دهد:
- Compress::removeUnusedLayoutSlides لایههای اسلایدی را که هیچ اسلاید معمولی به آنها ارجاع نمیدهد حذف میکند.
- Compress::removeUnusedMasterSlides مسترهای استفادهنشده را حذف میکند.
- Compress::compressEmbeddedFonts کاراکترهای استفادهنشده را از قلمهای توکار حذف میکند.
use aspose\slides\Compress;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("input.pptx");
try {
Compress::removeUnusedLayoutSlides($presentation);
Compress::removeUnusedMasterSlides($presentation);
Compress::compressEmbeddedFonts($presentation);
$presentation->save("compressed.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
ابتدا لایههای استفادهنشده را حذف کنید و سپس مسترهای استفادهنشده را، بهطوری که مستری که پس از پاکسازی لایهها دیگر ارجاع داده نمیشود نیز حذف شود. اگر ممکن است بعداً به مسترها، لایهها یا دادههای کامل قلمهای توکار اصلی نیاز داشته باشید، ارائه بهینهشده را در فایلی جدید ذخیره کنید. برای جزئیات بیشتر به صفحات Slide Master و Embedded Font مراجعه کنید.
سؤالات متداول
چه زمانی باید بهجای مدل شیء کامل از API کم‑کد استفاده کنم؟
وقتی یک عملیات استاندارد بر کل فایل یا ارائه اعمال میشود و نیازی به کنترل دقیق عناصر منفرد ندارد، از کمکیهای کم‑کد استفاده کنید. زمانی که نیاز به انتخاب اسلایدهای خاص، کنترل روابط مستر و لایه، بازرسی وضعیت میانی یا تنظیم رفتارهایی دارید که کمکی دربرگیرند، از مدل شیء کامل استفاده کنید.
آیا Merger میتواند ارائهها را در قالبهای فایل متفاوت ترکیب کند؟
نه. متد Merger::process برای ترکیب فقط ارائههای با همان قالب فایل است. ابتدا فایلهای ورودی را با استفاده از Convert::autoByExtension به یک قالب مشترک تبدیل کنید و سپس فایلهای تبدیل‑شده را ترکیب کنید.
**آیا ForEach_ میتواند اسلایدهای مستر، لایه و یادداشتها را پردازش کند؟**
متد ForEach_::slide فقط اسلایدهای معمولی ارائه را پیمایش میکند. عملیاتهای سطح‑کل مانند ForEach_::shape، ForEach_::paragraph و ForEach_::portion بهطور پیشفرض اسلایدهای معمولی، مستر و لایه را شامل میشوند. برای شامل کردن اسلایدهای یادداشتها، از بارگذاریهای overload شده با مقدار includeNotes برابر true استفاده کنید.
**تفاوت بین ForEach_::shape و Collect::shapes چیست؟**
از ForEach_::shape برای پردازش فوری هر شکل در یک callback استفاده کنید. وقتی به یک نتیجه قابل پیمایش نیاز دارید که بتوانید آن را حفظ، فیلتر یا چندین بار شمارش کنید، از Collect::shapes بهره ببرید.
آیا Compress همیشه اندازه فایل ارائه را کوچک میکند؟
لزومی ندارد. نتیجه به این بستگی دارد که آیا ارائه شامل لایههای استفادهنشده، مسترهای استفادهنشده یا قلمهای توکار با کاراکترهای استفادهنشده باشد. اگر هیچیک از این موارد وجود نداشته باشد، عملیاتهای مربوط به Compress ممکن است اندازه فایل را کاهش ندهند.
**آیا تغییرات انجام شده توسط ForEach_ یا Compress بهطور خودکار ذخیره میشوند؟**
نه. این کمکیها بر روی شیء Presentation بارگذاری شده در حافظه عمل میکنند. پس از تغییر عناصر در یک callback از ForEach_ یا اجرای Compress، برای نوشتن نتیجه باید متد Presentation::save را فراخوانی کنید.