使用 JavaScript 在簡報中嵌入字型
簡介
PowerPoint 中的嵌入式字型 在您希望簡報在任何系統或裝置上打開時都能正確顯示時非常有用。倘若您因為創意而使用第三方或非標準字型,則更應該將字型嵌入。否則(未嵌入字型時),投影片上的文字或數字、版面配置、樣式等可能會變形或變成令人困惑的方塊。
FontsManager 類別、FontData 類別、Compress 類別以及它們的類別包含您在 PowerPoint 簡報中處理嵌入式字型所需的大多數屬性與方法。
取得或移除簡報中的嵌入式字型
Aspose.Slides 提供了 getEmbeddedFonts 方法(由 FontsManager 類別公開),讓您取得(或查詢)簡報中嵌入的字型。若要移除字型,則使用同一類別的 removeEmbeddedFont 方法。
以下 JavaScript 程式碼示範如何取得與移除簡報中的嵌入式字型:
// 實例化一個表示簡報檔案的 Presentation 物件
var pres = new aspose.slides.Presentation("EmbeddedFonts.pptx");
try {
// 渲染包含使用嵌入式 "FunSized" 字型的文字框的投影片
var slideImage = pres.getSlides().get_Item(0).getImage(java.newInstanceSync("java.awt.Dimension", 960, 720));
// 將影像以 JPEG 格式儲存到磁碟
try {
slideImage.save("picture1_out.jpg", aspose.slides.ImageFormat.Jpeg);
} finally {
if (slideImage != null) {
slideImage.dispose();
}
}
var fontsManager = pres.getFontsManager();
// 取得所有嵌入的字型
var embeddedFonts = fontsManager.getEmbeddedFonts();
// 尋找 "Calibri" 字型
var calibriEmbeddedFont = null;
for (var i = 0; i < embeddedFonts.length; i++) {
console.log("" + embeddedFonts[i].getFontName());
if ("Calibri" == embeddedFonts[i].getFontName()) {
calibriEmbeddedFont = embeddedFonts[i];
break;
}
}
// 移除 "Calibri" 字型
fontsManager.removeEmbeddedFont(calibriEmbeddedFont);
// 渲染簡報;"Calibri" 字型會被現有的字型取代
slideImage = pres.getSlides().get_Item(0).getImage(java.newInstanceSync("java.awt.Dimension", 960, 720));
// 將影像以 JPEG 格式儲存到磁碟
try {
slideImage.save("picture2_out.jpg", aspose.slides.ImageFormat.Jpeg);
} finally {
if (slideImage != null) {
slideImage.dispose();
}
}
// 將未嵌入 "Calibri" 字型的簡報儲存到磁碟
pres.save("WithoutManageEmbeddedFonts_out.ppt", aspose.slides.SaveFormat.Ppt);
} finally {
if (pres != null) {
pres.dispose();
}
}
將嵌入式字型加入簡報
透過使用 EmbedFontCharacters 列舉以及 addEmbeddedFont 方法的兩個重載,您可以選擇偏好的(嵌入)規則將字型嵌入簡報中。以下 JavaScript 程式碼示範如何嵌入並加入字型至簡報:
// 載入簡報
var pres = new aspose.slides.Presentation("Fonts.pptx");
try {
var allFonts = pres.getFontsManager().getFonts();
var embeddedFonts = pres.getFontsManager().getEmbeddedFonts();
allFonts.forEach(font => {
var embeddedFontsContainsFont = false;
for (var i = 0; i < embeddedFonts.length; i++) {
if (embeddedFonts[i].equals(font)) {
embeddedFontsContainsFont = true;
break;
}
}
if (!embeddedFontsContainsFont) {
pres.getFontsManager().addEmbeddedFont(font, aspose.slides.EmbedFontCharacters.All);
embeddedFonts = pres.getFontsManager().getEmbeddedFonts();
}
});
// 將簡報儲存到磁碟
pres.save("AddEmbeddedFont_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
壓縮嵌入式字型
為了讓您壓縮簡報中嵌入的字型並減少檔案大小,Aspose.Slides 提供了 compressEmbeddedFonts 方法(由 Compress 類別公開)。
以下 JavaScript 程式碼示範如何壓縮嵌入的 PowerPoint 字型:
var pres = new aspose.slides.Presentation("pres.pptx");
try {
aspose.slides.Compress.compressEmbeddedFonts(pres);
pres.save("pres-out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
常見問題
如何判斷簡報中即使已嵌入的特定字型仍會在轉譯時被替換?
請檢查字型管理器中的 substitution information 以及 fallback/substitution rules:若字型不可用或受限制,系統將使用備援字型。
嵌入像 Arial / Calibri 這類「系統」字型值得嗎?
通常不需要——這些字型幾乎總是可用。但在需要完整可移植性的「精簡」環境(如 Docker、未預先安裝字型的 Linux 伺服器)中,嵌入系統字型可消除意外替換的風險。