在 Python 中自訂 PowerPoint 字型
概述
Aspose.Slides for Python 允許您在執行時提供自訂字型,使即使目標系統未安裝所需字型,簡報仍能正確呈現。 在匯出為 PDF 或影像時,您可以提供字型資料夾或記憶體中的字型資料,以保留文字版面、字形度量與排版。 這使得伺服器端渲染在不同環境中更可預測,消除作業系統層級的字型依賴,並防止不必要的替代或重排。 本文說明如何註冊字型來源。
Aspose.Slides 允許您使用 load_external_font 與 load_external_fonts 方法(來自 FontsLoader 類別)載入以下字型:
載入自訂字型
Aspose.Slides 允許您在不將字型安裝至系統的情況下載入簡報中使用的字型。 這會影響匯出輸出(例如 PDF、影像及其他支援格式),使得產出的文件在各環境中保持一致。 字型會從自訂目錄載入。
- 指定一個或多個包含字型檔案的資料夾。
- 呼叫靜態的 FontsLoader.load_external_fonts 方法,從這些資料夾載入字型。
- 載入並渲染/匯出簡報。
- 呼叫 FontsLoader.clear_cache 以清除字型快取。
以下程式碼示範字型載入流程:
import aspose.slides as slides
# 定義包含自訂字型檔案的資料夾。
font_folders = [ external_font_folder1, external_font_folder2 ]
# 從指定的資料夾載入自訂字型。
slides.FontsLoader.load_external_fonts(font_folders)
with slides.Presentation("sample.pptx") as presentation:
# 使用已載入的字型渲染/匯出簡報(例如 PDF、影像或其他格式)。
presentation.save("output.pdf", slides.export.SaveFormat.PDF)
# 工作完成後清除字型快取。
slides.FontsLoader.clear_cache()
Note
FontsLoader.load_external_fonts 會將額外的資料夾加入字型搜尋路徑,但不會更改字型初始化順序。
字型的初始化順序如下:
- 作業系統的預設字型路徑。
- 透過 FontsLoader 載入的路徑。
取得自訂字型資料夾
Aspose.Slides 提供 get_font_folders 方法以取得字型資料夾。它會回傳透過 load_external_fonts 新增的資料夾以及系統字型資料夾。
以下 Python 程式碼示範如何使用 get_font_folders:
import aspose.slides as slides
# 此呼叫返回檢查字型檔案的資料夾。
# 這些資料夾包括透過 load_external_fonts 方法新增的資料夾以及系統字型資料夾。
font_folders = slides.FontsLoader.get_font_folders()
為簡報指定自訂字型
Aspose.Slides 提供 document_level_font_sources 屬性,讓您為簡報指定要使用的外部字型。
以下 Python 範例示範如何使用 document_level_font_sources:
import aspose.slides as slides
with open("CustomFont1.ttf", "br") as font1_stream:
font1_data = font1_stream.read()
with open("CustomFont2.ttf", "br") as font2_stream:
font2_data = font2_stream.read()
load_options = slides.LoadOptions()
load_options.document_level_font_sources.font_folders = ["assets\\fonts", "global\\fonts"]
load_options.document_level_font_sources.memory_fonts = [font1_data, font2_data]
with slides.Presentation("Fonts.pptx", load_options) as presentation:
# ...
# 對簡報進行操作。
# CustomFont1、CustomFont2,以及來自 assets\fonts 和 global\fonts 資料夾(及其子資料夾)的字型皆可供簡報使用。
# ...
print(len(presentation.slides))
從二進位資料載入外部字型
Aspose.Slides 提供 load_external_font 方法,以從二進位資料載入外部字型。
以下 Python 範例示範從位元組陣列載入字型:
import aspose.slides as slides
def read_all_bytes(file_path):
with open(file_path, "rb") as file_stream:
file_data = file_stream.read()
return file_data
# 從位元組陣列載入外部字型。
slides.FontsLoader.load_external_font(read_all_bytes("ARIALN.TTF"))
slides.FontsLoader.load_external_font(read_all_bytes("ARIALNBI.TTF"))
slides.FontsLoader.load_external_font(read_all_bytes("ARIALNI.TTF"))
try:
with slides.Presentation() as presentation:
# 外部字型在此簡報實例的生命週期內皆可使用。
print("processing")
finally:
slides.FontsLoader.clear_cache()
常見問題
自訂字型會影響所有格式的匯出 (PDF、PNG、SVG、HTML) 嗎?
是。已連結的字型會被渲染器在所有匯出格式中使用。
自訂字型會自動嵌入到最終的 PPTX 中嗎?
否。將字型註冊供渲染使用並不等同於將其嵌入 PPTX。若需將字型內嵌於簡報檔案,必須使用明確的 embedding features。
當自訂字型缺少某些字形時,我可以控制備用行為嗎?
可以。請設定 font substitution、replacement rules 與 fallback sets,以明確定義在請求字形不存在時使用哪個字型。
我能在 Linux/Docker 容器中使用字型而不需系統範圍安裝嗎?
可以。指向您自己的字型資料夾或從位元組陣列載入字型。這可移除容器映像中對系統字型目錄的任何依賴。
關於授權——我可以在沒有限制的情況下嵌入任何自訂字型嗎?
您必須自行負責字型授權的合規性。授權條款各有不同;某些授權禁止嵌入或商業使用。請在分發輸出前務必檢視字型的最終使用者授權協議 (EULA)。