如何在 PDF 式中设置字体 C#

使用 IronPDF C&num 在 PDF 中设置字体;

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

IronPdf 允许 C# 开发人员使用自定义网页字体和 HTML 图标字体创建 PDF。 它既支持外部字体服务(如 Google Fonts),也支持通过 CSS @font-face 规则生成的本地字体文件,从而确保生成的所有 PDF 都具有一致的排版。

网络字体是一种专门为网站设计的字体。 这些字体托管在网络服务器上,并由网络浏览器下载,以确保在网站上实现一致且视觉上吸引人的文本渲染,而不论用户的本地字体是否可用。 此外,图标字体使用符号和字符,通常用于网页设计中,以创建可缩放、可自定义的图标,并通过CSS操作保持视觉一致的用户界面。 借助 IronPdf 的字体管理功能,开发人员可以轻松地将这些字体集成到他们的 PDF 生成工作流程中。

CSS包含网络字体,使您可以在访问您的网站时指定要下载的字体文件。 IronPDF 支持字体加载和从 HTML 到 PDF 的渲染,因此非常适合创建需要特定品牌或排版标准的文档。 对于处理国际内容的开发人员,IronPDF 还提供 UTF-8 和国际语言支持

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

使用 IronPDF 的 C# 库将网页和图标字体融入您的 PDF 中。 本指南将向您展示如何使用自定义字体呈现 HTML 内容,确保 PDF 格式的一致性和视觉吸引力。 只需使用IronPDF渲染HTML并在几秒钟内保存您的样式化文档。 在开始之前,请确保您已在项目中安装了 IronPDF

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 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 中使用 WebFonts 和图标?

IronPDF支持WebFonts(如Google Fonts和Adobe网络字体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'类文档](/how-to/waitfor/) "中探索更多WaitFor选项,例如字体、JavaScript、HTML 元素和网络空闲的选项。对于根据屏幕尺寸调整字体的响应式设计,请查看我们的 PDF 渲染响应式 CSS 指南](/how-to/html-to-pdf-responsive-css/)。

为什么字体加载时间很重要?

当字体没有正确加载时,可能会导致页面空白,没有任何文本。 您可以使用WaitFor.AllFontsLoaded方法通过分配一个最大等待时间来等待所有字体加载完毕。 默认最长等待时间为 500ms。 在处理复杂的网络应用程序或将 WebGL 内容渲染为 PDF 时,需要按顺序加载多个资源,因此时间上的考虑尤为重要。

字体加载延迟会因网络速度、字体文件大小和服务器响应时间等多种因素而变化。在使用多个自定义字体或图标库时,建议增加等待时间,以确保所有排版都能正确渲染。 这一点对于专业文档尤为关键,因为字体缺失可能会影响可读性和品牌一致性。

支持哪些字体服务?

IronPDF支持WebFonts(如Google Fonts和Adobe网络字体API)和图标字体,例如Bootstrap和FontAwesome所使用的。 此外,IronPdf 还支持:

  • 谷歌字体(整个目录)
  • Adobe 字体 (Typekit)
  • Font Awesome 图标(所有版本)
  • 引导式图标
  • 材料设计图标
  • 通过 CSS @importlink 标记定制网页字体服务
  • 各种格式的自托管字体文件(TTF, OTF, WOFF, WOFF2)

如果字体无法正常加载会发生什么情况?

字体通常需要在渲染时延迟以正确加载。 当字体没有正确加载时,可能会导致页面空白,没有任何文本。 在这种情况下,浏览器通常会退回到系统默认字体,这可能会破坏文档的视觉一致性。 IronPDF 提供了多种机制来处理字体加载失败:

1.回调字体链:在 CSS font-family 声明中定义多种字体 2.延长等待时间:为较慢的连接增加 AllFontsLoaded 超时。 3.本地字体嵌入:使用带有 base64 编码字体的 @font-face 以保证可用性 4.字体预加载:使用 HTML 预加载标记优先加载字体

如何直接导入字体文件?

要使用现有字体文件,请在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 字体):支持广泛,是屏幕和印刷的理想选择
  • OTF(开放式字体):高级排版功能,适用于专业文档
  • WOFF(网络开放字体格式):专为网络使用而优化的压缩格式
  • WOFF2:比 WOFF 压缩技术更先进,文件更小
  • EOT(嵌入式 OpenType):旧版浏览器的传统格式
  • SVG 字体:基于矢量的字体(在某些平台上有限制)

