Встраивание шрифтов в презентации в .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‑сервер без предустановленных шрифтов) встраивание системных шрифтов может устранить риск неожиданной замены.