Zarządzaj motywami prezentacji w PHP
Wprowadzenie
Motyw prezentacji definiuje właściwości elementów projektowych. Wybierając motyw prezentacji, w zasadzie wybierasz określony zestaw elementów wizualnych i ich właściwości.
W programie PowerPoint motyw składa się z kolorów, czcionek, stylów tła, oraz efektów.

Zmień kolor motywu
Motyw PowerPoint używa określonego zestawu kolorów dla różnych elementów na slajdzie. Jeśli nie podoba Ci się zestaw kolorów, możesz je zmienić, stosując nowe kolory dla motywu. Aby umożliwić wybór nowego koloru motywu, Aspose.Slides udostępnia wartości w wyliczeniu SchemeColor.
Ten kod PHP pokazuje, jak zmienić kolor akcentu w motywie:
$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();
}
}
Możesz w ten sposób określić efektywną wartość uzyskanego koloru:
$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()));
Aby dalej zilustrować operację zmiany koloru, tworzymy kolejny element i przypisujemy mu kolor akcentu (z początkowej operacji). Następnie zmieniamy kolor w motywie:
$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);
Nowy kolor zostaje automatycznie zastosowany w obu elementach.
Ustaw kolor motywu z dodatkowej palety
Kiedy stosujesz transformacje luminancji do głównego koloru motywu(1), powstają kolory z dodatkowej palety(2). Możesz wtedy ustawiać i pobierać te kolory motywu.

1 - Główne kolory motywu
2 - Kolory z dodatkowej palety.
Ten kod PHP demonstruje operację, w której kolory dodatkowej palety są uzyskiwane z głównego koloru motywu i następnie używane w kształtach:
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
# Akcent 4
$shape1 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 50, 50);
$shape1->getFillFormat()->setFillType(FillType::Solid);
$shape1->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
# Akcent 4, Jaśniejszy 80%
$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);
# Akcent 4, Jaśniejszy 60%
$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);
# Akcent 4, Jaśniejszy 40%
$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);
# Akcent 4, Ciemniejszy 25%
$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);
# Akcent 4, Ciemniejszy 50%
$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();
}
}
Mapuj SchemeColor na kolory ColorScheme
Pracując z SchemeColor, możesz zauważyć, że zawiera następujące wartości kolorów motywu:
Background1, Background2, Text1, and Text2.
Jednak Presentation::getMasterTheme()::getColorScheme() zwraca ColorScheme, które udostępnia odpowiadające kolory jako:
Dark1, Dark2, Light1, and Light2.
Różnica dotyczy wyłącznie nazewnictwa. Wartości odnoszą się do tych samych slotów kolorów motywu, a mapowanie jest stałe:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
Nie ma dynamicznej konwersji między Text/Background a Dark/Light. Są to po prostu alternatywne nazwy tych samych kolorów motywu.
Różnica w nazewnictwie pochodzi z terminologii Microsoft Office. Starsze wersje Office używały Dark 1, Light 1, Dark 2 i Light 2, natomiast nowsze wersje interfejsu wyświetlają te same sloty jako Text 1, Background 1, Text 2 i Background 2.
Zmień czcionkę motywu
Aby umożliwić wybór czcionek dla motywów i innych celów, Aspose.Slides używa następujących specjalnych identyfikatorów (podobnych do tych używanych w PowerPoint):
- +mn-lt - Czcionka ciała (łacińska) (Minor Latin Font)
- +mj-lt - Czcionka tytułu (łacińska) (Major Latin Font)
- +mn-ea - Czcionka ciała (azjatycka) (Minor East Asian Font)
- +mj-ea - Czcionka ciała (azjatycka) (Major East Asian Font)
Ten kod PHP pokazuje, jak przypisać czcionkę łacińską do elementu motywu:
$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"));
Ten kod PHP pokazuje, jak zmienić czcionkę motywu prezentacji:
$pres->getMasterTheme()->getFontScheme()->getMinor()->setLatinFont(new FontData("Arial"));
Czcionka we wszystkich polach tekstowych zostanie zaktualizowana.
TIP
You may want to see PowerPoint fonts.Zmień styl tła motywu
Domyślnie aplikacja PowerPoint udostępnia 12 wstępnie zdefiniowanych teł, ale w typowej prezentacji zapisane są tylko 3 z tych 12 teł.

Na przykład po zapisaniu prezentacji w aplikacji PowerPoint możesz uruchomić ten kod PHP, aby dowiedzieć się, ile wstępnie zdefiniowanych teł znajduje się w prezentacji:
$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();
}
}
Korzystając z właściwości BackgroundFillStyles klasy FormatScheme, możesz dodać lub uzyskać dostęp do stylu tła w motywie PowerPoint.
$pres->getMasters()->get_Item(0)->getBackground()->setStyleIndex(2);
Poradnik indeksu: 0 oznacza brak wypełnienia. Indeks zaczyna się od 1.
TIP
You may want to see PowerPoint Background.Zmień efekt motywu
Motyw PowerPoint zazwyczaj zawiera 3 wartości dla każdej tablicy stylów. Tablice te są łączone w te 3 efekty: subtelny, umiarkowany i intensywny. Na przykład, oto wynik zastosowania efektów do konkretnego kształtu:

Korzystając z 3 właściwości (FillStyles, LineStyles, EffectStyles) klasy FormatScheme możesz zmieniać elementy w motywie (jeszcze bardziej elastycznie niż opcje w PowerPoint).
$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();
}
}
Powstałe zmiany w kolorze wypełnienia, typie wypełnienia, efekcie cienia itp:

FAQ
Czy mogę zastosować motyw do pojedynczego slajdu bez zmiany mastera?
Tak. Aspose.Slides obsługuje nadpisywanie motywu na poziomie slajdu, więc możesz zastosować lokalny motyw tylko do tego slajdu, zachowując niezmieniony motyw główny (poprzez SlideThemeManager).
Jaki jest najbezpieczniejszy sposób przeniesienia motywu z jednej prezentacji do drugiej?
Klonuj slajdy wraz z ich masterem do docelowej prezentacji. Dzięki temu zachowany zostaje oryginalny master, układy i powiązany motyw, tak aby wygląd pozostał spójny.
Jak mogę zobaczyć „efektywne” wartości po całym dziedziczeniu i nadpisaniach?
Użyj widoków „efektywnych” API [/slides/pl/php-java/shape-effective-properties/] dla motywu/koloru/czcionki/efektu. Zwracają one rozwiązane, ostateczne właściwości po zastosowaniu mastera oraz ewentualnych lokalnych nadpisań.