何时应使用本地字体与网络字体?

要使用现有字体文件,请在CSS样式中应用@font-face规则。 选择本地字体还是网络字体取决于几个因素:

在以下情况下使用本地字体:

  • 离线工作或在受限制的网络环境中工作
  • 要求保证字体的可用性
  • 处理专有或授权字体
  • 优化渲染速度,避免网络延迟
  • 创建具有严格合规性要求的文件

在以下情况下使用网络字体:

  • 使用大字体库(如 Google Fonts
  • 要求自动更新字体文件
  • 最小化应用程序捆绑包大小
  • 满足经常变化的排版要求
  • 构建已经依赖互联网连接的应用程序

使用 Azure 时有哪些限制?

Azure托管平台在其较低的共享网络应用程序层不支持服务器加载SVG字体。 然而,Azure的VPS和Web角色并不以相同方式沙盒处理,并支持网络字体渲染。 有关 Azure 部署的详细指导,请参阅我们的Azure 部署指南,其中涵盖了所有特定层的限制和变通方法。

哪些 Azure 层支持字体渲染?

然而,Azure的VPS和Web角色并不以相同方式沙盒处理,并支持网络字体渲染。 以下是 Azure 层级支持的细目:

完整的字体支持:

  • Azure 虚拟机(各种规模)
  • Azure 网络角色
  • 应用程序服务高级层(P1v2</code>、<code>P2v2</code>、<code>P3v2
  • 应用程序服务隔离层

有限的字体支持:

  • 应用程序服务基本层(B1B2B3)--仅限网络字体
  • 应用程序服务标准层(S1, S2, S3) - 某些 SVG 字体限制

不支持自定义字体:

  • 应用程序服务免费层(F1
  • 应用程序服务共享层(D1

为什么较低的 Azure 层级有字体限制?

由于沙盒限制和资源限制,Azure 托管平台不支持服务器在其较低的共享网络应用层中加载 SVG 字体。 较低的层级实施了严格的安全边界,阻止了自定义字体渲染所需的某些系统级操作。 这些限制有助于 Azure 在共享环境中保持多租户隔离并防止资源滥用。

要解决这些限制,可以考虑
1.在 CSS 中以 base64 编码字符串嵌入字体 2.仅使用来自 CDN 的网络字体 3.在支持的环境中预渲染 PDF 4.升级到具有完整字体支持的更高 Azure 层级

常见问题解答

如何在 PDF 文档中使用 Google 字体?

IronPDF 通过 HTML 渲染支持 Google 字体。只需在 HTML 头部包含 Google 字体链接,并在 CSS 中应用字体。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 规则,指定字体文件路径,然后将字体家族应用到 HTML 元素中。IronPDF 将在渲染过程中将这些自定义字体直接嵌入 PDF。

生成 PDF 时支持哪些字体格式?

通过 CSS @font-face 规则或外部字体服务使用时,IronPdf 支持标准网页字体格式,包括 WOFF、WOFF2、TTF 和 OTF 文件。这确保了与当今大多数现代网络字体和图标字体的兼容性。

如何确保不同系统中的排版一致?

IronPDF 可将网络字体直接嵌入生成的 PDF 文件中,从而确保无论阅读者系统中安装了何种字体,都能一致地显示自定义排版。这使它成为在分发文件中保持品牌一致性的理想工具。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 17,386,124 | 版本: 2026.2 刚刚发布