如何在 Azure 上使用 .NET 运行 HTML 转 PDF?
可以。IronPDF 可用于在 Azure 上生成、处理和读取 PDF 文档。IronPDF 已在多个 Azure 平台上进行了全面测试,包括 MVC 网站、Azure 函数等。
Docker 上的 Azure 函数
如果您在 Docker 容器中运行 Azure Functions,请参阅 本教程 而不是
如何在 Azure 函数中制作 PDF 生成器
- 安装 C# 库在 Azure 中生成 PDF
- 选择 "Azure 基本 B1 "或以上托管层级
- 取消选中
从软件包文件运行
选项时 - 按照建议的配置说明进行配置
- 使用代码示例创建使用 Azure 的 PDF 生成器
教程
设置项目
安装 IronPDF 开始使用
第一步是使用 NuGet 安装 IronPDF:
- 在基于 Windows 的 Azure Functions 上使用 "IronPdf "软件包 - https://www.nuget.org/packages/IronPdf/
- 在基于 Linux 的 Azure 函数上使用 "IronPdf.Linux "软件包 - https://www.nuget.org/packages/IronPdf.Linux/
Install-Package IronPdf
或者,使用 直接下载 link.
选择正确的 Azure 选项
选择正确的托管级别 Azure 层级
Azure 基本 B1 是满足最终用户渲染需求的最低托管级别。如果要创建高吞吐量系统,可能需要升级。
在继续之前
"从软件包文件运行 "复选框
发布 Azure Functions 应用程序时,请确保 "从软件包文件运行 "未被选中。
.NET 6 配置
微软最近从 .NET 6+ 中移除了图像库,从而破坏了许多传统的 API。因此,有必要对项目进行配置,使其仍允许调用这些传统 API。
在 Linux 上,设置
Installation.LinuxAndDockerDependenciesAutoConfig=真;
以确保libgdiplus
安装在机器上将以下内容添加到 .NET 6 项目的 .csproj 文件中:
......。<GenerateRuntimeConfigurationFiles>真</GenerateRuntimeConfigurationFiles>
- 在你的项目中创建一个名为
runtimeconfig.template.json
的文件,并填充以下内容:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
If True Then
"configProperties":
If True Then
"System.Drawing.EnableUnixSupport": True
End If
End If
- 最后,在程序开头添加以下一行:System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);`
在 Azure 上使用 Docker
在 Azure 上获得控制、SVG 字体访问和性能控制能力的一种方法是在 Docker 容器中使用 IronPDF 应用程序和函数。
我们有一个全面的 IronPDF Azure Docker 教程 Linux 和 Windows 实例,推荐阅读。
Azure 函数代码示例
此示例将自动向内置 Azure 日志记录器输出日志条目 (见 ILogger log
):
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log, ExecutionContext context)
{
log.LogInformation("Entered PrintPdf API function...");
// Apply license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Enable log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
IronPdf.Logging.Logger.EnableDebugging = false;
// Configure IronPdf
Installation.LinuxAndDockerDependenciesAutoConfig = false;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
try
{
log.LogInformation("About to render pdf...");
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render PDF
var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
log.LogInformation("finished rendering pdf...");
return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
}
catch (Exception e)
{
log.LogError(e, "Error while rendering pdf", e);
}
return new OkObjectResult("OK");
}
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log, ExecutionContext context)
{
log.LogInformation("Entered PrintPdf API function...");
// Apply license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Enable log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
IronPdf.Logging.Logger.EnableDebugging = false;
// Configure IronPdf
Installation.LinuxAndDockerDependenciesAutoConfig = false;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
try
{
log.LogInformation("About to render pdf...");
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render PDF
var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
log.LogInformation("finished rendering pdf...");
return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
}
catch (Exception e)
{
log.LogError(e, "Error while rendering pdf", e);
}
return new OkObjectResult("OK");
}
<FunctionName("PrintPdf")>
Public Shared Async Function Run(<HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route := Nothing)> ByVal req As HttpRequest, ByVal log As ILogger, ByVal context As ExecutionContext) As Task(Of IActionResult)
log.LogInformation("Entered PrintPdf API function...")
' Apply license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
' Enable log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
IronPdf.Logging.Logger.CustomLogger = log
IronPdf.Logging.Logger.EnableDebugging = False
' Configure IronPdf
Installation.LinuxAndDockerDependenciesAutoConfig = False
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Try
log.LogInformation("About to render pdf...")
Dim renderer As New ChromePdfRenderer()
' Render PDF
Dim pdf = renderer.RenderUrlAsPdf("https://www.google.com/")
log.LogInformation("finished rendering pdf...")
Return New FileContentResult(pdf.BinaryData, "application/pdf") With {.FileDownloadName = "google.pdf"}
Catch e As Exception
log.LogError(e, "Error while rendering pdf", e)
End Try
Return New OkObjectResult("OK")
End Function
已知问题
共享托管计划不提供 SVG 字体渲染功能
我们发现的一个限制是 Azure 托管平台 不支持服务器在其廉价的共享网络应用层中加载 SVG 字体(如 Google 字体)。这是因为出于安全考虑,这些共享主机平台不允许访问 Windows GDI+ 图形对象。
我们建议使用 Windows 或 Linux Docker 容器 或 Azure 上的 VPS,以解决需要最佳字体渲染的问题。
Azure 免费层托管速度慢
Azure 免费层和共享层以及消费计划不适合 PDF 渲染。我们推荐 Azure B1 托管/高级计划,这也是我们自己使用的计划。对于任何计算机而言,"HTML 到 PDF "的过程都是一项重要的 "工作"--类似于在自己的计算机上打开和渲染网页。 使用的是真正的浏览器引擎,因此我们需要进行相应的配置,并期望渲染时间与功率相近的台式机类似。
创建工程支持请求票单
要创建申请单,请参阅 "创建工程支持申请单"。如何提出IronPDF的工程支持请求'指南