Quản lý Chủ đề Bản trình chiếu PowerPoint trong Python
Giới thiệu
Một chủ đề trình chiếu xác định các thuộc tính của các yếu tố thiết kế. Khi bạn chọn một chủ đề, bạn đang lựa chọn một bộ các yếu tố hình ảnh và thuộc tính của chúng được phối hợp đồng bộ.
Trong PowerPoint, một chủ đề bao gồm màu sắc, phông chữ, kiểu nền, và hiệu ứng.

Thay đổi màu chủ đề
Một chủ đề PowerPoint sử dụng một tập hợp màu cụ thể cho các yếu tố khác nhau trên một slide. Nếu bạn không thích các mặc định, bạn có thể thay đổi chúng bằng cách áp dụng màu chủ đề mới. Để cho phép bạn chọn màu chủ đề mới, Aspose.Slides cung cấp các giá trị trong enumeration SchemeColor.
Đoạn mã Python này cho thấy cách thay đổi màu nhấn của chủ đề:
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 100)
shape.fill_format.fill_type = slides.FillType.SOLID
shape.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
Bạn có thể xác định giá trị thực tế của màu kết quả như sau:
fill_effective = shape.fill_format.get_effective()
print("{0} ({1})".format(fill_effective.solid_fill_color.name, fill_effective.solid_fill_color))
# Đầu ra ví dụ:
#
# ff8064a2 (Màu [A=255, R=128, G=100, B=162])
Để minh họa thêm việc thay đổi màu, chúng tôi tạo một yếu tố khác, gán cho nó màu nhấn từ bước đầu tiên, sau đó cập nhật màu chủ đề.
other_shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 120, 100, 100)
other_shape.fill_format.fill_type = slides.FillType.SOLID
other_shape.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
presentation.master_theme.color_scheme.accent4.color = draw.Color.red
Màu mới được áp dụng tự động cho cả hai yếu tố.
Đặt màu chủ đề từ bảng màu bổ sung
Khi bạn áp dụng các phép biến đổi độ sáng cho màu chủ đề chính (1), các màu từ bảng màu bổ sung (2) được tạo ra. Bạn có thể đặt và lấy các màu chủ đề đó.

1 — Màu chủ đề chính
2 — Màu từ bảng màu bổ sung
Đoạn mã Python này minh họa cách các màu từ bảng màu bổ sung được suy ra từ màu chủ đề chính và sau đó được sử dụng trong các hình dạng:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Màu phụ trợ 4
shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 50, 50)
shape1.fill_format.fill_type = slides.FillType.SOLID
shape1.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
# Màu phụ trợ 4, Nhẹ hơn 80%
shape2 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 70, 50, 50)
shape2.fill_format.fill_type = slides.FillType.SOLID
shape2.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape2.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.2)
shape2.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.8)
# Màu phụ trợ 4, Nhẹ hơn 60%
shape3 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 130, 50, 50)
shape3.fill_format.fill_type = slides.FillType.SOLID
shape3.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape3.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.4)
shape3.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.6)
# Màu phụ trợ 4, Nhẹ hơn 40%
shape4 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 190, 50, 50)
shape4.fill_format.fill_type = slides.FillType.SOLID
shape4.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape4.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.6)
shape4.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.4)
# Màu phụ trợ 4, Đậm hơn 25%
shape5 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 250, 50, 50)
shape5.fill_format.fill_type = slides.FillType.SOLID
shape5.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape5.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.75)
# Màu phụ trợ 4, Đậm hơn 50%
shape6 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 310, 50, 50)
shape6.fill_format.fill_type = slides.FillType.SOLID
shape6.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape6.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.5)
presentation.save("example.pptx", slides.export.SaveFormat.PPTX)
Ánh xạ SchemeColor tới các màu ColorScheme
Khi bạn làm việc với SchemeColor, bạn có thể nhận thấy nó chứa các giá trị màu chủ đề sau:
BACKGROUND1, BACKGROUND2, TEXT1, và TEXT2.
Tuy nhiên, Presentation.master_theme.color_scheme trả về ColorScheme, mà cung cấp các màu tương ứng dưới dạng:
dark1, dark2, light1, và light2.
Sự khác nhau này chỉ ở cách đặt tên. Các giá trị này đề cập đến cùng các vị trí màu chủ đề và ánh xạ là cố định:
TEXT1=dark1BACKGROUND1=light1TEXT2=dark2BACKGROUND2=light2
Không có chuyển đổi động nào giữa TEXT/BACKGROUND và dark/light. Chúng chỉ là các tên thay thế cho cùng các màu chủ đề.
Sự khác biệt trong cách đặt tên này xuất phát từ thuật ngữ của Microsoft Office. Các phiên bản Office cũ sử dụng Dark 1, Light 1, Dark 2, và Light 2, trong khi các phiên bản giao diện người dùng mới hiển thị cùng các vị trí dưới dạng Text 1, Background 1, Text 2, và Background 2.
Thay đổi phông chữ chủ đề
Để cho phép bạn chọn phông chữ cho các chủ đề và các mục đích khác, Aspose.Slides sử dụng các định danh đặc biệt này (tương tự như trong PowerPoint):
- +mn‑lt — Phông chữ thân Latin (Phông chữ Latin phụ)
- +mj‑lt — Phông chữ tiêu đề Latin (Phông chữ Latin chính)
- +mn‑ea — Phông chữ thân Đông Á (Phông chữ Đông Á phụ)
- +mj‑ea — Phông chữ tiêu đề Đông Á (Phông chữ Đông Á chính)
Đoạn mã Python này cho thấy cách gán phông chữ Latin cho một yếu tố chủ đề:
portion = slides.Portion("Theme text format")
portion.portion_format.latin_font = slides.FontData("+mn-lt")
paragraph = slides.Paragraph()
paragraph.portions.add(portion)
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 100)
shape.text_frame.paragraphs.add(paragraph)
Đoạn ví dụ Python này cho thấy cách thay đổi phông chữ chủ đề của bản trình chiếu:
presentation.master_theme.font_scheme.minor.latin_font = slides.FontData("Arial")
Tất cả các hộp văn bản sẽ được cập nhật sang phông chữ mới.
TIP
Để biết thêm thông tin, xem Phông chữ PowerPoint chính trong Python.Thay đổi kiểu nền chủ đề
Mặc định, PowerPoint cung cấp 12 nền được định nghĩa trước, nhưng một bản trình chiếu điển hình chỉ lưu trữ 3 trong số chúng.

