如何在 PDF 中設定字型 C#

Set Fonts in PDFs with IronPDF C

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF 讓 C# 開發人員能夠從 HTML 建立包含自訂網頁字型和圖示字型的 PDF 檔案。 它透過 CSS @font-face 規則,同時支援 Google Fonts 等外部字型服務與本機字型檔案,確保所有生成的 PDF 文件在排版上保持一致。

網路字型是一種專為網站使用而設計的特殊字型。 這些字型託管於網路伺服器上,並由網頁瀏覽器下載,以確保無論使用者本地端是否具備相應字型,網站上的文字呈現皆能保持一致且視覺上美觀。 此外,圖示字型(icon fonts)運用符號與字形,常被用於網頁設計中,藉此建立可縮放且可自訂的圖示,並透過 CSS 操作維持視覺上一致的用戶介面。 借助 IronPDF 的字型管理功能,開發人員可輕鬆將這些字型整合至其 PDF 生成工作流程中。

CSS 支援網頁字型,讓您能在使用者造訪網站時指定要下載的字型檔案。 IronPDF 支援從 HTML 載入字型並渲染至 PDF,使其成為製作需符合特定品牌識別或排版標準之文件的理想選擇。 對於處理國際化內容的開發者,IronPDF 亦提供 UTF-8 及多國語言支援

快速入門:在 PDF 生成中使用 WebFonts

using IronPDF 的 C# 函式庫,將網頁字型和圖示字型整合至您的 PDF 檔案中。 本指南將向您展示如何使用自訂字型渲染 HTML 內容,以確保產出的 PDF 檔案風格一致且視覺上令人愉悅。 只需使用 IronPDF 渲染 HTML,即可在數秒內儲存您的格式化文件。 開始之前,請確認您已在專案中安裝 IronPDF

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 請複製並執行此程式碼片段。

    new IronPdf.ChromePdfRenderer { RenderingOptions = { WaitFor = IronPdf.Rendering.WaitFor.AllFontsLoaded(2000) } }
        .RenderHtmlAsPdf("<link href=\"https://fonts.googleapis.com/css?family=Lobster\" rel=\"stylesheet\">" +
                         "<link href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\" rel=\"stylesheet\">" +
                         "<p style=\"font-family:'Lobster', serif; font-size:30px;\">Hello Google Font</p>" +
                         "<i class=\"fa fa-coffee\" style=\"font-size:40px; color:#b00;\"></i>")
        .SaveAs("webfonts-icons.pdf");
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronPDF

    arrow pointer

如何在 PDF 中使用網頁字型和圖示?

IronPDF 支援 WebFonts(例如 Google Fonts 和 Adobe Web Font API),以及 Bootstrap 和 FontAwesome 等所使用的圖示字型。 這項支援功能使 IronPDF 非常適合需要精緻排版效果的專案,從簡單的文件到包含品牌元素的複雜報告皆能勝任。

字型通常需要一段渲染延遲才能正確載入。 若字型未正確載入,可能會導致頁面空白且無任何文字顯示。 您可以透過為 WaitFor.AllFontsLoaded 方法設定最大等待時間,使其等待所有字型載入完成。 預設的最大等待時間為 500ms。 若涉及 JavaScript 或動態內容等更複雜的情境,請參閱我們的 HTML 轉 PDF 教學指南,其中涵蓋了進階的渲染技術。

以下是一個在您的專案中使用名為 Lobster 的 WebFont 的小範例。

:path=/static-assets/pdf/content-code-examples/how-to/webfonts-webicons-render-webfont.cs
using IronPdf;

// HTML contains webfont
var html = @"<link href=""https://fonts.googleapis.com/css?family=Lobster"" rel=""stylesheet"">
<p style=""font-family: 'Lobster', serif; font-size:30px;"" > Hello Google Fonts</p>";

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Wait for font to load
renderer.RenderingOptions.WaitFor.AllFontsLoaded(2000);

// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// Export the PDF
pdf.SaveAs("font-test.pdf");
Imports IronPdf

' HTML contains webfont
Private html = "<link href=""https://fonts.googleapis.com/css?family=Lobster"" rel=""stylesheet"">
<p style=""font-family: 'Lobster', serif; font-size:30px;"" > Hello Google Fonts</p>"

Private renderer As New ChromePdfRenderer()

' Wait for font to load
renderer.RenderingOptions.WaitFor.AllFontsLoaded(2000)

' Render HTML to PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

' Export the PDF
pdf.SaveAs("font-test.pdf")
$vbLabelText   $csharpLabel

