Betűkészletek beágyazása prezentációkba JavaScriptben
Bevezetés
A betűkészletek beágyazása a betűkészlet‑adatokat a PowerPoint‑prezentáción belül tárolja. Ha egy megjelenítő támogatja a beágyazott betűkészleteket, akkor a szöveget azokkal a betűkészletekkel jelenítheti meg, még akkor is, ha a célrendszeren nincsenek telepítve. Ez segít megőrizni a sortöréseket, a szövegtávolságokat és a diaelrendezést.
Az Aspose.Slides for Node.js via Java 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 osztályon keresztül, amelyet a Presentation.getFontsManager metódus ad vissza. A beágyazott betűkészlet‑adat méretét is csökkentheted a prezentáció által nem használt karakterek eltávolításával.
Az alábbi példák PPTX fájlokkal működnek. A betűkészlet beágyazása előtt győződj meg arról, hogy a betűkészlet‑adatok elérhetők az Aspose.Slides számára, és a licenc lehetővé teszi a beágyazást.
Beágyazott betűkészletek lekérése és eltávolítása
Használd a FontsManager.getEmbeddedFonts metódust a prezentációban tárolt betűkészletek felsorolásához. Egy betűkészlet eltávolításához add át a listából a kívánt betűkészletet a FontsManager.removeEmbeddedFont metódusnak, majd mentse el a prezentációt.
Az alábbi példa felsorolja a EmbeddedFonts.pptx fájlban lévő beágyazott betűkészleteket, és eltávolítja a Calibrít, ha jelen van:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("EmbeddedFonts.pptx");
try {
var fontsManager = presentation.getFontsManager();
var embeddedFonts = fontsManager.getEmbeddedFonts();
for (var i = 0; i < embeddedFonts.length; i++) {
console.log(embeddedFonts[i].getFontName());
}
var fontToRemove = null;
for (var i = 0; i < embeddedFonts.length; i++) {
if (String(embeddedFonts[i].getFontName()).toLowerCase() === "calibri") {
fontToRemove = embeddedFonts[i];
break;
}
}
if (fontToRemove !== null) {
fontsManager.removeEmbeddedFont(fontToRemove);
presentation.save("WithoutEmbeddedCalibri.pptx", aspose.slides.SaveFormat.Pptx);
} else {
console.log("Calibri is not embedded. No output file was created.");
}
} finally {
presentation.dispose();
}
A beágyazott betűkészlet eltávolítása a tárolt betűkészlet‑adatot távolítja el; 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 megjelenítéshez szükség lehet betűkészlet helyettesítésre, ami befolyásolhatja az elrendezést.
Betűkészlet‑adatok és beágyazási engedélyek vizsgálata
Használd a FontsManager osztályt a betűkészletek beágyazása előtti vizsgálatához. A prezentációban használt betűkészletek lekéréséhez hívd a FontsManager.getFonts metódust. Minden betűkészlethez add át egy FontData objektumot és a szükséges FontStyleType értéket a FontsManager.getFontBytes metódusnak. A metódus a betűkészlet stílusához tartozó bináris adatot adja vissza, vagy null‑t, ha a kért betűkészlet vagy stílus nem érhető el. Ne add át a null eredményt a FontsManager.getFontEmbeddingLevel metódusnak, mivel ez a metódus byte tömböt igényel. Node.js‑ben konvertáld a visszakapott JavaScript tömböt Java byte tömbbé a java.newArray segítségével, mielőtt átadnád a getFontEmbeddingLevel‑nek.
Az EmbeddingLevel jelenti a betűkészletben tárolt beágyazási korlátozásokat jelző zászlók halmazát:
Installablehozzáférést biztosít a beágyazáshoz és a másik rendszerbe történő állandó telepítéshez, a betűkészlet licencétől függően.Restrictedmegtiltja a beágyazást, kivéve ha a betűkészlet jogtulajdonosától engedélyt kap, ha ez az egyetlen használati engedély zászló.PreviewPrintátmeneti használatot engedélyez megtekintésre és nyomtatásra; a betűkészletet tartalmazó dokumentumnak csak olvashatónak kell lennie.Editableátmeneti használatot engedélyez, és lehetővé teszi a dokumentum szerkesztését és mentését.NoSubsettingtovábbi korlátozás, amely megtiltja a betűkészlet csak részhalmazának beágyazását. Ha ez a zászló jelen van, az összes karaktert be kell ágyazni.BitmapOnlytovábbi korlátozás, amely csak bitmap változatok beágyazását engedélyezi, nem pedig a kontúr adatokat. Ha a betűkészletnek nincs bitmap változata, nem ágyazható be.
Az első négy érték a használati engedélyt írja le, míg a NoSubsetting és a BitmapOnly ezekkel kombinálható. A módosítókat bitenkénti műveletekkel ellenőrizd. Mivel az Installable értéke nulla, maszkolni kell a használati engedély biteket, és az eredményt az Installable‑lel kell összehasonlítani, ahelyett, hogy zászlóként ellenőriznéd. A jelenlegi betűkészleteknek legfeljebb egy használati engedély bitet kell beállítaniuk. A régebbi, több bitet állító betűkészletekkel való kompatibilitás érdekében az alábbi segédfüggvény a legkevésbé szigorú engedélyt választja: először Editable, aztán PreviewPrint, végül Restricted.
Az alábbi példa áttekinti 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 változatot tartalmazó betűkészleteket, a csak megtekintésre és nyomtatásra korlátozott betűkészleteket, mivel a kimenet szerkeszthető marad, valamint a már beágyazott betűkészleteket. Ha bármely elérhető stílus rendelkezik NoSubsetting zászlóval, akkor az összes karaktert beágyazza az adott betűkészletcsaládhoz.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var java = require("java");
function getUsagePermission(level) {
var permissionMask = aspose.slides.EmbeddingLevel.Restricted | aspose.slides.EmbeddingLevel.PreviewPrint | aspose.slides.EmbeddingLevel.Editable;
var permissions = level & permissionMask;
if ((permissions & aspose.slides.EmbeddingLevel.Editable) !== 0) {
return aspose.slides.EmbeddingLevel.Editable;
}
if ((permissions & aspose.slides.EmbeddingLevel.PreviewPrint) !== 0) {
return aspose.slides.EmbeddingLevel.PreviewPrint;
}
if ((permissions & aspose.slides.EmbeddingLevel.Restricted) !== 0) {
return aspose.slides.EmbeddingLevel.Restricted;
}
return aspose.slides.EmbeddingLevel.Installable;
}
var presentation = new aspose.slides.Presentation("Fonts.pptx");
try {
var fontsManager = presentation.getFontsManager();
var fontStyles = [aspose.slides.FontStyleType.Regular, aspose.slides.FontStyleType.Bold, aspose.slides.FontStyleType.Italic, aspose.slides.FontStyleType.Bold | aspose.slides.FontStyleType.Italic];
var embeddedFontNames = new Set();
var embeddedFonts = fontsManager.getEmbeddedFonts();
for (var i = 0; i < embeddedFonts.length; i++) {
embeddedFontNames.add(String(embeddedFonts[i].getFontName()).toLowerCase());
}
var fontsToEmbed = [];
var embeddingRules = [];
var fonts = fontsManager.getFonts();
for (var i = 0; i < fonts.length; i++) {
var font = fonts[i];
var fontName = String(font.getFontName());
if (embeddedFontNames.has(fontName.toLowerCase())) {
console.log(fontName + ": already embedded.");
continue;
}
var hasAvailableData = false;
var allAvailableStylesCanBeEmbedded = true;
var previewPrintOnly = false;
var requiresFullFont = false;
for (var j = 0; j < fontStyles.length; j++) {
var fontStyle = fontStyles[j];
var fontBytes = fontsManager.getFontBytes(font, fontStyle);
if (fontBytes === null) {
console.log(fontName + " (" + fontStyle + "): font data is unavailable.");
continue;
}
hasAvailableData = true;
var fontByteValues = Array.from(fontBytes);
var javaFontBytes = java.newArray("byte", fontByteValues);
var embeddingLevel = fontsManager.getFontEmbeddingLevel(javaFontBytes, fontName);
var usagePermission = getUsagePermission(embeddingLevel);
var noSubsetting = (embeddingLevel & aspose.slides.EmbeddingLevel.NoSubsetting) !== 0;
var bitmapOnly = (embeddingLevel & aspose.slides.EmbeddingLevel.BitmapOnly) !== 0;
requiresFullFont = requiresFullFont || noSubsetting;
previewPrintOnly = previewPrintOnly || usagePermission === aspose.slides.EmbeddingLevel.PreviewPrint;
allAvailableStylesCanBeEmbedded = allAvailableStylesCanBeEmbedded && usagePermission !== aspose.slides.EmbeddingLevel.Restricted && !bitmapOnly;
console.log(fontName + " (" + fontStyle + "): " + embeddingLevel + ".");
}
if (!hasAvailableData) {
console.log(fontName + ": skipped because no requested style is available.");
} else if (!allAvailableStylesCanBeEmbedded) {
console.log(fontName + ": skipped because at least one available style does not permit outline embedding.");
} else if (previewPrintOnly) {
console.log(fontName + ": skipped because this example produces an editable presentation.");
} else {
var rule = requiresFullFont ? aspose.slides.EmbedFontCharacters.All : aspose.slides.EmbedFontCharacters.OnlyUsed;
fontsToEmbed.push(font);
embeddingRules.push(rule);
}
}
for (var i = 0; i < fontsToEmbed.length; i++) {
fontsManager.addEmbeddedFont(fontsToEmbed[i], embeddingRules[i]);
}
presentation.save("WithAuditedFonts.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ez a vizsgálat a betűkészletfájlokban kódolt korlátozásokat jelzi. Nem ad licencet, nem bizonyítja, hogy a betűkészletet jogszerűen szerezted 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áld a FontsManager.addEmbeddedFont metódust egy betűkészlet beágyazásához. A túlterhelései vagy egy FontData objektumot, vagy a betűkészlet‑adatot tartalmazó byte‑tömböt fogadnak. Az EmbedFontCharacters szabályozza, hogy mely karakterek legyenek belefoglalva:
Allbeágyazza a betűkészlet összes karakterét. Ezt a lehetőséget használd, amikor a címzetteknek szerkeszteniük kell a prezentációt és új szöveget kell beírniuk.OnlyUsedcsak a prezentációban használt karaktereket ágyazza be, a fájlméret csökkentése érdekében. Válaszd ezt a lehetőséget egy kész prezentációhoz, amely elsősorban megtekintésre szolgál.
Az alábbi példa a FontsManager.getFonts metódust használja a Fonts.pptx fájlban használt betűkészletek lekéréséhez, és beágyazza azokat, amelyek még nincsenek beágyazva. A hozzáadandó betűkészleteknek elérhetőnek kell lenniük azon a gépen, amelyen a kód fut. A meglévő beágyazott betűkészletek megtartják aktuális karakterkészletüket.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("Fonts.pptx");
try {
var fontsManager = presentation.getFontsManager();
var allFonts = fontsManager.getFonts();
var embeddedFonts = fontsManager.getEmbeddedFonts();
var embeddedFontNames = new Set();
var fontStyles = [aspose.slides.FontStyleType.Regular, aspose.slides.FontStyleType.Bold, aspose.slides.FontStyleType.Italic, aspose.slides.FontStyleType.Bold | aspose.slides.FontStyleType.Italic];
for (var i = 0; i < embeddedFonts.length; i++) {
embeddedFontNames.add(String(embeddedFonts[i].getFontName()).toLowerCase());
}
for (var i = 0; i < allFonts.length; i++) {
var font = allFonts[i];
var fontName = String(font.getFontName()).toLowerCase();
if (!embeddedFontNames.has(fontName)) {
var hasAvailableData = false;
for (var j = 0; j < fontStyles.length; j++) {
if (fontsManager.getFontBytes(font, fontStyles[j]) !== null) {
hasAvailableData = true;
break;
}
}
if (hasAvailableData) {
fontsManager.addEmbeddedFont(font, aspose.slides.EmbedFontCharacters.All);
embeddedFontNames.add(fontName);
} else {
console.log(font.getFontName() + ": skipped because its font data is unavailable.");
}
}
}
presentation.save("WithEmbeddedFonts.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Beágyazott betűkészletek tömörítése
A Compress.compressEmbeddedFonts eltávolítja a nem használt karaktereket, csökkentve a beágyazott betűkészlet adatát. Már beágyazott betűkészleteken működik, így a méretcsökkenés a prezentációban lévő nem használt betűkészlet‑adat mennyiségétől függ.
Az alábbi példa tömöríti a EmbeddedFonts.pptx fájlban lévő betűkészleteket, és a végeredményt egy külön fájlba menti:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("EmbeddedFonts.pptx");
try {
aspose.slides.Compress.compressEmbeddedFonts(presentation);
presentation.save("CompressedEmbeddedFonts.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Tartsd 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 eredetileg minden karaktert beágyaztál.
GYIK
Hogyan ellenőrizhetem, hogy egy beágyazott betűkészlet továbbra is helyettesítésre kerül-e a megjelenítés során?
Hívd meg a FontsManager.getSubstitutions metódust abban a környezetben, ahol a prezentációt rendereled, hogy láthasd, mely betűkészleteket fogja az Aspose.Slides helyettesíteni. Ellenőrizd továbbá a betűkészlet helyettesítés beállításokat és a betűkészlet tartalék szabályokat. A tartalék kezeli a hiányzó karaktereket, így egy betűkészlet beágyazása nem oldja meg azokat a karaktereket, amelyeket a betűkészlet maga nem tartalmaz.
Be kellene ágyaznom gyakori betűkészleteket, például az Arial‑t és a Calibri‑t?
A döntést a célkörnyezet alapján hozd meg. Ha a szükséges betűkészletek minden olyan 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 a 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 ezt megengedi.