Встраивание шрифтов в презентации с использованием PHP
Встроенные шрифты в PowerPoint полезны, когда вы хотите, чтобы ваша презентация отображалась правильно на любой системе или устройстве. Если вы использовали сторонний или нестандартный шрифт, потому что проявили креативность в работе, то у вас есть еще больше причин встраивать шрифт. В противном случае (без встроенных шрифтов) текст или цифры на слайдах, макет, стили и т.д. могут измениться или превратиться в непонятные прямоугольники.
Класс FontsManager , класс FontData и класс Compress содержат большинство методов, необходимых для работы со встроенными шрифтами в презентациях PowerPoint.
Получить и удалить встроенные шрифты
Aspose.Slides предоставляет метод getEmbeddedFonts (доступный через класс FontsManager ), позволяющий получить (или узнать) шрифты, встроенные в презентацию. Чтобы удалить шрифты, используется метод removeEmbeddedFont (доступный через тот же класс).
Этот PHP‑код показывает, как получить и удалить встроенные шрифты из презентации:
# Создает объект Presentation, представляющий файл презентации
$pres = new Presentation("EmbeddedFonts.pptx");
try {
# Рендерит слайд, содержащий текстовый фрейм, использующий встроенный "FunSized"
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Сохраняет изображение на диск в формате JPEG
try {
$slideImage->save("picture1_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
$fontsManager = $pres->getFontsManager();
# Получает все встроенные шрифты
$embeddedFonts = $fontsManager->getEmbeddedFonts();
# Находит шрифт "Calibri"
$calibriEmbeddedFont = null;
$Array = new java_class("java.lang.reflect.Array");
for($i = 0; $i < java_values($Array->getLength($embeddedFonts)) ; $i++) {
echo("" . $embeddedFonts[$i]->getFontName());
if ("Calibri"->equals($embeddedFonts[$i]->getFontName())) {
$calibriEmbeddedFont = $embeddedFonts[$i];
break;
}
}
# Удаляет шрифт "Calibri"
$fontsManager->removeEmbeddedFont($calibriEmbeddedFont);
# Рендерит презентацию; шрифт "Calibri" заменяется существующим
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Сохраняет изображение на диск в формате JPEG
try {
$slideImage->save("picture2_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
# Сохраняет презентацию без встроенного шрифта "Calibri" на диск
$pres->save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat::Ppt);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Добавить встроенные шрифты
С помощью класса EmbedFontCharacters и двух перегрузок метода addEmbeddedFont вы можете выбрать предпочтительное правило (встраивания) для включения шрифтов в презентацию. Этот PHP‑код показывает, как встроить и добавить шрифты в презентацию:
# Загружает презентацию
$pres = new Presentation("Fonts.pptx");
try {
$allFonts = $pres->getFontsManager()->getFonts();
$embeddedFonts = $pres->getFontsManager()->getEmbeddedFonts();
$Array = new java_class("java.lang.reflect.Array");
foreach($allFonts as $font) {
$embeddedFontsContainsFont = false;
for($i = 0; $i < java_values($Array->getLength($embeddedFonts)) ; $i++) {
if ($embeddedFonts[$i]->equals($font)) {
$embeddedFontsContainsFont = true;
break;
}
}
if (!$embeddedFontsContainsFont) {
$pres->getFontsManager()->addEmbeddedFont($font, EmbedFontCharacters->All);
$embeddedFonts = $pres->getFontsManager()->getEmbeddedFonts();
}
}
# Сохраняет презентацию на диск
$pres->save("AddEmbeddedFont_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Сжать встроенные шрифты
Чтобы вы могли сжать встроенные в презентацию шрифты и уменьшить размер файла, Aspose.Slides предоставляет метод compressEmbeddedFonts (доступный через класс Compress ).
Этот PHP‑код показывает, как сжать встроенные шрифты PowerPoint:
$pres = new Presentation("pres.pptx");
try {
Compress->compressEmbeddedFonts($pres);
$pres->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
Как определить, что конкретный шрифт в презентации всё равно будет заменён при рендеринге, несмотря на встраивание?
Проверьте информацию о замене в менеджере шрифтов и правила резервных/заменяющих шрифтов: если шрифт недоступен или ограничен, будет использован резервный шрифт.
Стоит ли встраивать «системные» шрифты, такие как Arial/Calibri?
Обычно нет — они почти всегда доступны. Но для полной переносимости в «тонких» окружениях (Docker, Linux‑сервер без предустановленных шрифтов) встраивание системных шрифтов может исключить риск неожиданных замен.