Vkládání písem do prezentací pomocí PHP
Úvod
Vložená písma v PowerPointu jsou užitečná, když chcete, aby se vaše prezentace zobrazovala správně na jakémkoli systému nebo zařízení. Pokud jste použili písmo třetí strany nebo nestandardní písmo, protože jste byli kreativní, máte ještě důvod k jeho vložení. Jinak (bez vložených písem) se mohou texty nebo čísla na snímcích, rozvržení, stylování atd. změnit nebo se proměnit v matoucí obdélníky.
Třída FontsManager, třída FontData a třída Compress obsahují většinu metod, které potřebujete pro práci s vloženými písmy v prezentacích PowerPoint.
Získání a odstranění vložených písem
Aspose.Slides poskytuje metodu getEmbeddedFonts (vystavenou třídou FontsManager), která vám umožní získat (nebo zjistit) písma vložená v prezentaci. Pro odstranění písem se používá metoda removeEmbeddedFont (vystavená stejnou třídou).
Tento PHP kód vám ukáže, jak získat a odstranit vložená písma z prezentace:
# Vytváří objekt Presentation, který představuje soubor prezentace
$pres = new Presentation("EmbeddedFonts.pptx");
try {
# Vykresluje snímek obsahující textový rámec, který používá vložené "FunSized"
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Uloží obrázek na disk ve formátu JPEG
try {
$slideImage->save("picture1_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
$fontsManager = $pres->getFontsManager();
# Získá všechna vložená písma
$embeddedFonts = $fontsManager->getEmbeddedFonts();
# Vyhledá písmo "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;
}
}
# Odstraní písmo "Calibri"
$fontsManager->removeEmbeddedFont($calibriEmbeddedFont);
# Vykresluje prezentaci; písmo "Calibri" je nahrazeno existujícím
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Uloží obrázek na disk ve formátu JPEG
try {
$slideImage->save("picture2_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
# Uloží prezentaci bez vloženého písma "Calibri" na disk
$pres->save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat::Ppt);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Přidání vložených písem
Pomocí třídy EmbedFontCharacters a dvou přetížení metody addEmbeddedFont můžete zvolit preferované (vkládací) pravidlo pro vložení písem do prezentace. Tento PHP kód vám ukáže, jak vložit a přidat písma do prezentace:
# Načte prezentaci
$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();
}
}
# Uloží prezentaci na disk
$pres->save("AddEmbeddedFont_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Komprese vložených písem
Abychom vám umožnili komprimovat písma vložená v prezentaci a snížit její velikost souboru, Aspose.Slides poskytuje metodu compressEmbeddedFonts (vystavenou třídou Compress).
Tento PHP kód vám ukáže, jak komprimovat vložená písma PowerPointu:
$pres = new Presentation("pres.pptx");
try {
Compress->compressEmbeddedFonts($pres);
$pres->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Často kladené otázky
Jak mohu zjistit, že konkrétní písmo v prezentaci bude i přes vložení při vykreslování nahrazeno?
Zkontrolujte informace o nahrazování ve správci písem a pravidla pro fallback/nahrazení: pokud je písmo nedostupné nebo omezené, bude použito záložní písmo.
Stojí za to vkládat „systémová“ písma jako Arial/Calibri?
Obvykle ne – tato písma jsou téměř vždy k dispozici. Ale pro úplnou přenositelnost v „tenkých“ prostředích (Docker, Linux server bez předinstalovaných písem) může vložení systémových písem eliminovat riziko neočekávaných náhrad.