Встраивание шрифтов в презентации с помощью Python

Обзор

Встраивание шрифтов в PowerPoint обеспечивает сохранение задуманного внешнего вида вашей презентации на разных системах. Независимо от того, используете ли вы уникальные шрифты для креативности или стандартные, встраивание шрифтов предотвращает нарушения текста и макета.

Если вы использовали сторонний или нестандартный шрифт, потому что проявили креативность в работе, у вас есть ещё больше причин встраивать шрифт. В противном случае (без встраиваемых шрифтов) тексты или цифры на слайдах, макет, стиль и т.п. могут измениться или превратиться в запутанные прямоугольники.

Используйте классы FontsManager, FontData, и Compress для управления встраиваемыми шрифтами.

Получение и удаление встраиваемых шрифтов

Легко извлекайте или удаляйте встраиваемые шрифты из презентации с помощью методов get_embedded_fonts и remove_embedded_font.

Этот Python-код показывает, как получить и удалить встраиваемые шрифты из презентации:

import aspose.slides as slides
import aspose.pydrawing as draw

# Создайте объект класса Presentation, представляющий файл презентации.
with slides.Presentation("EmbeddedFonts.pptx") as presentation:
    slide = presentation.slides[0]

    # Отобразите слайд, содержащий текстовый фрейм, использующий встроенный шрифт 'FunSized'.
    with slide.get_image(draw.Size(960, 720)) as image:
        image.save("picture1_out.png", slides.ImageFormat.PNG)

    fonts_manager = presentation.fonts_manager

    # Получить все встроенные шрифты.
    embedded_fonts = fonts_manager.get_embedded_fonts()

    # Найти шрифт 'Calibri'.
    font_data = list(filter(lambda data : data.font_name == "Calibri", embedded_fonts))[0]

    # Удалить шрифт 'Calibri'.
    fonts_manager.remove_embedded_font(font_data)

    # Отобразить слайд; шрифт 'Calibri' будет заменён существующим.
    with slide.get_image(draw.Size(960, 720)) as image:
        image.save("picture2_out.png", slides.ImageFormat.PNG)

    # Сохранить презентацию без встроенного шрифта 'Calibri' на диск.
    presentation.save("WithoutEmbeddedFonts.ppt", slides.export.SaveFormat.PPT)

Добавление встраиваемых шрифтов

Используя перечисление EmbedFontCharacters, а также две перегрузки метода add_embedded_font, вы можете выбрать предпочитаемое (встраиваемое) правило для встраивания шрифтов в презентацию. Этот Python-код демонстрирует, как встраивать и добавлять шрифты в презентацию:

import aspose.slides as slides

# Загрузить презентацию.
with slides.Presentation("Fonts.pptx") as presentation:
    all_fonts = presentation.fonts_manager.get_fonts()
    embedded_fonts = presentation.fonts_manager.get_embedded_fonts()

    for font in all_fonts:
        if font not in embedded_fonts:
            presentation.fonts_manager.add_embedded_font(font, slides.export.EmbedFontCharacters.ALL)

    # Сохранить презентацию на диск.
    presentation.save("AddEmbeddedFont.pptx", slides.export.SaveFormat.PPTX)

Сжатие встраиваемых шрифтов

Оптимизируйте размер файла, сжимая встраиваемые шрифты с помощью compress_embedded_fonts.

Пример кода для сжатия:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slides.lowcode.Compress.compress_embedded_fonts(presentation)
    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

FAQ

Как узнать, что конкретный шрифт в презентации всё равно будет заменён при рендеринге, несмотря на встраивание?

Проверьте информацию о замене в менеджере шрифтов и правила fallback/замены: если шрифт недоступен или ограничен, будет использован резервный вариант.

Стоит ли встраивать системные шрифты, такие как Arial/Calibri?

Обычно нет — они почти всегда доступны. Но для полной переносимости в «тонких» средах (Docker, Linux-сервер без предустановленных шрифтов) встраивание системных шрифтов может устранить риск неожиданных замен.