Prezentációs témák kezelése JavaScript-ben
Bevezetés
A prezentáció témája egy koordinált színek, betűtípusok, háttérstílusok, kitöltések, vonalak és effektusok halmazát határozza meg. A témaérzékeny objektumok ezekre a megosztott definíciókra hivatkoznak ahelyett, hogy minden vizuális tulajdonságot rögzített értékként tárolnának, így egy téma módosítása egyszerre sok objektumot frissíthet.
Az Aspose.Slides-ben a prezentációszintű téma elérhető a Presentation.getMasterTheme segítségével. A prezentáció alacsonyabb szinteken is tartalmazhat téma-átbírálásokat. Egy master a MasterThemeManager.getOverrideTheme segítségével felülbírálhatja a prezentáció témáját, míg egy elrendezés vagy egy egyedi dia a BaseOverrideThemeManager.getOverrideTheme segítségével felülbírálhatja a örökölt témát. Gyakorlatban egy dia hatékony témája ezen öröklési láncon keresztül kerül feloldásra: prezentációs téma, master felülbírálás, elrendezés felülbírálás és dia felülbírálás.

Az alábbi szakaszok a leggyakoribb téma-munkafolyamatokat mutatják be: téma ellenőrzése, színek és betűtípusok módosítása, téma másolása vagy alkalmazása, háttér- és effektusstílusok frissítése, valamint az öröklődés és felülbírálások után feloldott hatékony értékek olvasása.
Téma ellenőrzése
A MasterTheme objektum a téma színsémáját, betűtípus-sémáját és formátumsémáját a MasterTheme.getColorScheme, MasterTheme.getFontScheme és MasterTheme.getFormatScheme segítségével teszi elérhetővé. Ezeknek a gyűjteményeknek a megtekintése a módosítás előtt különösen hasznos, ha a prezentáció külső forrásból származik, mivel a stílusbejegyzések száma és tartalma eltérő lehet.
Az alábbi példa beolvassa a fő téma tulajdonságait, és jelentést készít arról, hogy hány háttér-, kitöltés-, vonal- és effektusstílus van tárolva a témában:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const theme = presentation.getMasterTheme();
console.log("Theme name: " + theme.getName());
console.log("Accent 1: " + theme.getColorScheme().getAccent1().getColor());
console.log("Major Latin font: " + theme.getFontScheme().getMajor().getLatinFont().getFontName());
console.log("Minor Latin font: " + theme.getFontScheme().getMinor().getLatinFont().getFontName());
console.log("Background fill styles: " + theme.getFormatScheme().getBackgroundFillStyles().size());
console.log("Fill styles: " + theme.getFormatScheme().getFillStyles().size());
console.log("Line styles: " + theme.getFormatScheme().getLineStyles().size());
console.log("Effect styles: " + theme.getFormatScheme().getEffectStyles().size());
} finally {
presentation.dispose();
}
Ha egy fájl több masterrel rendelkezik, ne feltételezze, hogy minden diának azonos hatékony témája van. Ellenőrizze a diával kapcsolatos mastert, és használja a később ebben a cikkben bemutatott hatékony téma-munkafolyamatot, ha elrendezési vagy diaszintű felülbírálások lehetnek jelen.
Téma színeinek módosítása
A témaérzékeny kitöltések, vonalak és szöveg hivatkozhat egy logikai színre a SchemeColor felsorolásból. Amikor a megfelelő bejegyzést módosítja a ColorScheme-ben, minden továbbra is arra a téma színre hivatkozó objektum az új érték szerint kerül feloldásra. Azok az objektumok, amelyek közvetlen RGB-színt használnak, nem változnak meg a témaszín frissítésekor.
Az alábbi végponttól‑végpontig tartó példa létrehoz egy alakzatot, amely a Accent4‑et használja, a téma Accent4 színét pirosra változtatja, menti a prezentációt, újra megnyitja, és kiírja a hatékony kitöltőszínt:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 10, 100, 100);
shape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
presentation.getMasterTheme().getColorScheme().getAccent4().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
presentation.save("theme-color.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
const savedPresentation = new aspose.slides.Presentation("theme-color.pptx");
try {
const savedSlide = savedPresentation.getSlides().get_Item(0);
const savedShape = savedSlide.getShapes().get_Item(0);
const effectiveFill = savedShape.getFillFormat().getEffective();
console.log("Effective fill color: " + effectiveFill.getSolidFillColor());
} finally {
savedPresentation.dispose();
}
Mivel a téglalap továbbra is a Accent4‑hez van kapcsolva, a látható színe a téma módosítása után piros lesz. Ha a séma színt közvetlen színre cseréli az alakzaton, a későbbi Accent4 módosítások már nem befolyásolják azt a kitöltést.
Színek használata a kiegészítő palettáról
A PowerPoint a téma színéből alkalmazott színtranszformációk segítségével hoz létre világosabb és sötétebb változatokat. Az Aspose.Slides ezeket a transzformációkat a ColorTransformOperation felsorolással teszi elérhetővé.

1 – Fő téma színek.
2 – A fő téma színekből előállított világosabb és sötétebb változatok.
Az alábbi példa hat téglalapot hoz létre a Accent4 alapjául, ötön luminancia‑transzformációkat alkalmaz, és elmenti az eredményt:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const shape1 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 10, 50, 50);
shape1.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape1.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
const shape2 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 70, 50, 50);
shape2.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape2.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape2.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.2));
shape2.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.AddLuminance, java.newFloat(0.8));
const shape3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 130, 50, 50);
shape3.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape3.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape3.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.4));
shape3.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.AddLuminance, java.newFloat(0.6));
const shape4 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 190, 50, 50);
shape4.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape4.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape4.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.6));
shape4.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.AddLuminance, java.newFloat(0.4));
const shape5 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 250, 50, 50);
shape5.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape5.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape5.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.75));
const shape6 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 310, 50, 50);
shape6.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
shape6.getFillFormat().getSolidFillColor().setSchemeColor(aspose.slides.SchemeColor.Accent4);
shape6.getFillFormat().getSolidFillColor().getColorTransform().add(aspose.slides.ColorTransformOperation.MultiplyLuminance, java.newFloat(0.5));
presentation.save("theme-color-palette.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ezek a változatok a téma színén alapulnak. Ha a Accent4 később megváltozik, a transzformált színek újra lesznek számítva az új Accent4 értékből.
SchemeColor értékek leképezése a ColorScheme helyekre
A SchemeColor felsorolás a Text1, Background1, Text2 és Background2 értékeket használja, míg a ColorScheme ugyanazokat a témahelyeket Dark1, Light1, Dark2 és Light2 néven teszi közzé. A leképezés fix:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
Ezek ugyanazon témahelyek alternatív nevei; nem dinamikusan átalakított értékek.
Téma betűtípusainak módosítása
A téma betűtípus‑sémája egy fő betűtípus‑készletet tartalmaz a címsorokhoz és egy mellék betűtípus‑készletet a törzsszöveghez. A FontScheme.getMajor és a FontScheme.getMinor metódusok ezeket a készleteket teszik elérhetővé.
A PowerPoint‑kompatibilis téma betűtípus‑azonosítók a szövegformázásban használhatók:
+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)
Az alábbi példa létrehoz egy címsort, amely a fő latin téma betűtípust használja, és egy törzssort, amely a mellék latin téma betűtípust használja. Ezután megváltoztatja a téma betűtípusait, és elmenti az eredményt:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const heading = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 40, 40, 500, 60);
heading.getTextFrame().setText("Theme heading");
heading.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setLatinFont(new aspose.slides.FontData("+mj-lt"));
const body = slide.getShapes().addAutoShape(aspose.slides.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 aspose.slides.FontData("+mn-lt"));
presentation.getMasterTheme().getFontScheme().getMajor().setLatinFont(new aspose.slides.FontData("Aptos Display"));
presentation.getMasterTheme().getFontScheme().getMinor().setLatinFont(new aspose.slides.FontData("Arial"));
presentation.save("theme-fonts.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
A címsor a fő betűtípust, a törzsszöveg a mellék betűtípust követi. Azok a szövegek, amelyek kifejezett betűtárgy nevet tartalmaznak a témaazonosító helyett, nem váltanak automatikusan, ha a téma betűtípus‑sémája megváltozik.
A fő és mellék betűtípus‑gyűjtemények tartalmazhatnak betűtárgy‑leképezéseket is egyedi írásrendszerekhez, például cirill, arab, japán, grúz és thaana. Ezeknek a leképezéseknek a megtekintéséhez, hozzáadásához, cseréjéhez vagy eltávolításához lásd a Script‑Specific Theme Fonts oldalt.
Tip
További információk a prezentáció betűtípusaival kapcsolatban megtalálhatók a PowerPoint Fonts oldalon.Téma másolása vagy alkalmazása
Az alábbi munkafolyamatok különböző téma‑kapcsolódó problémákat oldanak meg.
Külső téma alkalmazása egy mesterhez tartozó diákra
Használja a MasterSlide.applyExternalThemeToDependingSlides metódust, ha egy PowerPoint témafájl (.thmx) áll rendelkezésre, és minden, az adott masterhez tartozó diát újra kíván stilizálni. Válassza ki a mastert a Presentation.getMasters gyűjteményből, amely a MasterSlideCollection által képviselt, és adja át a témafájl útvonalát a metódusnak.
A metódus a következő műveleteket hajtja végre:
- Létrehoz egy új masterdiát a kiválasztott master alapján.
- Alkalmazza a külső témát az új masterre.
- Hozzárendeli az új mastert minden diához, amely korábban a kiválasztott masterhez tartozott.
- Visszaadja a frissen létrehozott MasterSlide-t.
Az alábbi példa egy külső témát alkalmaz az első masterhez tartozó diákra, majd elmenti a prezentációt:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const selectedMaster = presentation.getMasters().get_Item(0);
const themedMaster = selectedMaster.applyExternalThemeToDependingSlides("corporate-theme.thmx");
console.log("Created master: " + themedMaster.getName());
presentation.save("presentation-with-external-theme.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Érvénytelen, sérült vagy nem támogatott téma PptxReadException-et okozhat. Ellenőrizze a felhasználók által megadott útvonalakat, kezelje a fájlrendszer‑hozzáférési hibákat, és csak akkor mentse a prezentációt, ha a téma sikeresen alkalmazva lett.
Csak azok a diák, amelyek a kiválasztott masterhez tartoztak, kerülnek átrendelésre. A másik masterhez tartozó diákok megtartják meglévő masterüket és témájukat. A téma‑érzékeny színek, betűtípusok, kitöltések, vonalak, háttérstílusok és effektusok a külső témához lesznek feloldva. A közvetlenül hozzárendelt színek, betűtípusok, kitöltések és egyéb explicit formázások változatlanok maradhatnak. Az elrendezési és diaszintű felülbírálások szintén előnyben részesülhetnek az új mastertől örökölt értékekkel szemben.
A téma hivatkozhat olyan betűtípusokra, amelyek nincsenek jelen a futáskörnyezetben. A konzisztens megjelenítés és export érdekében telepítse a szükséges betűtípusokat, biztosítsa őket egyedi betűforrások segítségével, vagy konfigurálja a betűtípus‑helyettesítést.
Ez egy közvetlen master‑szintű munkafolyamat: a metódus egy .thmx fájl elérési útját fogadja, és nem igényel manuális létrehozást a diaszintű vagy elrendezési szintű téma‑átbírálásokhoz.
Különböző külső témák alkalmazása több‑masteres prezentációban
Ha a releváns master előre nem ismert, szerezze be egy reprezentatív dia segítségével a Slide.getLayoutSlide és a LayoutSlide.getMasterSlide metódusokkal. Tárolja el az eredeti master‑referenciákat a témák alkalmazása előtt, mert minden hívás egy új mastert hoz létre a prezentációban.
Az alábbi példa két szekció diáit használja mastereik megtalálásához, és minden csoporthoz külön külső témát alkalmaz:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation("multi-master-presentation.pptx");
try {
if (presentation.getSlides().size() < 5) {
console.log("The presentation does not contain the expected representative slides.");
} else {
const firstGroupMaster = presentation.getSlides().get_Item(0).getLayoutSlide().getMasterSlide();
const secondGroupMaster = presentation.getSlides().get_Item(4).getLayoutSlide().getMasterSlide();
if (firstGroupMaster.getSlideId() === secondGroupMaster.getSlideId()) {
console.log("The representative slides use the same master.");
} else {
const firstThemedMaster = firstGroupMaster.applyExternalThemeToDependingSlides("blue-theme.thmx");
const secondThemedMaster = secondGroupMaster.applyExternalThemeToDependingSlides("green-theme.thmx");
console.log("First themed master: " + firstThemedMaster.getName());
console.log("Second themed master: " + secondThemedMaster.getName());
presentation.save("multi-master-with-external-themes.pptx", aspose.slides.SaveFormat.Pptx);
}
}
} finally {
presentation.dispose();
}
Az első hívás csak az firstGroupMaster‑hez tartozó diákra hat, a második hívás csak a secondGroupMaster‑hez tartozó diákra. A másik masterhez tartozó diákok nem kapnak új stílust.
Forrástéma megőrzése diák áthelyezésekor
Ha egy diát egy másik prezentációba szeretne áthelyezni, miközben az eredeti megjelenését meg kívánja őrizni, klónozza a forrás‑mastert a célprezentációba a MasterSlideCollection.addClone segítségével, majd klónozza a diát a SlideCollection.addClone és a klónozott masterrel. Ez együtt viszi a mastert, annak elrendezéseit és a hozzá tartozó témát.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const source = new aspose.slides.Presentation("source-theme.pptx");
try {
const target = new aspose.slides.Presentation("target.pptx");
try {
const sourceSlide = source.getSlides().get_Item(0);
const clonedMaster = target.getMasters().addClone(sourceSlide.getLayoutSlide().getMasterSlide());
target.getSlides().addClone(sourceSlide, clonedMaster, true);
target.save("theme-preserved.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Ez a preferált munkafolyamat, amikor a forrásdia megjelenése pontosan ugyanolyannak kell maradjon a célhelyen. A tartalom egyszerű klónozása egy nem kapcsolódó cél‑masterre megváltoztathatja a téma‑vezérelt színeket, betűtípusokat, hátterelemeket és effektusokat.
Témaértékek alkalmazása meglévő diára
Ha a cél‑dia a jelenlegi masteren és elrendezésen marad, inicializáljon egy diaszintű felülbírálást a forrástémából. A OverrideTheme.initColorSchemeFrom, OverrideTheme.initFontSchemeFrom és OverrideTheme.initFormatSchemeFrom metódusok másolják a három fő téma‑komponenst a felülbírálásba.
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const source = new aspose.slides.Presentation("source-theme.pptx");
try {
const target = new aspose.slides.Presentation("target.pptx");
try {
const sourceTheme = source.getMasterTheme();
const targetSlide = target.getSlides().get_Item(0);
const overrideTheme = targetSlide.getThemeManager().getOverrideTheme();
overrideTheme.initColorSchemeFrom(sourceTheme.getColorScheme());
overrideTheme.initFontSchemeFrom(sourceTheme.getFontScheme());
overrideTheme.initFormatSchemeFrom(sourceTheme.getFormatScheme());
target.save("theme-applied-to-slide.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Ez megváltoztatja a dia által használt témát anélkül, hogy a többi dia örökölt témáját módosítaná. A helyi felülbírálás eltávolításához és az örökölt értékek visszaállításához hívja meg a OverrideTheme.clear‑t.
Témafelülbírálás alkalmazása egy elrendezésre
Az elrendezési szintű felülbírálás azokat a diákra vonatkozik, amelyek az adott elrendezést használják, kivéve ha egy konkrét dia saját felülbírálással rendelkezik. Ugyanezeket az inicializációs metódusokat használhatja a LayoutSlideThemeManager segítségével:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const source = new aspose.slides.Presentation("source-theme.pptx");
try {
const target = new aspose.slides.Presentation("target.pptx");
try {
const sourceTheme = source.getMasterTheme();
const targetSlide = target.getSlides().get_Item(0);
const overrideTheme = targetSlide.getLayoutSlide().getThemeManager().getOverrideTheme();
overrideTheme.initColorSchemeFrom(sourceTheme.getColorScheme());
overrideTheme.initFontSchemeFrom(sourceTheme.getFontScheme());
overrideTheme.initFormatSchemeFrom(sourceTheme.getFormatScheme());
target.save("theme-applied-to-layout.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
target.dispose();
}
} finally {
source.dispose();
}
Használjon master‑ vagy prezentáció‑szintű témát, amikor sok elrendezésnek és diáknak közös alaptervet kell megosztania, elrendezési felülbírálást, amikor egy elrendezéscsaládnak eltérő stílusra van szüksége, és csak diákszintű felülbírálást a valódi kivételekhez. A túlzott diaszintű felülbírálások megnehezítik a későbbi globális téma‑változtatások előrejelzését.
Téma háttérstílusok frissítése
A téma háttérkitöltései a FormatScheme.getBackgroundFillStyles‑ben vannak tárolva. A PowerPoint a felhasználói felületen több háttérválasztási lehetőséget jeleníthet meg, mint amennyi kitöltés‑definíció fizikailag tárolva van ebben a gyűjteményben, mert a felhasználói felület kombinálhat téma‑kitöltéseket témaszínek és egyéb stílus‑referenciákkal.

Mielőtt háttérstílust használna, ellenőrizze a tárolt gyűjteményt és az aktuális Background.getStyleIndex-et. A 0‑ás stílusindex azt jelenti, hogy nincs témakötésű kitöltés; a pozitív értékek témaháttér‑stílus‑referenciák. Ez eltér attól, amikor a JavaScript‑gyűjteményt közvetlenül indexeli, ahol az 0 az első tárolt tételt jelöli. Ne feltételezze, hogy minden prezentáció ugyanannyi háttérkitöltés‑stílussal rendelkezik.
Az alábbi példa jelentést készít a rendelkezésre álló háttérkitöltések számáról, témakötésű háttér‑referenciát rendel az első masterhez, és elmenti a prezentációt:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const backgroundStyles = presentation.getMasterTheme().getFormatScheme().getBackgroundFillStyles();
console.log("Background fill styles: " + backgroundStyles.size());
if (backgroundStyles.size() === 0) {
throw new Error("The presentation theme does not contain background fill styles.");
}
const masterSlide = presentation.getMasters().get_Item(0);
masterSlide.getBackground().setType(java.newByte(aspose.slides.BackgroundType.Themed));
masterSlide.getBackground().setStyleIndex(1);
presentation.save("theme-background.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
A látható eredmény a master által hivatkozott téma‑bejegyzéstől és az elrendezési vagy diaszintű háttér‑felülbírálásoktól függ. Ha egy dia saját háttért használ, a csak a master háttér módosítása nem feltétlenül változtatja meg azt a diát. Használja a Background.getEffective‑t, ha a végső háttérre van szüksége az öröklődés után.
Warning
Ne kezelje a stílusindexet nullától induló gyűjtemény‑indexként. Kerülje el egy fájlból származó stílus‑szám hard‑kódolását és annak feltételezését, hogy egy másik fájlban ugyanazt a megjelenést eredményezi; a téma‑stílusdefiníciók prezentációnként eltérőek.Tip
A közvetlen háttérformázáshoz és a háttér‑öröklődéshez lásd a Presentation Background oldalt.Téma effektusok frissítése
A téma formátum‑sémája külön kitöltés‑, vonal‑ és effektus‑stílus‑gyűjteményeket tartalmaz, amelyeket a FormatScheme.getFillStyles, FormatScheme.getLineStyles és FormatScheme.getEffectStyles tesznek elérhetővé. A tipikus Office‑témák gyakran három fő stílus‑bejegyzést tartalmaznak, amelyek vizuálisan a finom, közepes és intenzív formázásnak felelnek meg, de a kódnak minden gyűjteményt ellenőriznie kell ahelyett, hogy fix számot feltételezne.

JavaScript‑ben a gyűjtemény indexe nulla‑alapú: az 0 az első tárolt stílust jelöli, a 2 a harmadikat. Egy alakzat stílus‑referencia‑indexei egy külön koncepció, amelyet a ShapeStyle tesz elérhetővé. Egy téma‑stílus módosítása azokra az alakzatokra hat, amelyek arra a téma‑stílusra hivatkoznak; a közvetlen formázással ellátott alakzatok változatlanok maradhatnak.
Az alábbi példa ellenőrzi, hogy a szükséges stílus‑bejegyzések léteznek, megváltoztatja az első vonal‑stílust, a harmadik kitöltés‑stílust, engedélyezi a külső árnyékot a harmadik effektus‑stílusban, majd elmenti az eredményt:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
const presentation = new aspose.slides.Presentation("Subtle_Moderate_Intense.pptx");
try {
const formatScheme = presentation.getMasterTheme().getFormatScheme();
if (formatScheme.getLineStyles().size() < 1 || formatScheme.getFillStyles().size() < 3 || formatScheme.getEffectStyles().size() < 3) {
throw new Error("The theme does not contain the style entries required by this example.");
}
formatScheme.getLineStyles().get_Item(0).getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
formatScheme.getLineStyles().get_Item(0).getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
formatScheme.getFillStyles().get_Item(2).setFillType(java.newByte(aspose.slides.FillType.Solid));
formatScheme.getFillStyles().get_Item(2).getSolidFillColor().setColor(java.newInstanceSync("java.awt.Color", 34, 139, 34));
const effectFormat = formatScheme.getEffectStyles().get_Item(2).getEffectFormat();
effectFormat.enableOuterShadowEffect();
effectFormat.getOuterShadowEffect().setDistance(10);
presentation.save("theme-effects.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Az ezekre a helyekre hivatkozó alakzatok esetén az első téma‑vonal‑stílus piros, a harmadik téma‑kitöltés‑stílus szilárd erdőzöld, és a harmadik effektus‑stílus egy 10 pont távolságú külső árnyékot kap. A pontos vizuális eredmény továbbra is attól függ, hogy melyik stílus‑helyre hivatkozik az egyes alakzat, és hogy a közvetlen formázás felülbírálja-e a témát.

Megállapítás, hogy egy hatékony szilárd kitöltés témaszínt használ-e
Egy kitöltés tárolható közvetlenül egy objektumon vagy örökölhető bekezdésből, elrendezésből, masterből, téma‑stílusból vagy egyéb formázási szintről. Hívja meg a FillFormat.getEffective‑t, hogy a hierarchiát egy változhatatlan hatékony‑kitöltés pillanatképpé alakítsa. Először ellenőrizze a getFillType értékét. Csak akkor olvassa a szilárd‑kitöltés tulajdonságait, ha az FillType.Solid.
Szilárd kitöltés esetén a getSolidFillColor a végleges megjelenített RGB‑értéket adja vissza, miután az öröklődés, a téma‑keresés és a színtranszformációk alkalmazásra kerültek. A getSolidFillSchemeColor metódus a megfelelő logikai SchemeColor helyet adja vissza, például Text1 vagy Accent6. A SchemeColor.NotDefined érték azt jelenti, hogy a hatékony szilárd kitöltés nem egy séma‑színen alapul. Egy olyan munkafolyamatban, ahol a kitöltések csak téma‑színek vagy közvetlen RGB‑színek lehetnek, ez az érték egy közvetlen RGB‑kitöltést azonosít.
Ne csak a helyi ColorFormat.getSchemeColor értéket használja a kitöltés osztályozásához. Például egy szövegrésznek lehet, hogy nincs helyi séma‑színe (NotDefined), miközben a hatékony kitöltés örököl egy téma‑színt, és Text1 vagy Accent6‑ra oldódik. Ezzel ellentétben a getSolidFillSchemeColor megmondja, mely logikai téma‑hely hozta létre a hatékony színt, de nem közli, hogy az a hely az objektumból, bekezdésből, elrendezésből, masterből vagy egy másik szintből származik.
Az alábbi példa betölti a prezentációt, auditálja az alakzat‑ és szövegrész‑kitöltéseket, kiírja minden végleges RGB‑értéket és a hozzá rendelt séma‑színt, valamint jelzi azokat a szilárd kitöltéseket, amelyek nem követik a téma‑szín változásait:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
function toHexColor(color) {
const red = color.getRed().toString(16).padStart(2, "0");
const green = color.getGreen().toString(16).padStart(2, "0");
const blue = color.getBlue().toString(16).padStart(2, "0");
return `#${red}${green}${blue}`.toUpperCase();
}
function auditFill(objectName, localFill) {
const effectiveFill = localFill.getEffective();
if (effectiveFill.getFillType() !== aspose.slides.FillType.Solid) {
console.log(objectName + ": fill type = " + effectiveFill.getFillType() + "; not a solid fill.");
return;
}
const rgb = effectiveFill.getSolidFillColor();
const effectiveSchemeColor = effectiveFill.getSolidFillSchemeColor();
const localSchemeColor = localFill.getSolidFillColor().getSchemeColor();
console.log(objectName + ": RGB = " + toHexColor(rgb));
console.log(objectName + ": local scheme = " + localSchemeColor + ", effective scheme = " + effectiveSchemeColor);
if (effectiveSchemeColor === aspose.slides.SchemeColor.NotDefined) {
console.log(objectName + ": direct RGB or another non-scheme fill; audit as theme-independent.");
} else {
console.log(objectName + ": theme-dependent through " + effectiveSchemeColor + ".");
}
}
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const slideCount = presentation.getSlides().size();
for (let slideIndex = 0; slideIndex < slideCount; slideIndex++) {
const slide = presentation.getSlides().get_Item(slideIndex);
const shapeCount = slide.getShapes().size();
for (let shapeIndex = 0; shapeIndex < shapeCount; shapeIndex++) {
const shape = slide.getShapes().get_Item(shapeIndex);
const shapeName = "Slide " + (slideIndex + 1) + ", shape " + (shapeIndex + 1);
auditFill(shapeName, shape.getFillFormat());
if (java.instanceOf(shape, "com.aspose.slides.IAutoShape")) {
const paragraphCount = shape.getTextFrame().getParagraphs().getCount();
for (let paragraphIndex = 0; paragraphIndex < paragraphCount; paragraphIndex++) {
const paragraph = shape.getTextFrame().getParagraphs().get_Item(paragraphIndex);
const portionCount = paragraph.getPortions().getCount();
for (let portionIndex = 0; portionIndex < portionCount; portionIndex++) {
const portion = paragraph.getPortions().get_Item(portionIndex);
const portionName = shapeName + ", paragraph " + (paragraphIndex + 1) + ", portion " + (portionIndex + 1);
auditFill(portionName, portion.getPortionFormat().getFillFormat());
}
}
}
}
}
} finally {
presentation.dispose();
}
A NotDefined ág egy auditlistát ad a szilárd kitöltésekről, amelyek nem reagálnak a téma‑szín slotok változására. Ezeket az objektumokat ellenőrizze, amikor egy prezentációnak egy új márka‑palettát kell követnie. A jelentett RGB‑érték továbbra is a jelenlegi megjelenést mutatja, míg a séma‑érték magyarázza, hogy ez a megjelenés kapcsolódik‑e a témához.
A hatékony‑formátum objektumok pillanatképek. Miután a prezentáció témáját, egy téma‑átbírálást vagy bármely örökölt formázást módosította, hívja meg újra a getEffective‑et, és olvassa ki az új hatékony‑kitöltés objektumot, mielőtt összehasonlítaná vagy jelentést készítene a színekről.
Hatékony témaértékek olvasása
A nyers témaobjektumok megmutatják, mi van definiálva egy adott szinten. A hatékony értékek megmutatják, mit használ valójában egy dia vagy alakzat az öröklődés és a helyi felülbírálások feloldása után. Egy dia esetén hívja meg a BaseOverrideThemeManager.createThemeEffective-t. Háttér esetén használja a Background.getEffective-t, kitöltés esetén a FillFormat.getEffective-t.
Az alábbi példa beolvassa a hatékony témát, háttér‑stílust és az első alakzat kitöltését egy diáról:
const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const presentation = new aspose.slides.Presentation("input.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const effectiveTheme = slide.getThemeManager().createThemeEffective();
const effectiveBackground = slide.getBackground().getEffective();
console.log("Effective major Latin font: " + effectiveTheme.getFontScheme().getMajor().getLatinFont().getFontName());
console.log("Effective minor Latin font: " + effectiveTheme.getFontScheme().getMinor().getLatinFont().getFontName());
console.log("Effective background fill type: " + effectiveBackground.getFillFormat().getFillType());
if (slide.getShapes().size() > 0) {
const effectiveFill = slide.getShapes().get_Item(0).getFillFormat().getEffective();
console.log("First shape effective fill type: " + effectiveFill.getFillType());
if (effectiveFill.getFillType() === aspose.slides.FillType.Solid) {
console.log("First shape effective fill color: " + effectiveFill.getSolidFillColor());
}
}
} finally {
presentation.dispose();
}
Használja a hatékony adatokat megjelenítési diagnosztikához, validáláshoz és összehasonlításokhoz. Ha csak a Presentation.getMasterTheme‑t ellenőrzi, előfordulhat, hogy egy master, elrendezés, dia vagy alakzat felülbírálásait kihagyja, amelyek megváltoztatják a végső megjelenést.
GYIK
A külső téma alkalmazása minden diára hat a prezentációban?
Nem. A MasterSlide.applyExternalThemeToDependingSlides csak azokat a diákat rendeli újra, amelyek a kiválasztott masterhez tartoztak. A másik masterrel rendelkező diák megőrzik meglévő témájukat.
Alkalmazhatok témát egyetlen diára a master módosítása nélkül?
Igen. Használja a dia SlideThemeManager‑ét, és inicializálja a felülbírálási témáját. A változás csak arra a diára vonatkozik; a többi dia továbbra is a meglévő témáiból örököl.
Mi a legbiztonságosabb módja egy téma átvitelének egyik prezentációból a másikba?
Amikor egy diát áthelyez és meg akarja őrizni a forrás megjelenését, klónozza a forrás‑mastert a célba, majd a diát a MasterSlideCollection.addClone és a SlideCollection.addClone segítségével. Ez a mastert, az elrendezéseket és a témát együtt tartja.
Hogyan tekinthetem meg a hatékony értékeket az öröklődés és felülbírálások után?
Használja a BaseOverrideThemeManager.createThemeEffective‑t egy dia vagy elrendezés téma esetén, valamint a megfelelő hatékony‑adat metódusokat formátumobjektumokhoz, mint a Background.getEffective és a FillFormat.getEffective. Ezek az API‑k a hierarchiák feloldása után visszaadják a feloldott értékeket.