Hantera presentationsteman i Java
Introduktion
Ett presentationstema definierar en koordinerad samling av färger, teckensnitt, bakgrundsstilar, fyllningar, linjer och effekter. Temamedvetna objekt refererar till dessa delade definitioner i stället för att lagra varje visuellt egenskap som ett fast värde, så en temaväxling kan uppdatera många objekt samtidigt.
I Aspose.Slides finns presentationsnivåns tema tillgängligt via Presentation.getMasterTheme. En presentation kan också innehålla temaunderskott på lägre nivåer. En master kan åsidosätta presentations‑temat via MasterThemeManager.getOverrideTheme, medan en layout eller en enskild bild kan åsidosätta det ärvda temat via BaseOverrideThemeManager.getOverrideTheme. I praktiken löses det effektiva temat för en bild upp genom denna arvskedja: presentations‑tema, master‑åsidosättning, layout‑åsidosättning och bild‑åsidosättning.

Avsnitten nedan visar de vanligaste temaarbetsflödena: inspektera ett tema, ändra färger och teckensnitt, kopiera eller tillämpa ett tema, uppdatera bakgrunds‑ och effektstilar samt läsa effektiva värden efter att arv och åsidosättningar har lösts.
Inspektera ett tema
MasterTheme‑objektet exponerar temats färgschema, teckensnittsschema och formatschema via MasterTheme.getColorScheme, MasterTheme.getFontScheme och MasterTheme.getFormatScheme. Att inspektera dessa samlingar innan de ändras är särskilt användbart när en presentation kommer från en extern källa eftersom antalet och innehållet i stilposter kan variera.
Följande exempel läser huvudtemats egenskaper och rapporterar hur många bakgrunds‑, fyllnings‑, linje‑ och effekstilar som lagras i temat:
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
IMasterTheme theme = presentation.getMasterTheme();
System.out.println("Theme name: " + theme.getName());
System.out.println("Accent 1: " + theme.getColorScheme().getAccent1().getColor());
System.out.println("Major Latin font: " + theme.getFontScheme().getMajor().getLatinFont().getFontName());
System.out.println("Minor Latin font: " + theme.getFontScheme().getMinor().getLatinFont().getFontName());
System.out.println("Background fill styles: " + theme.getFormatScheme().getBackgroundFillStyles().size());
System.out.println("Fill styles: " + theme.getFormatScheme().getFillStyles().size());
System.out.println("Line styles: " + theme.getFormatScheme().getLineStyles().size());
System.out.println("Effect styles: " + theme.getFormatScheme().getEffectStyles().size());
} finally {
presentation.dispose();
}
Om en fil använder flera masterbilder, anta inte att varje bild har samma effektiva tema. Inspektera den master som är associerad med bilden, och använd arbetsflödet för effektiva teman som visas senare i artikeln när layout‑ eller bild‑åsidosättningar kan finnas.
Ändra temafärger
Temamedvetna fyllningar, linjer och text kan referera till en logisk färg från SchemeColor-enumerationen. När du ändrar motsvarande post i IColorScheme, så löses alla objekt som fortfarande refererar till den temafärgen mot det nya värdet. Objekt som använder en direkt RGB‑färg ändras inte av en temafärgsuppdatering.
Följande end‑to‑end‑exempel skapar en form som använder Accent4, ändrar temats Accent4‑färg till röd, sparar presentationen, öppnar den igen och skriver ut den effektiva fyllningsfärgen:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 100);
shape.getFillFormat().setFillType(FillType.Solid);
shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
presentation.getMasterTheme().getColorScheme().getAccent4().setColor(Color.RED);
presentation.save("theme-color.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Presentation savedPresentation = new Presentation("theme-color.pptx");
try {
ISlide savedSlide = savedPresentation.getSlides().get_Item(0);
IShape savedShape = savedSlide.getShapes().get_Item(0);
IFillFormatEffectiveData effectiveFill = savedShape.getFillFormat().getEffective();
System.out.println("Effective fill color: " + effectiveFill.getSolidFillColor());
} finally {
savedPresentation.dispose();
}
Eftersom rektangeln fortfarande är länkad till Accent4 blir dess synliga färg röd efter att temat har ändrats. Om du ersätter schemafärgen med en direkt färg på formen kommer senare förändringar av Accent4 inte längre att påverka den fyllningen.
Använd färger från den extra paletten
PowerPoint hämtar ljusare och mörkare varianter från en temafärg genom att tillämpa färgtransformationer. Aspose.Slides exponerar dessa transformationer via ColorTransformOperation-enumerationen.

1 – Huvudtema färger.
2 – Ljusare och mörkare varianter som produceras från huvudtema färgerna.
Följande exempel skapar sex rektanglar baserade på Accent4, applicerar luminans‑transformationer på fem av dem och sparar resultatet:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 50, 50);
shape1.getFillFormat().setFillType(FillType.Solid);
shape1.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
IShape 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.2f);
shape2.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.8f);
IShape 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.4f);
shape3.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.6f);
IShape 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.6f);
shape4.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.4f);
IShape 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.75f);
IShape 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.5f);
presentation.save("theme-color-palette.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Dessa varianter förblir baserade på temafärgen. Om Accent4 ändras senare räknas de transformerade färgerna om från det nya Accent4‑värdet.
Mappa SchemeColor‑värden till IColorScheme‑platser
SchemeColor-enumerationen använder Text1, Background1, Text2 och Background2, medan IColorScheme exponerar samma temaslots som Dark1, Light1, Dark2 och Light2. Mappningen är fast:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
Detta är alternativa namn för samma temaslots; de är inte värden som konverteras dynamiskt från en form till en annan.
Ändra temateckensnitt
Ett temateckensnittsschema innehåller en huvudteckensnittssamling för rubriker och en mindre teckensnittssamling för brödtext. Metoderna IFontScheme.getMajor och IFontScheme.getMinor exponerar dessa samlingar.
PowerPoint‑kompatibla temateckensnittsidenterare kan användas i textformatering:
+mn-lt– Body Font Latin (Minor Latin Font)+mj-lt– Heading Font Latin (Major Latin Font)+mn-ea– Body Font East Asian (Minor East Asian Font)+mj-ea– Heading Font East Asian (Major East Asian Font)
Följande exempel skapar en rubrik som använder det stora latinska temateckensnittet och en brödtextsrad som använder det lilla latinska temateckensnittet. Därefter ändras temateckensnitten och resultatet sparas:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape heading = slide.getShapes().addAutoShape(ShapeType.Rectangle, 40, 40, 500, 60);
heading.getTextFrame().setText("Theme heading");
heading.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setLatinFont(new FontData("+mj-lt"));
IAutoShape body = slide.getShapes().addAutoShape(ShapeType.Rectangle, 40, 120, 500, 60);
body.getTextFrame().setText("Theme body text");
body.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setLatinFont(new FontData("+mn-lt"));
presentation.getMasterTheme().getFontScheme().getMajor().setLatinFont(new FontData("Aptos Display"));
presentation.getMasterTheme().getFontScheme().getMinor().setLatinFont(new FontData("Arial"));
presentation.save("theme-fonts.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Rubriken följer det stora teckensnittet och brödtexten följer det lilla teckensnittet. Text som har ett explicit teckensnittsnamn i stället för ett temaid‑identifierare byter inte automatiskt när temateckensnittsschemat ändras.
De stora och små teckensnittssamlingarna kan också innehålla teckensnittskartläggningar för enskilda skriftsystem, såsom kyrilliska, arabiska, japanska, georgiska och thaana. För att inspektera, lägga till, ersätta eller ta bort dessa kartläggningar, se Script‑Specific Theme Fonts.
Tip
För mer information om presentations‑typsnitt, se PowerPoint Fonts.Kopiera eller tillämpa ett tema
Arbetsflödena nedan löser olika temarelaterade problem.
Tillämpa ett externt tema på en masters beroende bilder
Använd IMasterSlide.applyExternalThemeToDependingSlides när du har en PowerPoint‑temafil (.thmx) och vill omstyla varje bild som beror på en viss master. Välj master från Presentation.getMasters-samlingen, som implementerar IMasterSlideCollection, och skicka temafilens sökväg till metoden.
Metoden utför följande steg:
- Skapar en ny masterbild baserad på den valda mastern.
- Tillämpar det externa temat på den nya mastern.
- Tilldelar den nya mastern till alla bilder som tidigare berodde på den valda mastern.
- Returnerar den nyss skapade IMasterSlide.
Följande exempel tillämpar ett externt tema på de bilder som beror på den första mastern och sparar presentationen:
import com.aspose.slides.*;
Presentation presentation = new Presentation("presentation.pptx");
try {
IMasterSlide selectedMaster = presentation.getMasters().get_Item(0);
IMasterSlide themedMaster = selectedMaster.applyExternalThemeToDependingSlides("corporate-theme.thmx");
System.out.println("Created master: " + themedMaster.getName());
presentation.save("presentation-with-external-theme.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ett ogiltigt, korrupt eller ej‑stött tema kan orsaka PptxReadException. Validera sökvägar som anges av användare, hantera fel vid filsystemsåtkomst och spara presentationen först efter att temat har applicerats korrekt.
Endast de bilder som berodde på den valda mastern omfördelas. Bilder som är kopplade till andra masterbilder behåller sina befintliga masterbilder och teman. Temamedvetna färger, teckensnitt, fyllningar, linjer, bakgrunder och effekter löses mot det externa temat. Direkt tilldelade färger, teckensnitt, fyllningar och annan explicit formatering kan förbli oförändrade. Åsidosättningar på layout‑ och bildnivå kan också ha företräde framför värden som ärvts från den nya mastern.
Temat kan referera till teckensnitt som inte är tillgängliga i körningsmiljön. För konsekvent rendering och export, installera de nödvändiga teckensnitten, tillhandahåll dem via custom font sources, eller konfigurera font substitution.
Detta är ett direkt master‑nivå‑arbetsflöde: metoden accepterar en filsökväg till en .thmx‑fil och kräver inte att du manuellt skapar temåsidosättningar på bild‑ eller layoutnivå.
Warning
Ett felaktigt, korrupt eller ej‑stött tema kan leda till PptxReadException. Validera sökvägar som anges av användare, hantera fel vid filsystemsåtkomst och spara presentationen först efter att temat har applicerats korrekt.Tip
Endast de bilder som berodde på den valda mastern omfördelas. Bilder kopplade till andra masterbilder behåller sina befintliga masterbilder och teman.Tillämpa olika externa teman i en presentation med flera masterbilder
När den relevanta mastern inte är känd i förväg, hämta den från en representativ bild via ISlide.getLayoutSlide och ILayoutSlide.getMasterSlide. Spara de ursprungliga master‑referenserna innan du tillämpar några teman eftersom varje anrop skapar en ny master i presentationen.
Följande exempel använder bilder från två sektioner för att lokalisera deras masterbilder och tillämpar ett annat externt tema på varje grupp:
import com.aspose.slides.*;
Presentation presentation = new Presentation("multi-master-presentation.pptx");
try {
if (presentation.getSlides().size() < 5) {
System.out.println("The presentation does not contain the expected representative slides.");
} else {
IMasterSlide firstGroupMaster = presentation.getSlides().get_Item(0).getLayoutSlide().getMasterSlide();
IMasterSlide secondGroupMaster = presentation.getSlides().get_Item(4).getLayoutSlide().getMasterSlide();
if (firstGroupMaster.getSlideId() == secondGroupMaster.getSlideId()) {
System.out.println("The representative slides use the same master.");
} else {
IMasterSlide firstThemedMaster = firstGroupMaster.applyExternalThemeToDependingSlides("blue-theme.thmx");
IMasterSlide secondThemedMaster = secondGroupMaster.applyExternalThemeToDependingSlides("green-theme.thmx");
System.out.println("First themed master: " + firstThemedMaster.getName());
System.out.println("Second themed master: " + secondThemedMaster.getName());
presentation.save("multi-master-with-external-themes.pptx", SaveFormat.Pptx);
}
}
} finally {
presentation.dispose();
}
Det första anropet påverkar endast de bilder som berodde på firstGroupMaster, och det andra anropet påverkar endast de bilder som berodde på secondGroupMaster. Bilder som tillhör någon annan master omstylingas inte.
Bevara ett källt tema vid flytt av bilder
Om du vill flytta en bild till en annan presentation och bevara dess ursprungliga design, klona källmastern till mål‑presentationen med IMasterSlideCollection.addClone, klona sedan bilden med ISlideCollection.addClone och den klonade mastern. Detta för med sig mastern, dess layouter och det associerade temat tillsammans.
import com.aspose.slides.*;
Presentation source = new Presentation("source-theme.pptx");
try {
Presentation target = new Presentation("target.pptx");
try {
ISlide sourceSlide = source.getSlides().get_Item(0);
IMasterSlide sourceMaster = sourceSlide.getLayoutSlide().getMasterSlide();
IMasterSlide clonedMaster = target.getMasters().addClone(sourceMaster);
target.getSlides().addClone(sourceSlide, clonedMaster, true);
target.save("theme-preserved.pptx", SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Detta är det föredragna arbetsflödet när källbilden måste se likadan ut i destinationen. Att bara klona innehåll till en orelaterad destinations‑master kan förändra temadrivna färger, teckensnitt, bakgrunder och effekter.
Tillämpa temavärden på en befintlig bild
Om mål‑bilden ska behålla sin nuvarande master och layout, initiera en bild‑nivå‑åsåiderättning från källtemat. Metoderna OverrideTheme.initColorSchemeFrom, OverrideTheme.initFontSchemeFrom och OverrideTheme.initFormatSchemeFrom kopierar de tre huvudtemakomponenterna till åsidosättningen.
import com.aspose.slides.*;
Presentation source = new Presentation("source-theme.pptx");
try {
Presentation target = new Presentation("target.pptx");
try {
ISlide targetSlide = presentation.getSlides().get_Item(0);
IOverrideTheme overrideTheme = targetSlide.getThemeManager().getOverrideTheme();
overrideTheme.initColorSchemeFrom(source.getMasterTheme().getColorScheme());
overrideTheme.initFontSchemeFrom(source.getMasterTheme().getFontScheme());
overrideTheme.initFormatSchemeFrom(source.getMasterTheme().getFormatScheme());
target.save("theme-applied-to-slide.pptx", SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Detta ändrar temat som används av den bilden utan att ändra temat som ärvs av andra bilder. För att ta bort den lokala åsåiderättningen och återgå till ärvda värden, anropa OverrideTheme.clear.
Tillämpa ett temaunderlag på en layout
En layout‑nivå‑åsåiderättning gäller för bilder som använder den layouten, såvida inte en specifik bild har sin egen åsåiderättning. Samma initieringsmetoder kan användas via LayoutSlideThemeManager:
import com.aspose.slides.*;
Presentation source = new Presentation("source-theme.pptx");
try {
Presentation target = new Presentation("target.pptx");
try {
ISlide targetSlide = presentation.getSlides().get_Item(0);
ILayoutSlide targetLayout = targetSlide.getLayoutSlide();
IOverrideTheme overrideTheme = targetLayout.getThemeManager().getOverrideTheme();
overrideTheme.initColorSchemeFrom(source.getMasterTheme().getColorScheme());
overrideTheme.initFontSchemeFrom(source.getMasterTheme().getFontScheme());
overrideTheme.initFormatSchemeFrom(source.getMasterTheme().getFormatScheme());
target.save("theme-applied-to-layout.pptx", SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Använd ett master‑ eller presentations‑tema när många layouter och bilder ska dela samma grunddesign, en layout‑åsåiderättning när en layoutfamilj behöver annan stil, och en bild‑åsåiderättning endast för verkliga undantag. Överdrivna bild‑åsåiderättningar gör senare globala temaväxlingar svårare att förutsäga.
Uppdatera temats bakgrundsstilar
Temats bakgrundsfyllningar lagras i IFormatScheme.getBackgroundFillStyles. PowerPoint kan presentera fler bakgrundsalternativ i sitt UI än antalet fyllningsdefinitioner som fysiskt lagras i denna samling eftersom UI kan kombinera temafyllningar med temafärger och andra stilreferenser.

Innan du använder en bakgrundsstil, inspektera den lagrade samlingen och den aktuella Background.getStyleIndex. En stil‑index på 0 betyder ingen temafyllning; positiva värden är temabakgrund‑stilreferenser. Detta skiljer sig från indexering av Java‑samlingen direkt, där get_Item(0) betyder det första lagrade objektet. Anta inte att varje presentation innehåller samma antal bakgrundsfyllningsstilar.
Följande exempel rapporterar antalet tillgängliga bakgrundsfyllningar, tilldelar en temabakgrundsreferens till den första mastern och sparar presentationen:
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
IFillFormatCollection backgroundStyles = presentation.getMasterTheme().getFormatScheme().getBackgroundFillStyles();
System.out.println("Background fill styles: " + backgroundStyles.size());
if (backgroundStyles.size() == 0) {
throw new IllegalStateException("The presentation theme does not contain background fill styles.");
}
IMasterSlide masterSlide = presentation.getMasters().get_Item(0);
masterSlide.getBackground().setType(BackgroundType.Themed);
masterSlide.getBackground().setStyleIndex(1);
presentation.save("theme-background.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Det synliga resultatet beror på den temapost som refereras av mastern och på eventuella bakgrunds‑åsåiderättningar på layout‑ eller bildnivå. Om en bild använder sin egen bakgrund, kanske en förändring av enbart master‑bakgrunden inte påverkar den bilden. Använd Background.getEffective när du behöver veta den slutgiltiga bakgrunden efter att arv har tillämpats.
Warning
Behandla inte stil‑indexet som ett noll‑baserat samlingsindex. Undvik också att hårdkoda ett stilnummer från en fil och anta att det har samma utseende i en annan fil; temastildefinitioner är presentationsspecifika.Tip
För direkt bakgrundsformatering och bakgrundsarv, se Presentation Background.Uppdatera temaeffekter
Ett temaförmåga‑schema innehåller separata samlingar för fyllnings‑, linje‑ och effektstilar som exponeras via IFormatScheme.getFillStyles, IFormatScheme.getLineStyles och IFormatScheme.getEffectStyles. Vanliga Office‑teman innehåller ofta tre huvudsakliga stilposter som visuellt motsvarar subtil, måttlig och intensiv formatering, men kod bör inspektera varje samling i stället för att anta ett fast antal.

När du åtkommer till dessa samlingar i Java är samlingsindexet noll‑baserat: get_Item(0) är den första lagrade stilen och get_Item(2) är den tredje. En forms stil‑referensindex är ett separat koncept, exponerat via IShapeStyle. Att modifiera en temastil påverkar former som refererar till den temastilen; former med direkt formatering kan förbli oförändrade.
Följande exempel kontrollerar att de nödvändiga stilposterna finns, ändrar den första linjestilen, ändrar den tredje fyllningsstilen, aktiverar en yttre skugga i den tredje effektstilen och sparar resultatet:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation("Subtle_Moderate_Intense.pptx");
try {
IFormatScheme formatScheme = presentation.getMasterTheme().getFormatScheme();
if (formatScheme.getLineStyles().size() < 1 || formatScheme.getFillStyles().size() < 3 || formatScheme.getEffectStyles().size() < 3) {
throw new IllegalStateException("The theme does not contain the style entries required by this example.");
}
formatScheme.getLineStyles().get_Item(0).getFillFormat().setFillType(FillType.Solid);
formatScheme.getLineStyles().get_Item(0).getFillFormat().getSolidFillColor().setColor(Color.RED);
formatScheme.getFillStyles().get_Item(2).setFillType(FillType.Solid);
formatScheme.getFillStyles().get_Item(2).getSolidFillColor().setColor(new Color(34, 139, 34));
IEffectFormat effectFormat = formatScheme.getEffectStyles().get_Item(2).getEffectFormat();
effectFormat.enableOuterShadowEffect();
effectFormat.getOuterShadowEffect().setDistance(10f);
presentation.save("theme-effects.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
För former som refererar till dessa platser blir den första temalinjestilen röd, den tredje temafyllningsstilen blir solid skoggrön, och den tredje effektstilen får en yttre skugga med ett avstånd på 10 punkter. Det exakta visuella resultatet beror fortfarande på vilka stil‑platser varje form refererar till och om direkt formatering åsåiderättar temat.

Bestäm om en effektiv solid fyllning använder en temafärg
En fyllning kan lagras direkt på ett objekt eller ärvas från ett stycke, en layout, en master, ett temastil eller en annan formateringsnivå. Anropa IFillFormat.getEffective för att lösa den hierarkin till en oföränderlig IFillFormatEffectiveData. Kontrollera först IFillFormatEffectiveData.getFillType. Endast när den är FillType.Solid bör du läsa egenskaperna för solid‑fyllning.
För en solid fyllning returnerar IFillFormatEffectiveData.getSolidFillColor det slutgiltiga renderade RGB‑värdet efter arv, temauppslagning och färgtransformationer. IFillFormatEffectiveData.getSolidFillSchemeColor returnerar den motsvarande logiska SchemeColor-platsen, såsom Text1 eller Accent6. Ett värde SchemeColor.NotDefined betyder att den effektiva solida fyllningen inte baseras på en schemabetingad färg. I ett arbetsflöde där fyllningar antingen är temafärger eller direkta RGB‑färger identifierar detta värde en direkt RGB‑fyllning.
Använd inte det lokala IColorFormat.getSchemeColor‑värdet ensamt för att klassificera en fyllning. Till exempel kan en textdel sakna lokalt definierad schemafärg, så dess lokala värde är NotDefined, medan dess effektiva fyllning ärvs från ett temafärg och löser till Text1 eller Accent6. Omvänt visar getSolidFillSchemeColor vilken logisk temaslot som producerade den effektiva färgen, men den säger inte om den slottens källa kommer från objektet, stycket, layouten, mastern eller en annan nivå i formateringshierarkin.
Följande exempel laddar en presentation, granskar både form‑fyllningar och text‑del‑fyllningar, skriver ut varje slutgiltigt RGB‑värde och tillhörande schemafärg, och flaggar solida fyllningar som inte kommer spåra temafärg‑ändringar:
import com.aspose.slides.*;
import java.awt.Color;
import java.util.function.BiConsumer;
BiConsumer<String, IFillFormat> auditFill = (objectName, localFill) -> {
IFillFormatEffectiveData effectiveFill = localFill.getEffective();
if (effectiveFill.getFillType() != FillType.Solid) {
System.out.println(objectName + ": fill type = " + effectiveFill.getFillType() + "; not a solid fill.");
return;
}
Color rgb = effectiveFill.getSolidFillColor();
int effectiveSchemeColor = effectiveFill.getSolidFillSchemeColor();
int localSchemeColor = localFill.getSolidFillColor().getSchemeColor();
System.out.printf("%s: RGB = #%02X%02X%02X%n", objectName, rgb.getRed(), rgb.getGreen(), rgb.getBlue());
System.out.println(objectName + ": local scheme = " + localSchemeColor + ", effective scheme = " + effectiveSchemeColor);
if (effectiveSchemeColor == SchemeColor.NotDefined) {
System.out.println(objectName + ": direct RGB or another non-scheme fill; audit as theme-independent.");
} else {
System.out.println(objectName + ": theme-dependent through " + effectiveSchemeColor + ".");
}
};
Presentation presentation = new Presentation("input.pptx");
try {
int slideCount = presentation.getSlides().size();
for (int slideIndex = 0; slideIndex < slideCount; slideIndex++) {
ISlide slide = presentation.getSlides().get_Item(slideIndex);
int shapeCount = slide.getShapes().size();
for (int shapeIndex = 0; shapeIndex < shapeCount; shapeIndex++) {
IShape shape = slide.getShapes().get_Item(shapeIndex);
String shapeName = "Slide " + (slideIndex + 1) + ", shape " + (shapeIndex + 1);
auditFill.accept(shapeName, shape.getFillFormat());
if (shape instanceof IAutoShape) {
IAutoShape autoShape = (IAutoShape) shape;
int paragraphCount = autoShape.getTextFrame().getParagraphs().getCount();
for (int paragraphIndex = 0; paragraphIndex < paragraphCount; paragraphIndex++) {
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(paragraphIndex);
int portionCount = paragraph.getPortions().getCount();
for (int portionIndex = 0; portionIndex < portionCount; portionIndex++) {
IPortion portion = paragraph.getPortions().get_Item(portionIndex);
String portionName = shapeName + ", paragraph " + (paragraphIndex + 1) + ", portion " + (portionIndex + 1);
auditFill.accept(portionName, portion.getPortionFormat().getFillFormat());
}
}
}
}
}
} finally {
presentation.dispose();
}
Grenen NotDefined ger en granskningslista över solida fyllningar som inte kommer reagera på förändringar i temafärgs‑slottar. Granska dessa objekt när en presentation måste följa en ny varumärkespalett. Det rapporterade RGB‑värdet visar fortfarande den aktuella visuella utseendet, medan schemavärdet förklarar om det är kopplat till temat.
Effektiva‑format‑objekt är ögonblicksbilder. Efter att presentations‑temat, en temaundersättning eller någon ärvd formatering har ändrats, anropa getEffective igen och läs ett nytt IFillFormatEffectiveData‑objekt innan du jämför eller rapporterar färger.
Läs effektiva temavärden
Råa temaobjekt visar vad som är definierat på en viss nivå. Effektiva värden visar vad en bild eller form faktiskt använder efter att arv och lokala åsåiderättningar lösts. För en bild, anropa BaseOverrideThemeManager.createThemeEffective. För en bakgrund, använd Background.getEffective, och för en fyllning, använd FillFormat.getEffective.
Följande exempel läser det effektiva temat, bakgrunden och den första formens fyllning från en bild:
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IThemeEffectiveData effectiveTheme = slide.getThemeManager().createThemeEffective();
IBackgroundEffectiveData effectiveBackground = slide.getBackground().getEffective();
System.out.println("Effective major Latin font: " + effectiveTheme.getFontScheme().getMajor().getLatinFont().getFontName());
System.out.println("Effective minor Latin font: " + effectiveTheme.getFontScheme().getMinor().getLatinFont().getFontName());
System.out.println("Effective background fill type: " + effectiveBackground.getFillFormat().getFillType());
if (slide.getShapes().size() > 0) {
IFillFormatEffectiveData effectiveFill = slide.getShapes().get_Item(0).getFillFormat().getEffective();
System.out.println("First shape effective fill type: " + effectiveFill.getFillType());
if (effectiveFill.getFillType() == FillType.Solid) {
System.out.println("First shape effective fill color: " + effectiveFill.getSolidFillColor());
}
}
} finally {
presentation.dispose();
}
Använd effektiva data för renderingsdiagnostik, validering och jämförelser. Om du bara inspekterar Presentation.getMasterTheme, kan du missa en master‑, layout‑, bild‑ eller form‑åsåiderättning som förändrar det slutgiltiga utseendet.
FAQ
Påverkar tillämpning av ett externt tema varje bild i presentationen?
Nej. IMasterSlide.applyExternalThemeToDependingSlides omfördelar endast de bilder som beror på den valda mastern. Bilder som använder andra master behåller sina befintliga teman.
Kan jag tillämpa ett tema på en enskild bild utan att ändra master?
Ja. Använd bildens SlideThemeManager och initiera dess åsåiderättning. Ändringen förblir lokal för den bilden; andra bilder fortsätter att ärva sina befintliga teman.
Vad är det säkraste sättet att föra ett tema från en presentation till en annan?
När du flyttar en bild och vill bevara dess källutseende, klona käll‑mastern till måldestinationen och klona bilden med den mastern med IMasterSlideCollection.addClone och ISlideCollection.addClone. Detta behåller master, layouter och tema tillsammans.
Hur kan jag se de effektiva värdena efter arv och åsåiderättningar?
Använd BaseOverrideThemeManager.createThemeEffective för en bild‑ eller layout‑tema och motsvarande effektiva‑datametoder för formatobjekt såsom Background.getEffective och FillFormat.getEffective. Dessa API‑er returnerar de lösta värdena efter att arv och åsåiderättningar har applicerats.