Betűkészletek beágyazása prezentációkba .NET-ben
Bevezetés
A betűkészletek beágyazása betűkészlet-adatot tárol a PowerPoint‑prezentációban. Ha a megtekintő támogatja a beágyazott betűkészleteket, akkor a szöveget ezekkel a betűkkel jelenítheti meg, még akkor is, ha nincsenek telepítve a célrendszeren. Ez segít megőrizni a sortöréseket, a szövegközt és a diaelrendezést.
Az Aspose.Slides for .NET lehetővé teszi a beágyazott betűkészletek lekérdezését, hozzáadását és eltávolítását a FontsManager tulajdonságán keresztül egy Presentation-nél. A beágyazott betűkészlet‑adat méretét is csökkenthetjük azáltal, hogy eltávolítjuk a prezentáció által nem használt karaktereket.
Az alábbi példák PPTX fájlokkal működnek. A betűkészlet beágyazása előtt győződjön meg arról, hogy a betűkészlet‑adat elérhető az Aspose.Slides számára, és a licenc engedélyezi a beágyazást.
Beágyazott betűkészletek lekérdezése és eltávolítása
Használja a GetEmbeddedFonts metódust a prezentációban tárolt betűkészletek listázásához. Egy betűkészlet eltávolításához adja át a listából egy betűt a RemoveEmbeddedFont metódusnak, majd mentse a prezentációt.
Az alábbi példa listázza a EmbeddedFonts.pptx fájlban beágyazott betűkészleteket, és eltávolítja a Calibri‑t, ha megtalálható:
using System;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("EmbeddedFonts.pptx");
var fontsManager = presentation.FontsManager;
var embeddedFonts = fontsManager.GetEmbeddedFonts();
foreach (var font in embeddedFonts)
{
Console.WriteLine(font.FontName);
}
var fontToRemove = Array.Find(embeddedFonts, font => string.Equals(font.FontName, "Calibri", StringComparison.OrdinalIgnoreCase));
if (fontToRemove != null)
{
fontsManager.RemoveEmbeddedFont(fontToRemove);
presentation.Save("WithoutEmbeddedCalibri.pptx", SaveFormat.Pptx);
}
else
{
Console.WriteLine("Calibri is not embedded. No output file was created.");
}
A beágyazott betűkészlet eltávolítása a tárolt betűkészlet‑adatot törli; nem változtatja meg a szöveghez rendelt betűtípust. Ha a betűkészlet telepítve van a célrendszeren, a szöveg továbbra is használhatja azt. Ellenkező esetben a rendereléshez szükség lehet a font substitution alkalmazására, ami befolyásolhatja a megjelenést.
Betűkészlet-adatok és beágyazási jogosultságok ellenőrzése
Használja az IFontsManager interfészt a betűkészletek beágyazása előtti vizsgálathoz. Hívja meg az IFontsManager.GetFonts metódust a prezentációban használt betűkészletek lekérdezéséhez. Minden betűkészletnél adjon át egy IFontData objektumot és a kívánt FontStyleType értéket a IFontsManager.GetFontBytes metódusnak. A metódus a betűkészlet‑stílus bináris adatait adja vissza, vagy null‑t, ha a kért betű vagy stílus nem érhető el. Ne adjon át null eredményt a IFontsManager.GetFontEmbeddingLevel metódusnak, mivel ez egy byte‑tömböt vár.
EmbeddingLevel egy jelző‑enumeráció, amely a betűkészletben tárolt beágyazási korlátozásokat jelzi:
Installableengedélyezi a beágyazást és a betűkészlet állandó telepítését egy másik rendszerre, a betűkészlet licencének feltételei szerint.Restrictedmegtiltja a beágyazást, kivéve ha a betűkészlet jogtulajdonosától engedélyt kapunk, amikor ez az egyetlen használati‑jogosultság jelző.PreviewPrintátmeneti használatot engedélyez megtekintéshez és nyomtatáshoz; a betűt tartalmazó dokumentumnak csak olvasható módú kell lennie.Editableátmeneti használatot engedélyez, és a dokumentum szerkeszthető és menthető.NoSubsettingtovábbi korlátozás, amely megtiltja a betűkészlet csak egy részhalmazának beágyazását. Ha ez a jelző jelen van, az összes karaktert be kell ágyazni.BitmapOnlytovábbi korlátozás, amely csak bitmap‑sorozatok beágyazását engedélyezi, nem az outline adatokat. Ha a betűkészlet nem tartalmaz bitmap‑sorozatokat, nem ágyazható be.
Az első négy érték a használati jogot írja le, míg a NoSubsetting és a BitmapOnly kombinálható velük. A módosítókat bit‑műveletekkel kell ellenőrizni. Mivel az Installable értéke nulla, ne használja a HasFlag‑et a detektálásához; maszkolja a használati‑jogosultsági biteket, és hasonlítsa össze az eredményt az Installable‑el. Az aktuális betűkészletek legfeljebb egy használati‑jogosultsági bitet állítanak be. Az régebbi betűkészletek, amelyek egynél több bitet állítanak be, a lenti segédfüggvény a legkevésbé korlátozó jogosultságot választja: Editable, majd PreviewPrint, majd Restricted.
Az alábbi példa ellenőrzi a GetFonts által visszaadott minden betűkészlethez elérhető normál, félkövér, dőlt és félkövér‑dőlt adatokat. Kihagyja a nem elérhető stílusokat, a korlátozott betűkészleteket, a csak bitmap‑betűket, a csak előnézet‑és‑nyomtatás‑célú betűket, mivel a kimenet szerkeszthető marad, valamint a már beágyazott betűkészleteket. Ha bármely elérhető stílus NoSubsetting‑et tartalmaz, az összes karaktert beágyazza az adott betűcsaládhoz.
using System;
using System.Collections.Generic;
using Aspose.Slides;
using Aspose.Slides.Export;
static EmbeddingLevel GetUsagePermission(EmbeddingLevel level)
{
const EmbeddingLevel permissionMask = EmbeddingLevel.Restricted | EmbeddingLevel.PreviewPrint | EmbeddingLevel.Editable;
var permissions = level & permissionMask;
if ((permissions & EmbeddingLevel.Editable) != 0)
{
return EmbeddingLevel.Editable;
}
if ((permissions & EmbeddingLevel.PreviewPrint) != 0)
{
return EmbeddingLevel.PreviewPrint;
}
if ((permissions & EmbeddingLevel.Restricted) != 0)
{
return EmbeddingLevel.Restricted;
}
return EmbeddingLevel.Installable;
}
using var presentation = new Presentation("Fonts.pptx");
var fontsManager = presentation.FontsManager;
var fontStyles = new[]
{
FontStyleType.Regular,
FontStyleType.Bold,
FontStyleType.Italic,
FontStyleType.Bold | FontStyleType.Italic
};
var embeddedFontNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (var embeddedFont in fontsManager.GetEmbeddedFonts())
{
embeddedFontNames.Add(embeddedFont.FontName);
}
var embeddingPlan = new List<(IFontData Font, EmbedFontCharacters Rule)>();
foreach (var font in fontsManager.GetFonts())
{
if (embeddedFontNames.Contains(font.FontName))
{
Console.WriteLine($"{font.FontName}: already embedded.");
continue;
}
var hasAvailableData = false;
var allAvailableStylesCanBeEmbedded = true;
var previewPrintOnly = false;
var requiresFullFont = false;
foreach (var fontStyle in fontStyles)
{
var fontBytes = fontsManager.GetFontBytes(font, fontStyle);
if (fontBytes == null)
{
Console.WriteLine($"{font.FontName} ({fontStyle}): font data is unavailable.");
continue;
}
hasAvailableData = true;
var embeddingLevel = fontsManager.GetFontEmbeddingLevel(fontBytes, font.FontName);
var usagePermission = GetUsagePermission(embeddingLevel);
var noSubsetting = (embeddingLevel & EmbeddingLevel.NoSubsetting) != 0;
var bitmapOnly = (embeddingLevel & EmbeddingLevel.BitmapOnly) != 0;
requiresFullFont |= noSubsetting;
previewPrintOnly |= usagePermission == EmbeddingLevel.PreviewPrint;
allAvailableStylesCanBeEmbedded &= usagePermission != EmbeddingLevel.Restricted && !bitmapOnly;
Console.WriteLine($"{font.FontName} ({fontStyle}): {embeddingLevel}.");
}
if (!hasAvailableData)
{
Console.WriteLine($"{font.FontName}: skipped because no requested style is available.");
}
else if (!allAvailableStylesCanBeEmbedded)
{
Console.WriteLine($"{font.FontName}: skipped because at least one available style does not permit outline embedding.");
}
else if (previewPrintOnly)
{
Console.WriteLine($"{font.FontName}: skipped because this example produces an editable presentation.");
}
else
{
var rule = requiresFullFont ? EmbedFontCharacters.All : EmbedFontCharacters.OnlyUsed;
embeddingPlan.Add((font, rule));
}
}
foreach (var item in embeddingPlan)
{
fontsManager.AddEmbeddedFont(item.Font, item.Rule);
}
presentation.Save("WithAuditedFonts.pptx", SaveFormat.Pptx);
Ez a vizsgálat jelentést készít a betűkészlet‑fájlokban kódolt korlátozásokról. Nem ad licencet, nem bizonyítja, hogy a betűkészletet jogszerűen szerezte be, és nem helyettesíti a betűkészlet licencszerződésének ellenőrzését a beágyazott másolat terjesztése előtt.
Beágyazott betűkészletek hozzáadása
Használja a AddEmbeddedFont metódust betűkészlet beágyazásához. A túlterhelések vagy egy IFontData objektumot, vagy egy byte‑tömböt várnak, amely a betűkészlet‑adatot tartalmazza. Az EmbedFontCharacters enumeráció szabályozza, hogy mely karakterek legyenek belefoglalva:
- All az összes karaktert beágyazza a betűkészletből. Ezt a lehetőséget akkor válassza, ha a címzetteknek szerkeszteniük kell a prezentációt és új szöveget beírni.
- OnlyUsed csak a prezentációban használt karaktereket ágyazza be a fájlméret csökkentése érdekében. Válassza ezt a befejezett, főként megtekintésre szánt prezentációk esetén.
Az alábbi példa a GetFonts metódussal lekéri a Fonts.pptx fájlban használt betűkészleteket, és beágyazza azokat, amelyek még nincsenek beágyazva. A hozzáadandó betűkészleteknek elérhetőnek kell lenniük a kódot futtató gépen. A már létező beágyazott betűkészletek megtartják a jelenlegi karakterkészletüket.
using System;
using System.Collections.Generic;
using System.Linq;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("Fonts.pptx");
var fontsManager = presentation.FontsManager;
var allFonts = fontsManager.GetFonts();
var embeddedFonts = fontsManager.GetEmbeddedFonts();
var embeddedFontNames = embeddedFonts.Select(font => font.FontName);
var embeddedNames = new HashSet<string>(embeddedFontNames, StringComparer.OrdinalIgnoreCase);
foreach (var font in allFonts)
{
if (!embeddedNames.Contains(font.FontName))
{
fontsManager.AddEmbeddedFont(font, EmbedFontCharacters.All);
embeddedNames.Add(font.FontName);
}
}
presentation.Save("WithEmbeddedFonts.pptx", SaveFormat.Pptx);
Beágyazott betűkészletek tömörítése
A CompressEmbeddedFonts csökkenti a beágyazott betűkészlet‑adat méretét a nem használt karakterek eltávolításával. Már beágyazott betűkészleteken dolgozik, így a méretcsökkentés attól függ, mennyi felesleges betűkészlet‑adatot tartalmaz a prezentáció.
Az alábbi példa tömöríti a EmbeddedFonts.pptx fájl betűkészleteit, és a végeredményt külön fájlként menti:
using Aspose.Slides;
using Aspose.Slides.Export;
using Aspose.Slides.LowCode;
using var presentation = new Presentation("EmbeddedFonts.pptx");
Compress.CompressEmbeddedFonts(presentation);
presentation.Save("CompressedEmbeddedFonts.pptx", SaveFormat.Pptx);
Tartsa meg az eredeti fájlt, ha a címzettek később szöveget szeretnének hozzáadni. A tömörítés során eltávolított karakterek már nem érhetők el a beágyazott betűkészletből, még akkor sem, ha eleinte minden karaktert beágyazott.
GYIK
Hogyan ellenőrizhetem, hogy egy beágyazott betűkészlet továbbra is helyettesítésre kerül-e a renderelés során?
Hívja meg a GetSubstitutions metódust abban a környezetben, ahol a prezentációt rendereli, hogy megtudja, mely betűkészleteket fogja az Aspose.Slides helyettesíteni. Ellenőrizze továbbá a font substitution beállításokat és a font fallback szabályokat. A fallback a hiányzó karaktereket kezeli, ezért egy betűkészlet beágyazása nem old meg minden olyan karaktert, amelyet a betűkészlet maga sem tartalmaz.
Érdemes-e általános betűkészleteket, például az Arial‑t és a Calibri‑t beágyazni?
A döntést a célkörnyezet alapján hozza. Ha a szükséges betűkészletek minden gépen elérhetők, amely megnyitja vagy rendereli a prezentációt, a beágyazás felesleges fájlméret-növekedést okozhat. Ha a címzettek vagy szerverek esetleg nem rendelkeznek ezekkel a betűkészletekkel, a beágyazás segíthet megőrizni a kívánt megjelenést, feltéve hogy a licencük engedélyezi azt.