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.

các thành phần của chủ đề

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ủ đề đó.

additional-palette-colors

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 = dark1
  • BACKGROUND1 = light1
  • TEXT2 = dark2
  • BACKGROUND2 = light2

Không có chuyển đổi động nào giữa TEXT/BACKGROUNDdark/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.

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.

todo:image_alt_text

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}")

Đ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.

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ể:

todo:image_alt_text

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:

todo:image_alt_text

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.