مدیریت تمهای ارائه در PHP
مقدمه
یک تم ارائه ویژگیهای عناصر طراحی را تعریف میکند. وقتی یک تم ارائه را انتخاب میکنید، در واقع مجموعهای خاص از عناصر بصری و ویژگیهای آنها را برمیگزینید.
در PowerPoint، یک تم شامل رنگها، فونتها، سبکهای پسزمینه، و افکتها است.

تغییر رنگ تم
یک تم PowerPoint برای عناصر مختلف در یک اسلاید مجموعهای خاص از رنگها را به کار میبرد. اگر از این رنگها راضی نیستید، میتوانید با اعمال رنگهای جدید برای تم، آنها را تغییر دهید. برای این که بتوانید یک رنگ تم جدید را انتخاب کنید، Aspose.Slides مقادیر را تحت شمارشگر SchemeColor ارائه میدهد.
این کد PHP نشان میدهد که چگونه رنگ تأکید را برای یک تم تغییر دهید:
$pres = new Presentation();
try {
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 100);
$shape->getFillFormat()->setFillType(FillType::Solid);
$shape->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
به این روش میتوانید مقدار موثر رنگ حاصل را تعیین کنید:
$fillEffective = $shape->getFillFormat()->getEffective();
$effectiveColor = $fillEffective->getSolidFillColor();
echo(sprintf("Color [A=%d, R=%d, G=%d, B=%d]", $effectiveColor->getAlpha(), $effectiveColor->getRed(), $effectiveColor->getGreen(), $effectiveColor->getBlue()));
برای نشان دادن بیشتر عملیات تغییر رنگ، عنصر دیگری ایجاد میکنیم و رنگ تأکید (از عملیات اولیه) را به آن اختصاص میدهیم. سپس رنگ را در تم تغییر میدهیم:
$otherShape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 120, 100, 100);
$otherShape->getFillFormat()->setFillType(FillType::Solid);
$otherShape->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
$pres->getMasterTheme()->getColorScheme()->getAccent4()->setColor(java("java.awt.Color")->RED);
رنگ جدید بهصورت خودکار بر روی هر دو عنصر اعمال میشود.
تنظیم رنگ تم از یک پالت اضافی
وقتی تبدیلهای روشنایی را بر رنگ اصلی تم (1) اعمال میکنید، رنگهایی از پالت اضافی (2) تشکیل میشود. سپس میتوانید این رنگهای تم را تنظیم و دریافت کنید.

1 - رنگهای اصلی تم
2 - رنگهای پالت اضافی.
این کد PHP عملیاتی را نشان میدهد که در آن رنگهای پالت اضافی از رنگ اصلی تم به دست میآیند و سپس در اشکال استفاده میشوند:
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
# اکسنت ۴
$shape1 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 50, 50);
$shape1->getFillFormat()->setFillType(FillType::Solid);
$shape1->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
# اکسنت ۴، روشنتر ۸۰٪
$shape2 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 70, 50, 50);
$shape2->getFillFormat()->setFillType(FillType::Solid);
$shape2->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
$shape2->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.2);
$shape2->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->AddLuminance, 0.8);
# اکسنت ۴، روشنتر ۶۰٪
$shape3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 130, 50, 50);
$shape3->getFillFormat()->setFillType(FillType::Solid);
$shape3->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
$shape3->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.4);
$shape3->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->AddLuminance, 0.6);
# اکسنت ۴، روشنتر ۴۰٪
$shape4 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 190, 50, 50);
$shape4->getFillFormat()->setFillType(FillType::Solid);
$shape4->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
$shape4->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.6);
$shape4->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->AddLuminance, 0.4);
# اکسنت ۴، تاریکتر ۲۵٪
$shape5 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 250, 50, 50);
$shape5->getFillFormat()->setFillType(FillType::Solid);
$shape5->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
$shape5->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.75);
# اکسنت ۴، تاریکتر ۵۰٪
$shape6 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 310, 50, 50);
$shape6->getFillFormat()->setFillType(FillType::Solid);
$shape6->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
$shape6->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.5);
$presentation->save($path . "example_accent4.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
نقشهبرداری SchemeColor به رنگهای ColorScheme
هنگامی که با SchemeColor کار میکنید، ممکن است متوجه شوید که شامل مقادیر رنگ تم زیر است:
Background1, Background2, Text1, and Text2.
با این حال، Presentation::getMasterTheme()::getColorScheme() ColorScheme را برمیگرداند که رنگهای متناظر را به صورت زیر ارائه میدهد:
Dark1, Dark2, Light1, and Light2.
این تفاوت فقط در نامگذاری است. این مقادیر به همان اسلاتهای رنگ تم اشاره میکنند و نگاشت ثابت است:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
هیچ تبدیلی پویا بین Text/Background و Dark/Light وجود ندارد. آنها صرفاً نامهای جایگزین برای همان رنگهای تم هستند.
این تفاوت نامگذاری از اصطلاحات Microsoft Office ناشی میشود. نسخههای قدیمی Office از Dark 1, Light 1, Dark 2, و Light 2 استفاده میکردند، در حالی که نسخههای جدید UI همان اسلاتها را به صورت Text 1, Background 1, Text 2, و Background 2 نمایش میدهند.
تغییر فونت تم
برای این که بتوانید فونتها را برای تمها و مقاصد دیگر انتخاب کنید، Aspose.Slides از این شناساگرهای خاص (مشابه آنچه در PowerPoint استفاده میشود) بهره میبرد:
- +mn-lt - فونت بدنه لاتین (فونت لاتین کوچک)
- +mj-lt - فونت عنوان لاتین (فونت لاتین بزرگ)
- +mn-ea - فونت بدنه آسیای شرقی (فونت آسیای شرقی کوچک)
- +mj-ea - فونت بدنه آسیای شرقی (فونت آسیای شرقی بزرگ)
این کد PHP نشان میدهد که چگونه فونت لاتین را به یک عنصر تم اختصاص دهید:
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 100);
$paragraph = new Paragraph();
$portion = new Portion("Theme text format");
$paragraph->getPortions()->add($portion);
$shape->getTextFrame()->getParagraphs()->add($paragraph);
$portion->getPortionFormat()->setLatinFont(new FontData("+mn-lt"));
این کد PHP نشان میدهد که چگونه فونت تم ارائه را تغییر دهید:
$pres->getMasterTheme()->getFontScheme()->getMinor()->setLatinFont(new FontData("Arial"));
فونت در تمام جعبههای متن بهروز خواهد شد.
TIP
ممکن است بخواهید فونتهای PowerPoint را مشاهده کنید.تغییر سبک پسزمینه تم
بهطور پیشفرض، برنامه PowerPoint ۱۲ پسزمینه از پیش تعریفشده ارائه میدهد اما فقط ۳ تا از آنها در یک ارائه معمولی ذخیره میشوند.

