如何在 Azure 上使用 .NET 運行 HTML 到 PDF?

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

是的。IronPDF 可用於在 Azure 上生成、操作和閱讀 PDF 文件。IronPDF 已在多個 Azure 平台上進行了徹底測試,包括 MVC 網站、Azure Functions 等。

Azure Functions on Docker

如果您在 Docker 容器中運行 Azure Functions,請參考 本教程 取而代之。


如何操作教程

設置您的專案

安裝 IronPDF 以開始使用

第一步是使用 NuGet 安裝 IronPDF:

Install-Package IronPdf

*或者,使用來手動安裝 .dll 直接下載 鏈接。

選擇正確的Azure選項

選擇正確的 Azure 等級

Azure Basic B1 是我們終端用戶渲染需求的最低託管級別。如果您正在建立一個高吞吐量系統,這可能需要升級。

在繼續之前
未選擇 App service plan 計劃類型可能會導致 IronPDF 無法渲染 PDF 文件。

選擇正確的託管等級 Azure 分層

"從封裝檔案運行"複選框

在發佈您的 Azure Functions 應用程式時,請確保未選取 從封裝檔案運行

.NET 6 的配置

微軟最近從 .NET 6+ 中移除了圖像類庫,使許多傳統的API無法正常使用。因此,有必要配置您的項目,以便仍然允許這些傳統API調用。

  1. 在 Linux 上,設置 Installation.LinuxAndDockerDependenciesAutoConfig=真; 以確保 libgdiplus 被安裝到機器上

  2. 在您的 .NET 6 項目的 .csproj 文件中添加以下內容:3. 在你的專案中建立一個名為 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
VB   C#
  1. 最後,在您的程序開頭添加以下行:System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

在 Azure 上使用 Docker

一種在 Azure 上獲得控制權、SVG 字體訪問權和控制性能的能力的方法是從 Docker 容器內使用 IronPDF 應用程序和函数。

我們有一個全面的 IronPDF Azure Docker 教程 適用於 Linux 和 Windows 實例,並建議閱讀。

Azure Function 範例程式碼

此範例會自動將日誌條目輸出到內建的 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
VB   C#

已知問題

SVG 字體渲染在共享主機方案中不可用

我們發現的一個限制是 Azure代管平台 不支持伺服器在較便宜的共享網頁應用程式級別中加載 SVG 字體,如 Google 字體。這是因為出於安全原因,這些共享主機平台不允許訪問 Windows GDI+ 圖形對象。

我們建議使用 Windows 或 Linux Docker 容器 或者在 Azure 上使用 VPS 來解決需要最佳字體渲染的問題。

Azure 免費層託管速度較慢

Azure 免費和共享層,以及消費計劃,不適合 PDF 渲染。我們推薦使用Azure B1 託管/高級計劃,這也是我們自己使用的。HTML 到 PDF 的過程對任何電腦來說都是一項重要的“工作”——類似於在您自己的機器上打開和渲染網頁。使用了真正的瀏覽器引擎,因此我們需要相應地提供資源,並期望與具有類似性能的桌面機器相似的渲染時間。

創建工程支持請求單

為了創建請求單,請參考「如何提出 IronPDF 工程支持請求指南