如何在 Azure 上執行和部署 IronPDF .NET

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

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

在 Docker 上的 Azure 函數

如果您在 Docker 容器內運行 Azure Functions,請參考本教程改用此方式。


如何操作教程

設置您的專案

安裝 IronPDF 以開始使用

首先要透過 NuGet 安裝 IronPDF:

Install-Package IronPdf

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

選擇正確的Azure選項

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

Azure Basic B1 是滿足我們終端用戶渲染需求的最低主機等級。 如果您正在創建一個高吞吐量系統,可能需要對其進行升級。

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

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

"從套件檔案運行"復選框

當發佈您的 Azure Functions 應用程式時,請確保 不要 選擇 Run from package file

Azure Package File related to "從套件檔案運行"復選框

配置 .NET 6

Microsoft 最近從 .NET 6+ 中移除了成像庫,導致許多舊版 API 失效。因此,有必要配置您的項目以便仍能使用這些舊版 API。

  1. 在 Linux 上,設定 Installation.LinuxAndDockerDependenciesAutoConfig=true; 以確保機器上安裝了 libgdiplus

    1. 將以下內容添加到您的 .NET 6 項目的 .csproj 檔案中:```
  2. 在您的專案中創建一個名為 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);

使用 Docker 在 Azure 上

使用 IronPDF 應用程序和功能,並在 Docker 容器內部署,是一種獲得控制權、SVG 字型訪問和控制 Azure 性能的方法。

我們提供全面的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
VB   C#

已知問題

SVG 字體渲染在共享主機計劃上無法使用。

我們發現的一個限制是Azure代管平台不支持在其較便宜的共享 Web 應用層中加載 SVG 字體(例如 Google Fonts)的服務器。 這是因為出於安全考量,這些共享主機平台不允許訪問 Windows GDI+ 圖形對象。

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

Azure 免費層主機速度慢

Azure 的免費和共享層級,以及消費計劃,不適合用於 PDF 渲染。 我們推薦使用 Azure B1 主機/高級方案,這也是我們自己使用的。 將 HTML 轉換為 PDF 的過程對任何電腦來說都是重要的「工作」-類似於在自己的機器上開啟和渲染網頁。使用了真正的瀏覽器引擎,因此我們需要相應地提供設備並期望與具有相似功率的桌面機器有類似的渲染時間。

創建工程支援請求票证

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