بهعنوان مثال، پس از ذخیره یک ارائه در برنامه PowerPoint، میتوانید این کد PHP را اجرا کنید تا تعداد پسزمینههای از پیش تعریفشده در ارائه را بفهمید:
$pres = new Presentation("pres.pptx");
try {
$numberOfBackgroundFills = $pres->getMasterTheme()->getFormatScheme()->getBackgroundFillStyles()->size();
echo("Number of background fill styles for theme is " . $numberOfBackgroundFills);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
این کد PHP نشان میدهد که چگونه پسزمینهای برای ارائه تنظیم کنید:
$pres->getMasters()->get_Item(0)->getBackground()->setStyleIndex(2);
راهنمای اندیس: مقدار ۰ برای بدون پر استفاده میشود. اندیس از ۱ شروع میشود.
TIP
ممکن است بخواهید پسزمینه PowerPoint را مشاهده کنید.تغییر افکت تم
یک تم PowerPoint معمولاً ۳ مقدار برای هر آرایه سبک دارد. این آرایهها به ۳ افکت زیر ترکیب میشوند: ظریف، متوسط و شدید. به عنوان مثال، این نتیجهای است که وقتی افکتها بر یک شکل خاص اعمال میشوند:

با استفاده از ۳ ویژگی (FillStyles, LineStyles, EffectStyles) از کلاس FormatScheme میتوانید عناصر در یک تم را (حتی انعطافپذیرتر از گزینههای PowerPoint) تغییر دهید.
این کد PHP نشان میدهد که چگونه یک افکت تم را با تغییر بخشهای مختلف عنصر تغییر دهید:
$pres = new Presentation("Subtle_Moderate_Intense.pptx");
try {
$pres->getMasterTheme()->getFormatScheme()->getLineStyles()->get_Item(0)->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$pres->getMasterTheme()->getFormatScheme()->getFillStyles()->get_Item(2)->setFillType(FillType::Solid);
$pres->getMasterTheme()->getFormatScheme()->getFillStyles()->get_Item(2)->getSolidFillColor()->setColor(java("java.awt.Color")->GREEN);
$pres->getMasterTheme()->getFormatScheme()->getEffectStyles()->get_Item(2)->getEffectFormat()->getOuterShadowEffect()->setDistance(10.0);
$pres->save("Design_04_Subtle_Moderate_Intense-out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
تغییرات حاصل در رنگ پر، نوع پر، افکت سایه و غیره:

FAQ
آیا میتوانم یک تم را فقط بر روی یک اسلاید اعمال کنم بدون اینکه مستر تغییر کند؟
بله. Aspose.Slides از بازنویسی تم در سطح اسلاید پشتیبانی میکند، بنابراین میتوانید یک تم محلی را فقط بر آن اسلاید اعمال کنید در حالی که تم مستر دستنخورده باقی میماند (از طریق SlideThemeManager).
ایمنترین روش برای انتقال تم از یک ارائه به ارائه دیگر چیست؟
Clone slides را همراه با مسترشان به ارائه هدف منتقل کنید. این کار مستر، طرحبندیها و تم مرتبط را حفظ میکند تا ظاهر یکدست باقی بماند.
چگونه میتوانم مقادیر «موثر» را پس از تمام وراثتها و بازنویسیها ببینم؟
از نمایههای “effective” API برای تم/رنگ/فونت/افکت استفاده کنید. اینها ویژگیهای نهایی حلوشده پس از اعمال مستر بهعلاوه هر بازنویسی محلی را برمیگردانند.