Встраивание шрифтов в презентации в .NET

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

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

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

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

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

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

using (Presentation presentation = new Presentation("EmbeddedFonts.pptx"))
{
    ISlide slide = presentation.Slides[0];

    // Отрисовывает слайд, содержащий текстовый кадр, использующий встраиваемый "FunSized"
    using (IImage image = slide.GetImage(new Size(960, 720)))
    {
        image.Save("picture1_out.png", ImageFormat.Png);
    }

    IFontsManager fontsManager = presentation.FontsManager;

    IFontData[] embeddedFonts = fontsManager.GetEmbeddedFonts();

    // Находит шрифт "Calibri"
    IFontData funSizedEmbeddedFont = Array.Find(embeddedFonts, delegate (IFontData data)
    {
        return data.FontName == "Calibri";
    });

    // Удаляет шрифт "Calibri"
    fontsManager.RemoveEmbeddedFont(funSizedEmbeddedFont);

    // Отрисовывает презентацию; шрифт "Calibri" заменяется существующим
    using (IImage image = slide.GetImage(new Size(960, 720)))
    {
        image.Save("picture2_out.png", ImageFormat.Png);
    }

    // Сохраняет презентацию без встраиваемого шрифта "Calibri" на диск
    presentation.Save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat.Ppt);
}

Добавить встроенные шрифты

С помощью перечисления EmbedFontCharacters и двух перегрузок метода AddEmbeddedFont вы можете выбрать предпочтительное (встраиваемое) правило для включения шрифтов в презентацию. Этот код C# показывает, как встраивать и добавлять шрифты в презентацию:

// Загружает презентацию
Presentation presentation = new Presentation("Fonts.pptx");

IFontData[] allFonts = presentation.FontsManager.GetFonts();
IFontData[] embeddedFonts = presentation.FontsManager.GetEmbeddedFonts();
foreach (IFontData font in allFonts)
{
    if (!embeddedFonts.Contains(font))
    {
        presentation.FontsManager.AddEmbeddedFont(font, EmbedFontCharacters.All);
    }
}

// Сохраняет презентацию на диск
presentation.Save("AddEmbeddedFont_out.pptx", SaveFormat.Pptx);

Сжать встроенные шрифты

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

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

using (Presentation pres = new Presentation("pres.pptx"))
{
    Aspose.Slides.LowCode.Compress.CompressEmbeddedFonts(pres);
    pres.Save("pres-out.pptx", SaveFormat.Pptx);
}

FAQ

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

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

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

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