使用 JavaScript 在簡報中設定字型替代
概觀
字型替代允許 Aspose.Slides 在渲染或轉換簡報時,使用可用的字型取代無法存取的字型。替代會影響渲染的輸出;但不會更改簡報內容所指派的字型。
您可以在特定字型不可用時定義要使用的字型,並且可以檢查 Aspose.Slides 在渲染過程中將執行的字型替代。這有助於在安裝字型不同的環境之間保持輸出一致性。
取得字型替代
使用 FontsManager.getSubstitutions 方法可判斷在渲染簡報時哪些字型會被替代。該方法會回傳 FontSubstitutionInfo 物件,指出原始字型名稱與替代字型名稱。
以下 JavaScript 範例會列出簡報的所有字型替代:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("presentation.pptx");
try {
var substitutions = presentation.getFontsManager().getSubstitutions().iterator();
while (substitutions.hasNext()) {
var substitution = substitutions.next();
console.log(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
}
} finally {
presentation.dispose();
}
取得所選投影片的字型替代
使用帶有投影片索引陣列的 FontsManager.getSubstitutions 疊載方法,只檢查渲染特定投影片所需的替代。這在您要渲染或匯出簡報的部分內容、逐步檢查大型簡報、找出依賴不可用字型的投影片、為伺服器或容器準備最小字型套件,或在不處理無關投影片的情況下診斷渲染差異時,都非常有用。
此疊載方法需要 Java 原始型別 int[]。可使用 java.newArray("int", [...]) 建立;普通的 JavaScript 陣列會被轉換為 Integer[],無法符合此疊載方法。
陣列使用以 1 為起點的投影片索引:1 代表第一張投影片。相比之下,Presentation.getSlides 集合存取子使用零基索引,因此同一張投影片需以 presentation.getSlides().get_Item(0) 取得。在建立陣列時請注意此差異,以免產生遺漏或多算一的錯誤。
透過 Presentation.getFontsManager 呼叫此疊載方法。它只回傳在渲染所選投影片時決定的替代。每個結果皆為包含原始與替代字型名稱的 FontSubstitutionInfo 物件。結果會反映當前的字型環境、已設定的備援規則、儲存在 FontSubstRuleCollection 中的替代規則,以及 externally loaded fonts。
同一個替代可能被多個所選投影片要求。建立字型清單或預檢報告時,請去除重複結果。以下範例會列出所有回傳的替代,並產生唯一字型對應的排序清單:
var aspose = aspose || {};
const java = require("java");
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("presentation.pptx");
try {
var selectedSlides = java.newArray("int", [1, 3, 5]);
var substitutions = [];
var substitutionIterator = presentation.getFontsManager().getSubstitutions(selectedSlides).iterator();
while (substitutionIterator.hasNext()) {
substitutions.push(substitutionIterator.next());
}
console.log("Substitutions for the selected slides:");
substitutions.forEach(function (substitution) {
console.log(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
});
var preflightEntries = substitutions.map(function (substitution) {
return substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName();
});
var sortedPreflightEntries = Array.from(new Set(preflightEntries)).sort(function (first, second) {
return first.localeCompare(second, undefined, { sensitivity: "base" });
});
console.log("Deduplicated font preflight report:");
sortedPreflightEntries.forEach(function (entry) {
console.log(entry);
});
} finally {
presentation.dispose();
}
FontsManager 類別提供兩種疊載方法。請依照渲染作業的範圍選擇使用:
| 疊載方法 | 使用情況 |
|---|---|
| getSubstitutions with no arguments | 您需要整份簡報的字型替代。 |
getSubstitutions with a Java int[] of slide indexes |
您需要針對選取範圍、逐步檢查或部分匯出時的字型替代。 |
設定字型替代規則
若來源字型無法使用,指定 Aspose.Slides 應使用的字型:
- 載入簡報。
- 為來源字型與替代字型建立字型定義。
- 使用 WhenInaccessible 條件建立 FontSubstRule。
- 將規則加入 FontSubstRuleCollection。
- 使用 FontsManager.setFontSubstRuleList 方法指派此集合。
- 渲染或轉換簡報。
以下 JavaScript 範例在 SomeRareFont 無法使用時,以 Arial 替代,並渲染第一張投影片以驗證結果。替代字型必須對 Aspose.Slides 可用。
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("presentation.pptx");
try {
var sourceFont = new aspose.slides.FontData("SomeRareFont");
var substituteFont = new aspose.slides.FontData("Arial");
var substitutionRule = new aspose.slides.FontSubstRule(sourceFont, substituteFont, aspose.slides.FontSubstCondition.WhenInaccessible);
var substitutionRules = new aspose.slides.FontSubstRuleCollection();
substitutionRules.add(substitutionRule);
presentation.getFontsManager().setFontSubstRuleList(substitutionRules);
var image = presentation.getSlides().get_Item(0).getImage(1.0, 1.0);
try {
image.save("slide.jpg", aspose.slides.ImageFormat.Jpeg);
} finally {
image.dispose();
}
} finally {
presentation.dispose();
}
注意
若要無條件變更整個簡報所使用的字型,請參閱 Font Replacement。數學方程式字型的限制
字型替代規則是渲染與轉換過程中標準字型選擇程序的一部份。當 Aspose.Slides 能以規則指定的可用字型取代無法存取的字型時,這些規則適用於一般文字。
Office Math 方程式有額外的需求。若方程式使用 Cambria Math,Aspose.Slides 可能需要該確切字型才能計算並渲染方程式版面。使用如 STIX Two Math 的其他數學字型之替代規則無法取代 Cambria Math,渲染仍可能顯示需要 Cambria Math。
若要渲染或轉換此類簡報,請確保 Cambria Math 可供 Aspose.Slides 使用。可在作業系統中安裝,或以 external font 方式載入。
此限制僅適用於方程式版面配置。上述的替代規則仍適用於簡報中的一般文字。
常見問題
字型取代與字型替代有何不同?
[Font replacement] 故意在整份簡報中將一種字型改為另一種字型。字型替代則在符合設定條件(例如原始字型不可用)時,為渲染輸出選取字型。
什麼時候會套用字型替代規則?
這些規則會在渲染與轉換期間參與 [font selection sequence]。使用 WhenInaccessible 時,規則僅在 Aspose.Slides 無法存取來源字型時套用。
如果缺少字型且未設定替代規則,會發生什麼情況?
Aspose.Slides 會根據其字型選擇程序挑選最接近的可用字型。結果取決於執行環境中可使用的字型。
我可以載入外部字型以避免替代嗎?
可以。您可以 load external fonts ,讓 Aspose.Slides 在渲染與轉換時使用它們。
Aspose 會隨函式庫一起分發字型嗎?
不會。您必須自行提供字型並遵守其授權條款。
替代結果在 Windows、Linux 與 macOS 之間會不同嗎?
會。不同作業系統的已安裝字型與字型搜尋位置各有差異,於某台機器可用的字型在另一台可能需要替代。
如何在批次轉換中保持字型選擇的一致性?
在每台機器或容器上使用相同的字型檔與版本,load required external fonts,以及在授權允許時 embed fonts。亦可在匯出前呼叫 FontsManager.getSubstitutions 以偵測意外的替代情況。