Ví dụ, sau khi bạn lưu một bản trình chiếu trong PowerPoint, bạn có thể chạy đoạn mã Python sau để xác định có bao nhiêu nền được định nghĩa trước trong nó:
with slides.Presentation() as presentation:
number_of_background_fills = len(presentation.master_theme.format_scheme.background_fill_styles)
print(f"Number of theme background fill styles: {number_of_background_fills}")
background_fill_styles từ lớp FormatScheme bạn có thể thêm hoặc truy cập các kiểu nền trong một chủ đề PowerPoint.
Đoạn ví dụ Python này cho thấy cách đặt nền cho bản trình chiếu:
presentation.masters[0].background.style_index = 2 # 0 biểu thị không có màu nền; chỉ mục bắt đầu từ 1.
TIP
Để biết thêm thông tin, xem Quản lý nền bản trình chiếu trong Python.Thay đổi hiệu ứng chủ đề
Một chủ đề PowerPoint thường bao gồm ba giá trị trong mỗi mảng kiểu. Các mảng này kết hợp thành ba cấp độ hiệu ứng: nhẹ, vừa và mạnh. Ví dụ, đây là kết quả khi các hiệu ứng đó được áp dụng cho một hình dạng cụ thể:

Sử dụng ba thuộc tính—FillStyles, LineStyles, và EffectStyles—từ lớp FormatScheme bạn có thể chỉnh sửa các yếu tố chủ đề (thậm chí linh hoạt hơn so với PowerPoint).
Đoạn mã Python này cho thấy cách thay đổi hiệu ứng chủ đề bằng cách thay đổi các phần của những yếu tố đó:
with slides.Presentation("sample.pptx") as presentation:
presentation.master_theme.format_scheme.line_styles[0].fill_format.solid_fill_color.color = draw.Color.red
presentation.master_theme.format_scheme.fill_styles[2].fill_type = slides.FillType.SOLID
presentation.master_theme.format_scheme.fill_styles[2].solid_fill_color.color = draw.Color.forest_green
presentation.master_theme.format_scheme.effect_styles[2].effect_format.outer_shadow_effect.distance = 10
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Các thay đổi kết quả bao gồm cập nhật màu nền, loại nền, hiệu ứng bóng đổ và các thuộc tính khác:

Câu hỏi thường gặp
Tôi có thể áp dụng một chủ đề cho một slide riêng lẻ mà không thay đổi master không?
Có. Aspose.Slides hỗ trợ ghi đè chủ đề ở mức slide, vì vậy bạn có thể áp dụng một chủ đề cục bộ chỉ cho slide đó trong khi giữ nguyên chủ đề master (thông qua SlideThemeManager).
Cách an toàn nhất để chuyển một chủ đề từ bản trình chiếu này sang bản trình chiếu khác là gì?
Clone slides cùng với master của chúng vào bản trình chiếu đích. Điều này giữ nguyên master, bố cục và chủ đề liên quan nên giao diện vẫn nhất quán.
Làm thế nào để tôi xem các giá trị “effective” sau tất cả việc kế thừa và ghi đè?
Sử dụng các “effective” view của API [/slides/vi/python-net/shape-effective-properties/] cho theme/color/font/effect. Các view này trả về các thuộc tính đã được giải quyết, cuối cùng sau khi áp dụng master cộng với bất kỳ ghi đè cục bộ nào.