請在"類別文件"中探索更多 WaitFor 選項,例如字型、JavaScript、HTML 元素及網路閒置狀態等相關設定。 若需根據螢幕尺寸調整字型的響應式設計,請參閱我們關於 PDF 渲染響應式 CSS 的指南。

為什麼字型載入時間很重要?

若字型未正確載入,可能會導致頁面空白且無任何文字顯示。 您可以透過為 WaitFor.AllFontsLoaded 方法設定最大等待時間,使其等待所有字型載入完成。 預設的最大等待時間為 500ms。 此時間考量在處理複雜的網頁應用程式,或將 WebGL 內容渲染為 PDF 時尤為重要,因為這些情況下需要依序載入多個資源。

字型載入延遲會因多種因素而異,包括網路速度、字型檔案大小及伺服器回應時間。當使用多個自訂字型或圖示庫時,建議延長等待時間,以確保所有字型都能正確顯示。 這對於專業文件尤為關鍵,因為字型缺失可能影響可讀性與品牌一致性。

支援哪些字型服務?

IronPDF 支援 WebFonts(例如 Google Fonts 和 Adobe Web Font API),以及 Bootstrap 和 FontAwesome 等所使用的圖示字型。 此外,IronPDF 還支援:

  • Google Fonts(完整目錄)
  • Adobe Fonts (Typekit)
  • Font Awesome 圖示(所有版本)
  • Bootstrap 圖示
  • Material Design 圖示
  • 透過 CSS @importlink 標籤提供的自訂網頁字型服務
  • 多種格式的自託管字型檔案 (TTF, OTF, WOFF, WOFF2)

如果字型無法正確載入會發生什麼情況?

字型通常需要一段渲染延遲才能正確載入。 若字型未正確載入,可能會導致頁面空白且無任何文字顯示。 在此類情況下,瀏覽器通常會回退至系統預設字型,這可能會破壞文件的視覺一致性。 IronPDF 提供了多種機制來處理字型載入失敗的情況:

  1. 備用字型鏈:在 CSS 的 font-family 宣告中定義多個字型
  2. 延長等待時間:針對較慢的連線,增加 AllFontsLoaded 的超時設定
  3. 本地字型嵌入:請使用 @font-face 搭配 base64 編碼的字型,以確保可用性
  4. 字型預載:使用 HTML preload 標籤來優先載入字型

如何直接匯入字型檔案?

若要使用現有的字型檔案,請在 CSS 樣式中套用 @font-face 規則。 當結合使用 @font-face 規則並嵌入 base64 編碼的 woff 檔案時,此方法同樣有效。 在以下範例中,我將使用 Pixelify Sans 字型

:path=/static-assets/pdf/content-code-examples/how-to/webfonts-webicons-custom-font.cs
using IronPdf;

// Import custom font
string html = @"<!DOCTYPE html>
<html>
<head>
<style>
@font-face {font-family: 'Pixelify';
src: url('fonts\PixelifySans-VariableFont_wght.ttf');
}
p {
    font-family: 'Pixelify';
    font-size: 70px;
}
</style>
</head>
<body>
<p>Custom font</p>
</body>
</html>";

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// Export the PDF
pdf.SaveAs("customFont.pdf");
Imports IronPdf

' Import custom font
Private html As String = "<!DOCTYPE html>
<html>
<head>
<style>
@font-face {font-family: 'Pixelify';
src: url('fonts\PixelifySans-VariableFont_wght.ttf');
}
p {
    font-family: 'Pixelify';
    font-size: 70px;
}
</style>
</head>
<body>
<p>Custom font</p>
</body>
</html>"

Private renderer As New ChromePdfRenderer()

' Render HTML to PDF
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

' Export the PDF
pdf.SaveAs("customFont.pdf")
$vbLabelText   $csharpLabel

我可以使用哪些字型檔案格式?

若要使用現有的字型檔案,請在 CSS 樣式中套用 @font-face 規則。 當結合使用 @font-face 規則並嵌入 base64 編碼的 woff 檔案時,此方法同樣有效。 IronPDF 支援以下字型檔案格式:

  • TTF(TrueType 字型):廣泛支援,非常適合螢幕顯示與 PRINT
  • OTF(OpenType 字型):具備進階排版功能,適用於 Professional 文件
  • WOFF (Web Open Font Format):針對網頁使用進行優化的壓縮格式
  • WOFF2:相較於 WOFF 具備更佳的壓縮效果,檔案大小更小
  • EOT (Embedded OpenType):適用於舊版瀏覽器的傳統格式
  • SVG 字型:基於向量的字型(部分平台可能有限制)

何時該使用本機字型,何時該使用網頁字型?

