Osadzanie czcionek w prezentacjach przy użyciu PHP
Wprowadzenie
Czcionki osadzone w PowerPoint są przydatne, kiedy chcesz, aby Twoja prezentacja wyświetlała się prawidłowo na każdym systemie lub urządzeniu. Jeśli użyłeś czcionki zewnętrznej lub niestandardowej, ponieważ byłeś kreatywny w swojej pracy, masz jeszcze więcej powodów, aby osadzić tę czcionkę. W przeciwnym razie (bez osadzonych czcionek) teksty lub liczby na slajdach, układ, stylizacja itp. mogą się zmienić lub zamienić w nieczytelne prostokąty.
Klasy FontsManager, FontData oraz Compress zawierają większość metod potrzebnych do pracy z osadzonymi czcionkami w prezentacjach PowerPoint.
Pobieranie i usuwanie osadzonych czcionek
Aspose.Slides udostępnia metodę getEmbeddedFonts (udostępnioną przez klasę FontsManager), aby umożliwić pobranie (lub sprawdzenie) czcionek osadzonych w prezentacji. Aby usunąć czcionki, używana jest metoda removeEmbeddedFont (udostępniona przez tę samą klasę).
Ten kod PHP pokazuje, jak pobrać i usunąć osadzone czcionki z prezentacji:
# Tworzy obiekt Presentation, który reprezentuje plik prezentacji
$pres = new Presentation("EmbeddedFonts.pptx");
try {
# Renderuje slajd zawierający ramkę tekstową używającą osadzonej czcionki "FunSized"
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Zapisuje obraz na dysku w formacie JPEG
try {
$slideImage->save("picture1_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
$fontsManager = $pres->getFontsManager();
# Pobiera wszystkie osadzone czcionki
$embeddedFonts = $fontsManager->getEmbeddedFonts();
# Znajduje czcionkę "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;
}
}
# Usuwa czcionkę "Calibri"
$fontsManager->removeEmbeddedFont($calibriEmbeddedFont);
# Renderuje prezentację; "Calibri" czcionka zostaje zastąpiona istniejącą
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Zapisuje obraz na dysku w formacie JPEG
try {
$slideImage->save("picture2_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
# Zapisuje prezentację bez osadzonej czcionki "Calibri" na dysku
$pres->save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat::Ppt);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Dodawanie osadzonych czcionek
Korzystając z klasy EmbedFontCharacters oraz dwóch przeciążeń metody addEmbeddedFont, możesz wybrać preferowaną zasadę (osadzania), aby osadzić czcionki w prezentacji. Ten kod PHP pokazuje, jak osadzić i dodać czcionki do prezentacji:
# Ładuje prezentację
$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();
}
}
# Zapisuje prezentację na dysku
$pres->save("AddEmbeddedFont_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Kompresja osadzonych czcionek
Aby umożliwić kompresję czcionek osadzonych w prezentacji i zmniejszyć rozmiar pliku, Aspose.Slides udostępnia metodę compressEmbeddedFonts (udostępnioną przez klasę Compress).
Ten kod PHP pokazuje, jak skompresować osadzone czcionki 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
Jak mogę stwierdzić, że konkretna czcionka w prezentacji zostanie nadal podmieniona podczas renderowania pomimo osadzenia?
Sprawdź substitution information w menedżerze czcionek oraz fallback/substitution rules: jeśli czcionka jest niedostępna lub ograniczona, zostanie użyta czcionka zapasowa.
Czy warto osadzać czcionki „systemowe”, takie jak Arial/Calibri?
Zazwyczaj nie — są prawie zawsze dostępne. Jednak w celu pełnej przenośności w „cienkich” środowiskach (Docker, serwer Linux bez wstępnie zainstalowanych czcionek) osadzanie czcionek systemowych może wyeliminować ryzyko nieoczekiwanej podmiany.