Kelola Tema Presentasi di Python via Java
Pendahuluan
Tema presentasi mendefinisikan satu set terkoordinasi warna, font, gaya latar belakang, isian, garis, dan efek. Objek yang sadar tema merujuk ke definisi bersama ini alih‑alih menyimpan setiap properti visual sebagai nilai tetap, sehingga perubahan tema dapat memperbarui banyak objek sekaligus.
Di Aspose.Slides, tema tingkat presentasi tersedia melalui Presentation.getMasterTheme. Sebuah presentasi juga dapat berisi override tema pada tingkat yang lebih rendah. Sebuah master dapat mengganti tema presentasi melalui MasterThemeManager.getOverrideTheme, sementara tata letak atau slide individu dapat mengganti tema yang diwariskan melalui BaseOverrideThemeManager.getOverrideTheme. Pada praktiknya, tema efektif untuk sebuah slide diselesaikan melalui rantai pewarisan ini: tema presentasi, override master, override tata letak, dan override slide.

Bagian di bawah ini menunjukkan alur kerja tema yang paling umum: memeriksa tema, mengubah warna dan font, menyalin atau menerapkan tema, memperbarui gaya latar belakang dan efek, serta membaca nilai efektif setelah pewarisan dan override diselesaikan.
Periksa Tema
Objek MasterTheme menampilkan skema warna tema, skema font, dan skema format melalui MasterTheme.getColorScheme, MasterTheme.getFontScheme, dan MasterTheme.getFormatScheme. Memeriksa koleksi ini sebelum mengubahnya sangat berguna ketika presentasi berasal dari sumber eksternal karena jumlah dan isi entri gaya dapat bervariasi.
Contoh berikut membaca properti tema utama dan melaporkan berapa banyak gaya latar belakang, isian, garis, dan efek yang disimpan dalam tema:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("input.pptx")
try:
theme = presentation.getMasterTheme()
print("Theme name:", theme.getName())
print("Accent 1:", theme.getColorScheme().getAccent1().getColor())
print("Major Latin font:", theme.getFontScheme().getMajor().getLatinFont().getFontName())
print("Minor Latin font:", theme.getFontScheme().getMinor().getLatinFont().getFontName())
print("Background fill styles:", theme.getFormatScheme().getBackgroundFillStyles().size())
print("Fill styles:", theme.getFormatScheme().getFillStyles().size())
print("Line styles:", theme.getFormatScheme().getLineStyles().size())
print("Effect styles:", theme.getFormatScheme().getEffectStyles().size())
finally:
presentation.dispose()
Jika sebuah file menggunakan beberapa master, jangan berasumsi bahwa setiap slide memiliki tema efektif yang sama. Periksa master yang terkait dengan slide, dan gunakan alur kerja tema‑efektif yang ditunjukkan nanti dalam artikel ini ketika override tata letak atau slide mungkin ada.
Ubah Warna Tema
Isian, garis, dan teks yang sadar tema dapat merujuk ke warna logis dari enumerasi SchemeColor. Ketika Anda mengubah entri yang sesuai dalam ColorScheme, semua objek yang masih merujuk ke warna tema tersebut diselesaikan terhadap nilai baru. Objek yang menggunakan warna RGB langsung tidak diubah oleh pembaruan warna tema.
Contoh end‑to‑end berikut membuat sebuah bentuk yang menggunakan Accent4, mengubah warna Accent4 tema menjadi merah, menyimpan presentasi, membukanya kembali, dan mencetak warna isian efektif:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat, SchemeColor, ShapeType
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
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()
saved_presentation = Presentation("theme-color.pptx")
try:
saved_slide = saved_presentation.getSlides().get_Item(0)
saved_shape = saved_slide.getShapes().get_Item(0)
effective_fill = saved_shape.getFillFormat().getEffective()
print("Effective fill color:", effective_fill.getSolidFillColor())
finally:
saved_presentation.dispose()
Karena persegi tetap terhubung ke Accent4, warna yang terlihat menjadi merah setelah tema diubah. Jika Anda mengganti warna skema dengan warna langsung pada bentuk, perubahan selanjutnya pada Accent4 tidak akan memengaruhi isian tersebut.
Gunakan Warna dari Palet Tambahan
PowerPoint menghasilkan varian lebih terang dan lebih gelap dari warna tema dengan menerapkan transformasi warna. Aspose.Slides menampilkan transformasi ini melalui enumerasi ColorTransformOperation.

