在 .NET 中將字型嵌入簡報

簡介

Embedding fonts in PowerPoint 可確保您的簡報在不同系統上保持預期的外觀。無論是使用創意的特殊字型還是標準字型,嵌入字型都能防止文字與版面配置被破壞。

如果您因為創意需求而使用了第三方或非標準字型,那麼更應該將字型嵌入。否則(未嵌入字型時),投影片上的文字或數字、版面配置、樣式等可能會改變或變成難以辨識的方塊。

使用 FontsManagerFontDataCompress 類別來管理已嵌入的字型。

取得與移除已嵌入字型

使用 GetEmbeddedFontsRemoveEmbeddedFont 方法,可輕鬆取得或移除簡報中的已嵌入字型。

以下 C# 程式碼展示了如何取得與移除已嵌入的字型:

using (Presentation presentation = new Presentation("EmbeddedFonts.pptx"))
{
    ISlide slide = presentation.Slides[0];

    // 呈現包含使用已嵌入「FunSized」字型的文字框的投影片
    using (IImage image = slide.GetImage(new Size(960, 720)))
    {
        image.Save("picture1_out.png", ImageFormat.Png);
    }

    IFontsManager fontsManager = presentation.FontsManager;

    IFontData[] embeddedFonts = fontsManager.GetEmbeddedFonts();

    // 尋找「Calibri」字型
    IFontData funSizedEmbeddedFont = Array.Find(embeddedFonts, delegate (IFontData data)
    {
        return data.FontName == "Calibri";
    });

    // 移除「Calibri」字型
    fontsManager.RemoveEmbeddedFont(funSizedEmbeddedFont);

    // 呈現簡報;「Calibri」字型將被現有的字型取代
    using (IImage image = slide.GetImage(new Size(960, 720)))
    {
        image.Save("picture2_out.png", ImageFormat.Png);
    }

    // 將未嵌入「Calibri」字型的簡報儲存至磁碟
    presentation.Save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat.Ppt);
}

添加已嵌入字型

透過 EmbedFontCharacters 列舉以及 AddEmbeddedFont 方法的兩個重載,您可以選擇想要的(嵌入)規則,將字型嵌入簡報中。以下 C# 程式碼展示了如何嵌入與添加字型:

// 載入簡報
Presentation presentation = new Presentation("Fonts.pptx");

IFontData[] allFonts = presentation.FontsManager.GetFonts();
IFontData[] embeddedFonts = presentation.FontsManager.GetEmbeddedFonts();
foreach (IFontData font in allFonts)
{
    if (!embeddedFonts.Contains(font))
    {
        presentation.FontsManager.AddEmbeddedFont(font, EmbedFontCharacters.All);
    }
}

// 儲存簡報至磁碟
presentation.Save("AddEmbeddedFont_out.pptx", SaveFormat.Pptx);

壓縮已嵌入字型

使用 CompressEmbeddedFonts 可壓縮已嵌入的字型,以減少檔案大小。

壓縮範例程式碼:

using (Presentation pres = new Presentation("pres.pptx"))
{
    Aspose.Slides.LowCode.Compress.CompressEmbeddedFonts(pres);
    pres.Save("pres-out.pptx", SaveFormat.Pptx);
}

常見問答

如何判斷簡報中某個特定字型在嵌入後仍會在渲染時被替代?

檢查字型管理器中的字型替代資訊以及備援/替代規則:如果該字型不可用或受限,系統會使用備援字型。

將「系統」字型(如 Arial、Calibri)嵌入是否值得?

通常不需要——這些字型幾乎隨處可得。但在「精簡」環境(Docker、未預裝字型的 Linux 伺服器)中,嵌入系統字型可消除意外替代的風險,提升可攜性。