若要使用現有的字型檔案,請在 CSS 樣式中套用 @font-face 規則。 選擇使用本機字型或網頁字型取決於以下幾個因素:

何時應使用本地字型:

  • 支援離線作業或受限網路環境
  • 需確保字型可用性
  • 處理專有或授權字型
  • 優化以實現更快的渲染速度,避免網路延遲
  • 建立符合嚴格合規要求的文件

何時使用 Web Fonts:

  • 使用大型字型庫(如 Google Fonts)
  • 要求自動更新字型檔案
  • 盡可能縮小應用程式套件大小
  • 因應頻繁變動的排版需求
  • 開發已依賴網際網路連線的應用程式

使用 Azure 時有哪些限制?

Azure 託管平台不支援伺服器在其較低階的共用 Web 應用程式層級中載入 SVG 字型。 然而,Azure 的 VPS 和 Web Role 並未採用相同的沙箱機制,且確實支援網頁字型渲染。 如需詳細的 Azure 部署指引,請參閱我們的 Azure 部署指南,其中涵蓋所有各層級的限制與解決方案。

哪些 Azure 服務層級支援字型渲染?

然而,Azure 的 VPS 和 Web Role 並未採用相同的沙箱機制,且確實支援網頁字型渲染。 以下是 Azure 服務層級支援的詳細說明:

完整字型支援:

  • Azure 虛擬機器(所有規格)
  • Azure Web Roles
  • App Service Premium 服務層級 (P1v2, P2v2, P3v2)
  • App Service 隔離層級

字型支援有限:

  • App Service Basic 層級 (B1, B2, B3) - 僅限網頁字型
  • App Service Standard 層級 (S1, S2, S3) - 部分 SVG 字型限制

不支援自訂字型:

  • App Service 免費層級 (F1)
  • App Service 共用層 (D1)

為什麼較低階的 Azure 方案會有字型限制?

由於沙箱限制與資源限制,Azure 託管平台不支援伺服器在其較低階的共用 Web 應用程式層級中載入 SVG 字型。 較低層級的實作會建立嚴格的安全邊界,以防止執行自訂字型渲染所需的特定系統層級操作。 這些限制有助於 Azure 維持多租戶隔離,並防止在共用環境中發生資源濫用。

為克服這些限制,請考慮:

  1. 將字型以 base64 編碼字串的形式嵌入 CSS
  2. 僅使用來自 CDN 的網頁字型
  3. 在受支援的環境中預渲染 PDF
  4. 升級至更高階的 Azure 方案以獲得完整的字型支援

https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face

常見問題

如何在我的 PDF 文件中使用 Google Fonts?

IronPDF 透過 HTML 渲染支援 Google Fonts。您只需在 HTML 的 head 區段中加入 Google Fonts 連結,並在 CSS 中套用 font-family 屬性。IronPDF 會在產生 PDF 時下載並渲染這些字型,確保您自訂的字型樣式在最終文件中正確顯示。

為什麼我的網頁字型在生成的 PDF 中無法正確顯示?

網頁字型通常需要時間載入才能顯示。IronPDF 在 RenderingOptions 中提供 WaitFor.AllFontsLoaded() 選項,讓您設定延遲時間(以毫秒為單位),確保字型在生成 PDF 之前已完全載入。此舉可避免字型遺漏或顯示錯誤。

我可以在 PDF 文件中使用 FontAwesome 圖示嗎?

是的,IronPDF 完全支援 FontAwesome 及其他圖示字型。請在 HTML 中加入 FontAwesome CSS 並使用適當的圖示類別。IronPDF 會將這些圖示字型渲染為 PDF 中的向量圖形,以維持其可縮放性與視覺品質。

如何使用 @font-face 搭配本地字型檔案?

IronPDF 支援 CSS @font-face 規則,用於載入本機字型檔案。請在 CSS 中定義您的 @font-face 規則,指定字型檔案路徑,然後將 font-family 套用至 HTML 元素。IronPDF 將在渲染過程中,將這些自訂字型直接嵌入 PDF 中。

PDF 生成支援哪些字型格式?

IronPDF 支援標準的網頁字型格式,包括透過 CSS @font-face 規則或外部字型服務使用的 WOFF、WOFF2、TTF 及 OTF 檔案。這確保了與當今大多數現代網頁字型及圖示字型的相容性。

如何確保在不同系統間保持排版的一致性?

IronPDF 會將網頁字型直接嵌入生成的 PDF 檔案中,確保您的自訂字型樣式能一致顯示,無論檢視者系統上安裝了哪些字型。這使其成為維持分散式文件品牌一致性的理想選擇。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 18,926,724 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 轉為 PDF。