1 – Warna tema utama.
2 – Varian lebih terang dan lebih gelap yang diproduksi dari warna tema utama.
Contoh berikut membuat enam persegi berdasarkan Accent4, menerapkan transformasi luminansi pada lima di antaranya, dan menyimpan hasilnya:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ColorTransformOperation, FillType, Presentation, SaveFormat, SchemeColor, ShapeType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
base_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 50, 50)
base_shape.getFillFormat().setFillType(FillType.Solid)
base_shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4)
lightest_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 70, 50, 50)
lightest_shape.getFillFormat().setFillType(FillType.Solid)
lightest_shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4)
lightest_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.2)
lightest_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.8)
lighter_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 130, 50, 50)
lighter_shape.getFillFormat().setFillType(FillType.Solid)
lighter_shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4)
lighter_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.4)
lighter_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.6)
light_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 190, 50, 50)
light_shape.getFillFormat().setFillType(FillType.Solid)
light_shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4)
light_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.6)
light_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.4)
dark_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 250, 50, 50)
dark_shape.getFillFormat().setFillType(FillType.Solid)
dark_shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4)
dark_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.75)
darker_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 50, 50)
darker_shape.getFillFormat().setFillType(FillType.Solid)
darker_shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4)
darker_shape.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.5)
presentation.save("theme-color-palette.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Varian ini tetap berbasis pada warna tema. Jika Accent4 berubah nanti, warna yang ditransformasi dihitung ulang dari nilai Accent4 yang baru.
Petakan Nilai SchemeColor ke Slot ColorScheme
Enumerasi SchemeColor menggunakan Text1, Background1, Text2, dan Background2, sementara ColorScheme menampilkan slot tema yang sama sebagai Dark1, Light1, Dark2, dan Light2. Pemetaan bersifat tetap:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
Ini adalah nama alternatif untuk slot tema yang sama; bukan nilai yang dikonversi secara dinamis dari satu bentuk ke bentuk lain.
Ubah Font Tema
Skema font tema berisi satu set font utama untuk judul dan satu set font minor untuk teks isi. Metode FontScheme.getMajor dan FontScheme.getMinor menampilkan set tersebut.
Pengidentifikasi font tema yang kompatibel dengan PowerPoint dapat digunakan dalam pemformatan teks:
+mn‑lt– Font Tubuh Latin (Minor Latin Font)+mj‑lt– Font Judul Latin (Major Latin Font)+mn‑ea– Font Tubuh Asia Timur (Minor East Asian Font)+mj‑ea– Font Judul Asia Timur (Major East Asian Font)
Contoh berikut membuat satu judul yang menggunakan font tema Latin mayor dan satu baris isi yang menggunakan font tema Latin minor. Kemudian mengubah font tema dan menyimpan hasilnya:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FontData, Presentation, SaveFormat, ShapeType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
heading = slide.getShapes().addAutoShape(ShapeType.Rectangle, 40, 40, 500, 60)
heading.getTextFrame().setText("Theme heading")
font_data = FontData("+mj-lt")
heading.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setLatinFont(font_data)
body = slide.getShapes().addAutoShape(ShapeType.Rectangle, 40, 120, 500, 60)
body.getTextFrame().setText("Theme body text")
font_data = FontData("+mn-lt")
body.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat().setLatinFont(font_data)
font_data = FontData("Aptos Display")
presentation.getMasterTheme().getFontScheme().getMajor().setLatinFont(font_data)
font_data = FontData("Arial")
presentation.getMasterTheme().getFontScheme().getMinor().setLatinFont(font_data)
presentation.save("theme-fonts.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Judul mengikuti font mayor dan teks isi mengikuti font minor. Teks yang memiliki nama font eksplisit alih‑alih pengidentifikasi tema tidak akan beralih secara otomatis ketika skema font tema berubah.
Koleksi font mayor dan minor juga dapat berisi pemetaan font untuk sistem penulisan individual, seperti Cyrillic, Arab, Jepang, Georgia, dan Thaana. Untuk memeriksa, menambah, mengganti, atau menghapus pemetaan ini, lihat Script-Specific Theme Fonts.
Tip
Untuk informasi lebih lanjut tentang font presentasi, lihat Font PowerPoint.Salin atau Terapkan Tema
Alur kerja di bawah ini menyelesaikan berbagai masalah yang terkait dengan tema.
Terapkan Tema Eksternal ke Slide yang Bergantung pada Master
Gunakan MasterSlide.applyExternalThemeToDependingSlides ketika Anda memiliki file tema PowerPoint (.thmx) dan ingin mengubah gaya semua slide yang bergantung pada master tertentu. Pilih master dari koleksi Presentation.getMasters, yang diwakili oleh MasterSlideCollection, dan berikan jalur file tema ke metode tersebut.
Metode melakukan operasi berikut:
- Membuat slide master baru berdasarkan master yang dipilih.
- Menerapkan tema eksternal ke master baru.
- Menetapkan master baru ke semua slide yang sebelumnya bergantung pada master yang dipilih.
- Mengembalikan MasterSlide yang baru dibuat.
Contoh berikut menerapkan tema eksternal ke slide yang bergantung pada master pertama dan menyimpan presentasi:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
selected_master = presentation.getMasters().get_Item(0)
themed_master = selected_master.applyExternalThemeToDependingSlides("corporate-theme.thmx")
print("Created master:", themed_master.getName())
presentation.save("presentation-with-external-theme.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Tema yang tidak valid, rusak, atau tidak didukung dapat menyebabkan PptxReadException. Validasi jalur yang diberikan pengguna, tangani kegagalan akses sistem file, dan simpan presentasi hanya setelah tema berhasil diterapkan.
Hanya slide yang bergantung pada master terpilih yang dipindahkan. Slide yang terkait dengan master lain mempertahankan master dan tema mereka yang ada. Warna, font, isian, garis, latar belakang, dan efek yang sadar tema diselesaikan terhadap tema eksternal. Warna, font, isian, dan pemformatan eksplisit yang ditetapkan secara langsung mungkin tetap tidak berubah. Override pada tingkat tata letak dan slide juga dapat mengambil prioritas atas nilai yang diwariskan dari master baru.
Tema dapat merujuk ke font yang tidak tersedia di lingkungan runtime. Untuk rendering dan ekspor yang konsisten, instal font yang diperlukan, sediakan melalui custom font sources, atau konfigurasikan font substitution.
Ini adalah alur kerja level master langsung: metode menerima jalur file .thmx dan tidak memerlukan pembuatan manual override tema pada tingkat slide atau tata letak.
Terapkan Tema Eksternal Berbeda dalam Presentasi Multi‑Master
Ketika master yang relevan tidak diketahui sebelumnya, peroleh dari slide perwakilan melalui Slide.getLayoutSlide dan LayoutSlide.getMasterSlide. Simpan referensi master asli sebelum menerapkan tema apa pun karena setiap pemanggilan membuat master lain dalam presentasi.
Contoh berikut menggunakan slide dari dua bagian untuk menemukan master mereka dan menerapkan tema eksternal yang berbeda ke masing‑masing grup:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("multi-master-presentation.pptx")
try:
if presentation.getSlides().size() < 5:
print("The presentation does not contain the expected representative slides.")
else:
first_group_master = presentation.getSlides().get_Item(0).getLayoutSlide().getMasterSlide()
second_group_master = presentation.getSlides().get_Item(4).getLayoutSlide().getMasterSlide()
if first_group_master.getSlideId() == second_group_master.getSlideId():
print("The representative slides use the same master.")
else:
first_themed_master = first_group_master.applyExternalThemeToDependingSlides("blue-theme.thmx")
second_themed_master = second_group_master.applyExternalThemeToDependingSlides("green-theme.thmx")
print("First themed master:", first_themed_master.getName())
print("Second themed master:", second_themed_master.getName())
presentation.save("multi-master-with-external-themes.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Pemanggilan pertama memengaruhi hanya slide yang bergantung pada first_group_master, dan pemanggilan kedua memengaruhi hanya slide yang bergantung pada second_group_master. Slide yang termasuk dalam master lain tidak diubah gaya.
Pertahankan Tema Sumber Saat Memindahkan Slide
Jika Anda ingin memindahkan sebuah slide ke presentasi lain dan mempertahankan desain aslinya, klon master sumber ke presentasi target dengan MasterSlideCollection.addClone, lalu klon slide dengan SlideCollection.addClone dan master yang diklon. Ini membawa master, tata letak, dan tema terkait bersama‑sama.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
source = Presentation("source-theme.pptx")
try:
target = Presentation("target.pptx")
try:
source_slide = source.getSlides().get_Item(0)
source_master = source_slide.getLayoutSlide().getMasterSlide()
cloned_master = target.getMasters().addClone(source_master)
target.getSlides().addClone(source_slide, cloned_master, True)
target.save("theme-preserved.pptx", SaveFormat.Pptx)
finally:
target.dispose()
finally:
source.dispose()
Ini adalah alur kerja yang disarankan ketika slide sumber harus tampak sama di tujuan. Hanya mengklon konten ke master tujuan yang tidak terkait dapat mengubah warna, font, latar belakang, dan efek yang dipengaruhi tema.
Terapkan Nilai Tema ke Slide yang Ada
Jika slide target harus tetap pada master dan tata letak saat ini, inisialisasi override tingkat slide dari tema sumber. Metode OverrideTheme.initColorSchemeFrom, OverrideTheme.initFontSchemeFrom, dan OverrideTheme.initFormatSchemeFrom menyalin tiga komponen utama tema ke dalam override.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
source = Presentation("source-theme.pptx")
try:
target = Presentation("target.pptx")
try:
target_slide = target.getSlides().get_Item(0)
override_theme = target_slide.getThemeManager().getOverrideTheme()
override_theme.initColorSchemeFrom(source.getMasterTheme().getColorScheme())
override_theme.initFontSchemeFrom(source.getMasterTheme().getFontScheme())
override_theme.initFormatSchemeFrom(source.getMasterTheme().getFormatScheme())
target.save("theme-applied-to-slide.pptx", SaveFormat.Pptx)
finally:
target.dispose()
finally:
source.dispose()
Ini mengubah tema yang digunakan slide tersebut tanpa mengubah tema yang diwariskan oleh slide lain. Untuk menghapus override lokal dan kembali ke nilai yang diwariskan, panggil OverrideTheme.clear.
Terapkan Override Tema ke Layout
Override tingkat layout berlaku pada slide yang menggunakan layout tersebut, kecuali slide tertentu memiliki overridenya sendiri. Metode inisialisasi yang sama dapat digunakan melalui LayoutSlideThemeManager:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
source = Presentation("source-theme.pptx")
try:
target = Presentation("target.pptx")
try:
target_slide = target.getSlides().get_Item(0)
target_layout = target_slide.getLayoutSlide()
override_theme = target_layout.getThemeManager().getOverrideTheme()
override_theme.initColorSchemeFrom(source.getMasterTheme().getColorScheme())
override_theme.initFontSchemeFrom(source.getMasterTheme().getFontScheme())
override_theme.initFormatSchemeFrom(source.getMasterTheme().getFormatScheme())
target.save("theme-applied-to-layout.pptx", SaveFormat.Pptx)
finally:
target.dispose()
finally:
source.dispose()
Gunakan tema master atau tingkat presentasi ketika banyak layout dan slide harus berbagi desain dasar yang sama, override layout ketika satu keluarga layout membutuhkan gaya berbeda, dan override slide hanya untuk pengecualian sejati. Override berlebihan pada tingkat slide membuat perubahan tema global di kemudian hari menjadi lebih sulit diprediksi.
Perbarui Gaya Latar Belakang Tema
Isian latar belakang tema disimpan dalam FormatScheme.getBackgroundFillStyles. PowerPoint dapat menampilkan lebih banyak pilihan latar belakang di UI‑nya dibandingkan jumlah definisi isian yang secara fisik disimpan dalam koleksi ini karena UI dapat menggabungkan isian tema dengan warna tema dan referensi gaya lainnya.

Sebelum menggunakan gaya latar belakang, periksa koleksi yang disimpan dan Background.getStyleIndex saat ini. Indeks gaya 0 berarti tidak ada isian bertema; nilai positif adalah referensi gaya latar belakang tema. Ini berbeda dari mengindeks koleksi secara langsung, di mana get_Item(0) berarti item pertama yang disimpan. Jangan berasumsi bahwa setiap presentasi memiliki jumlah gaya isian latar belakang yang sama.
Contoh berikut melaporkan jumlah isian latar belakang yang tersedia, menetapkan referensi latar belakang bertema ke master pertama, dan menyimpan presentasi:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import BackgroundType, Presentation, SaveFormat
presentation = Presentation("input.pptx")
try:
background_styles = presentation.getMasterTheme().getFormatScheme().getBackgroundFillStyles()
print("Background fill styles:", background_styles.size())
if background_styles.size() == 0:
print("The presentation theme does not contain background fill styles.")
else:
master_slide = presentation.getMasters().get_Item(0)
master_slide.getBackground().setType(BackgroundType.Themed)
master_slide.getBackground().setStyleIndex(1)
presentation.save("theme-background.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Hasil yang terlihat tergantung pada entri tema yang direferensikan oleh master dan pada override latar belakang di tingkat layout atau slide. Jika sebuah slide menggunakan latar belakangnya sendiri, mengubah hanya latar belakang master mungkin tidak mengubah slide tersebut. Gunakan Background.getEffective ketika Anda perlu mengetahui latar belakang akhir setelah pewarisan diterapkan.
Warning
Jangan memperlakukan indeks gaya sebagai indeks koleksi berbasis nol. Hindari juga meng‑hard‑code nomor gaya dari satu file dan mengasumsikan tampilannya sama di file lain; definisi gaya tema bersifat spesifik presentasi.Tip
Untuk pemformatan latar belakang langsung dan pewarisan latar belakang, lihat Presentation Background.Perbarui Efek Tema
Skema format tema berisi koleksi terpisah untuk isian, garis, dan efek yang dipaparkan melalui FormatScheme.getFillStyles, FormatScheme.getLineStyles, dan FormatScheme.getEffectStyles. Tema Office biasanya berisi tiga entri gaya utama yang secara visual berkorespondensi dengan pemformatan halus, sedang, dan intens, tetapi kode harus memeriksa setiap koleksi alih‑alih mengasumsikan jumlah tetap.

Saat Anda mengakses koleksi ini di Python via Java, indeks koleksi berbasis nol: get_Item(0) adalah gaya pertama yang disimpan dan get_Item(2) adalah yang ketiga. Indeks referensi gaya sebuah bentuk adalah konsep terpisah, dipaparkan melalui ShapeStyle. Memodifikasi gaya tema memengaruhi bentuk yang merujuk ke gaya tema tersebut; bentuk dengan pemformatan langsung mungkin tetap tidak berubah.
Contoh berikut memeriksa bahwa entri gaya yang diperlukan ada, mengubah gaya garis pertama, mengubah gaya isian ketiga, mengaktifkan bayangan luar pada gaya efek ketiga, dan menyimpan hasilnya:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat
from java.awt import Color
presentation = Presentation("Subtle_Moderate_Intense.pptx")
try:
format_scheme = presentation.getMasterTheme().getFormatScheme()
if format_scheme.getLineStyles().size() < 1 or format_scheme.getFillStyles().size() < 3 or format_scheme.getEffectStyles().size() < 3:
print("The theme does not contain the style entries required by this example.")
else:
format_scheme.getLineStyles().get_Item(0).getFillFormat().setFillType(FillType.Solid)
format_scheme.getLineStyles().get_Item(0).getFillFormat().getSolidFillColor().setColor(Color.RED)
format_scheme.getFillStyles().get_Item(2).setFillType(FillType.Solid)
forest_green = Color(34, 139, 34)
format_scheme.getFillStyles().get_Item(2).getSolidFillColor().setColor(forest_green)
effect_format = format_scheme.getEffectStyles().get_Item(2).getEffectFormat()
effect_format.enableOuterShadowEffect()
effect_format.getOuterShadowEffect().setDistance(10)
presentation.save("theme-effects.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Untuk bentuk yang merujuk ke slot‑slot ini, gaya garis tema pertama menjadi merah, gaya isian tema ketiga menjadi hijau hutan padat, dan gaya efek ketiga memperoleh bayangan luar dengan jarak 10 poin. Hasil visual tepat masih tergantung pada slot gaya yang dirujuk masing‑masing bentuk dan apakah pemformatan langsung meng‑override tema.
Tentukan Apakah Pengisian Padat Efektif Menggunakan Warna Tema
Isian dapat disimpan langsung pada objek atau diwariskan dari paragraf, tata letak, master, gaya tema, atau level pemformatan lain. Panggil FillFormat.getEffective untuk menyelesaikan hierarki tersebut menjadi data isian efektif yang tidak berubah. Pertama periksa getFillType pada objek data efektif. Hanya ketika nilainya FillType.Solid Anda harus membaca properti isian padat.
Untuk isian padat, getSolidFillColor mengembalikan nilai RGB akhir yang dirender setelah pewarisan, pencarian tema, dan transformasi warna diterapkan. getSolidFillSchemeColor mengembalikan slot logis SchemeColor yang bersangkutan, seperti Text1 atau Accent6. Nilai SchemeColor.NotDefined berarti isian padat efektif tidak didasarkan pada warna skema. Dalam alur kerja di mana isian berupa warna tema atau warna RGB langsung, nilai ini mengidentifikasi isian RGB langsung.
Jangan gunakan nilai lokal ColorFormat.getSchemeColor saja untuk mengklasifikasikan isian. Misalnya, sebuah bagian teks dapat tidak memiliki warna skema yang didefinisikan secara lokal, sehingga nilainya NotDefined, sementara isian efektifnya mewarisi warna tema dan menyelesaikan ke Text1 atau Accent6. Sebaliknya, getSolidFillSchemeColor memberi tahu Anda slot tema logis mana yang menghasilkan warna efektif, tetapi tidak memberi tahu apakah slot itu berasal dari objek, paragraf, layout, master, atau level hierarki lain.
Contoh berikut memuat presentasi, mengaudit isian bentuk dan isian bagian teks, mencetak setiap nilai RGB akhir dan skema yang terkait, serta menandai isian padat yang tidak akan melacak perubahan warna tema:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import AutoShape, FillType, Presentation, SchemeColor
def audit_fill(object_name, local_fill):
effective_fill = local_fill.getEffective()
if effective_fill.getFillType() != FillType.Solid:
print(f"{object_name}: fill type = {effective_fill.getFillType()}; not a solid fill.")
return
rgb = effective_fill.getSolidFillColor()
effective_scheme_color = effective_fill.getSolidFillSchemeColor()
local_scheme_color = local_fill.getSolidFillColor().getSchemeColor()
print(f"{object_name}: RGB = #{rgb.getRed():02X}{rgb.getGreen():02X}{rgb.getBlue():02X}")
print(f"{object_name}: local scheme = {local_scheme_color}, effective scheme = {effective_scheme_color}")
if effective_scheme_color == SchemeColor.NotDefined:
print(f"{object_name}: direct RGB or another non-scheme fill; audit as theme-independent.")
else:
print(f"{object_name}: theme-dependent through {effective_scheme_color}.")
presentation = Presentation("input.pptx")
try:
for slide_index, slide in enumerate(presentation.getSlides()):
for shape_index, shape in enumerate(slide.getShapes()):
shape_name = f"Slide {slide_index + 1}, shape {shape_index + 1}"
audit_fill(shape_name, shape.getFillFormat())
if isinstance(shape, AutoShape):
for paragraph_index, paragraph in enumerate(shape.getTextFrame().getParagraphs()):
for portion_index, portion in enumerate(paragraph.getPortions()):
portion_name = f"{shape_name}, paragraph {paragraph_index + 1}, portion {portion_index + 1}"
audit_fill(portion_name, portion.getPortionFormat().getFillFormat())
finally:
presentation.dispose()
Cabang NotDefined menyediakan daftar audit isian padat yang tidak akan merespon perubahan pada slot warna tema. Tinjau objek‑objek tersebut ketika presentasi harus mengikuti palet merek baru. Nilai RGB yang dilaporkan tetap menunjukkan tampilan saat ini, sementara nilai skema menjelaskan apakah tampilan tersebut terhubung ke tema.
Objek format efektif adalah snapshot. Setelah mengubah tema presentasi, override tema, atau pemformatan yang diwariskan, panggil getEffective lagi dan baca objek data isian efektif baru sebelum membandingkan atau melaporkan warna.
Baca Nilai Tema Efektif
Objek tema mentah memberi tahu apa yang didefinisikan pada level tertentu. Nilai efektif memberi tahu apa yang sebenarnya digunakan slide atau bentuk setelah pewarisan dan override lokal diselesaikan. Untuk slide, panggil BaseOverrideThemeManager.createThemeEffective. Untuk latar belakang, gunakan Background.getEffective, dan untuk isian, gunakan FillFormat.getEffective.
Contoh berikut membaca tema efektif, latar belakang, dan isian bentuk pertama dari sebuah slide:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation
presentation = Presentation("input.pptx")
try:
slide = presentation.getSlides().get_Item(0)
effective_theme = slide.getThemeManager().createThemeEffective()
effective_background = slide.getBackground().getEffective()
print("Effective major Latin font:", effective_theme.getFontScheme().getMajor().getLatinFont().getFontName())
print("Effective minor Latin font:", effective_theme.getFontScheme().getMinor().getLatinFont().getFontName())
print("Effective background fill type:", effective_background.getFillFormat().getFillType())
if slide.getShapes().size() > 0:
effective_fill = slide.getShapes().get_Item(0).getFillFormat().getEffective()
print("First shape effective fill type:", effective_fill.getFillType())
if effective_fill.getFillType() == FillType.Solid:
print("First shape effective fill color:", effective_fill.getSolidFillColor())
finally:
presentation.dispose()
Gunakan data efektif untuk diagnostik rendering, validasi, dan perbandingan. Jika Anda hanya memeriksa Presentation.getMasterTheme, Anda dapat melewatkan master, layout, slide, atau override bentuk yang mengubah tampilan akhir.
FAQ
Apakah menerapkan tema eksternal memengaruhi setiap slide dalam presentasi?
Tidak. MasterSlide.applyExternalThemeToDependingSlides hanya menugaskan ulang slide yang bergantung pada master yang dipilih. Slide yang menggunakan master lain mempertahankan tema mereka yang ada.
Bisakah saya menerapkan tema ke satu slide tanpa mengubah master?
Ya. Gunakan SlideThemeManager slide dan inisialisasi override temanya. Perubahan tetap lokal pada slide tersebut; slide lain tetap mewarisi tema mereka yang ada.
Apa cara paling aman untuk membawa tema dari satu presentasi ke presentasi lain?
Saat memindahkan slide dan mempertahankan tampilan sumbernya, klon master sumber ke tujuan dan klon slide dengan master itu menggunakan MasterSlideCollection.addClone serta SlideCollection.addClone. Ini menjaga master, layout, dan tema bersama‑sama.
Bagaimana saya dapat melihat nilai efektif setelah pewarisan dan override?
Gunakan BaseOverrideThemeManager.createThemeEffective untuk slide atau tema layout serta metode data‑efektif yang bersangkutan untuk objek format seperti Background.getEffective dan FillFormat.getEffective. API‑API ini mengembalikan nilai yang sudah diselesaikan setelah pewarisan dan override diterapkan.