So führen Sie IronPDF .NET auf einer Azure-Funktion aus und implementieren es

This article was translated from English: Does it need improvement?
Translated
View the article in English
Azure 1 related to So führen Sie IronPDF .NET auf einer Azure-Funktion aus und implementieren es

Ja. IronPDF kann verwendet werden, um PDF-Dokumente auf Azure zu erzeugen, zu bearbeiten und zu lesen. IronPDF wurde gründlich auf mehreren Azure-Plattformen getestet, darunter MVC-Websites, Azure Functions und viele mehr.


Anleitung zum Tutorial

Installieren Sie das IronPdf-Paket

Azure Function Apps haben drei unterschiedliche Umgebungen: Linux, Windows und Container. Dieser Artikel erklärt, wie IronPdf in allen drei Umgebungen eingerichtet wird. Unter diesen wird die Azure Function App Container empfohlen, da sie eine isolierte Umgebung bietet. Um zu beginnen, wählen wir das passende Paket zur Installation aus.

Azure Function App-Container

Azure Function App Container erfordert minimalen Aufwand und ist die empfohlene Methode, um IronPdf bereitzustellen.

  • IronPdf.Linux-Paket
    Install-Package IronPdf.Linux

    Docker-Datei konfigurieren

Konfigurieren Sie die Docker-Datei basierend auf der von Ihnen verwendeten Linux-Distribution. Bitte beachten Sie diesen Artikel für detaillierte Anweisungen.

Azure Function App (Windows)

Um das Standard-IronPdf-Paket zu verwenden, stellen Sie sicher, dass die Option Run from package file nicht aktiviert ist. Das Aktivieren dieser Option stellt das Projekt als ZIP-Datei bereit, was die Dateikonfiguration von IronPdf beeinträchtigt. Wenn Sie die Option Aus Paketdatei ausführen aktivieren möchten, installieren Sie stattdessen das IronPdf.Slim-Paket.

Install-Package IronPdf
Azure Package File related to Azure Function App (Windows)

Azure Function App(Linux)

Für Azure Function App (Linux) wird das Projekt standardmäßig als ZIP-Datei bereitgestellt, und dieses Verhalten kann nicht deaktiviert werden. Dies ist ähnlich wie das Aktivieren der Option Aus Paketdatei ausführen in der Azure Function App (Windows).

Richtige Azure-Optionen auswählen

Die richtige Hosting-Stufe wählen

Azure Basic B1 ist das minimale Hosting-Level, das für die Renderanforderungen unserer Endbenutzer erforderlich ist. Wenn Sie ein System mit hohem Durchsatz aufbauen, muss dieses möglicherweise aufgerüstet werden.

Bevor Sie fortfahren
Das Versäumnis, einen App-Dienstplan auszuwählen, kann dazu führen, dass IronPdf PDF-Dokumente nicht rendern kann.

Auswahl der richtigen Hosting-Ebene Azure Tier

Konfiguration für .NET 6

Microsoft hat kürzlich die Imaging-Bibliotheken aus .NET 6+ entfernt, wodurch viele Legacy-APIs zerstört wurden. Daher ist es notwendig, Ihr Projekt so zu konfigurieren, dass diese Legacy-API-Aufrufe weiterhin möglich sind.

  1. Unter Linux setzen Sie Installation.LinuxAndDockerDependenciesAutoConfig=true;, um sicherzustellen, dass libgdiplus auf dem Computer installiert ist.

  2. Fügen Sie das Folgende zur .csproj-Datei Ihres .NET 6-Projekts hinzu: <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>

  3. Erstellen Sie in Ihrem Projekt eine Datei namens runtimeconfig.template.json und füllen Sie diese mit folgendem Inhalt:
{
      "configProperties": {
         "System.Drawing.EnableUnixSupport": true
      }
}
  1. Fügen Sie schließlich die folgende Zeile am Anfang Ihres Programms hinzu: System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

Azure Funktionscode Beispiel

Dieses Beispiel gibt automatisch Protokolleinträge an den integrierten Azure-Logger aus (siehe 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;

    // Configure IronPdf
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    IronPdf.Installation.AutomaticallyDownloadNativeBinaries = true;
    IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    IronPdf.Installation.CustomDeploymentDirectory = "/tmp";

    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($"Error while rendering pdf: {e}");
    }
}
[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;

    // Configure IronPdf
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    IronPdf.Installation.AutomaticallyDownloadNativeBinaries = true;
    IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    IronPdf.Installation.CustomDeploymentDirectory = "/tmp";

    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($"Error while rendering pdf: {e}");
    }
}
<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

	' Configure IronPdf
	IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
	IronPdf.Installation.AutomaticallyDownloadNativeBinaries = True
	IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
	IronPdf.Installation.CustomDeploymentDirectory = "/tmp"

	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)
		Return New OkObjectResult($"Error while rendering pdf: {e}")
	End Try
End Function
$vbLabelText   $csharpLabel

Das Erstellen eines Projekts mit der Azure Function-Vorlage in Visual Studio kann zu leicht abweichendem Code führen. Aufgrund dieser Unterschiede kann es sein, dass ein Projekt funktioniert, während ein anderes nicht, selbst wenn dasselbe Paket installiert ist. Wenn dies auftritt, bitte die Eigenschaft CustomDeploymentDirectory auf "/tmp" setzen.

Jede Installationskonfiguration verstehen

  • LinuxAndDockerDependenciesAutoConfig: Diese Einstellung überprüft und versucht, alle notwendigen Abhängigkeiten für die Chrome Engine herunterzuladen. Sie ist erforderlich bei der Verwendung von Systemen ohne GUI, wie Linux. In Containersystemen werden die Abhängigkeiten normalerweise in der Dockerfile aufgeführt; daher können Sie dies auf false setzen.
  • AutomaticallyDownloadNativeBinaries: Diese Option lädt das native Chrome-Binärprogramm zur Laufzeit herunter. Es ist erforderlich, wenn das IronPdf.Slim-Paket verwendet wird.
  • CustomDeploymentDirectory: Diese Einstellung ist erforderlich für Systeme mit eingeschränktem Schreibzugriff.

Bekannte Probleme

Das Rendern von SVG-Schriften ist bei Shared-Hosting-Angeboten nicht verfügbar

Eine Einschränkung, die wir festgestellt haben, ist, dass die Azure-Hosting-Plattform keine Server unterstützt, die SVG-Schriften, wie zum Beispiel Google Fonts, in ihren günstigeren Shared-Web-App-Stufen laden. Dies liegt daran, dass diese gemeinsam genutzten Hosting-Plattformen aus Sicherheitsgründen nicht auf Windows-GDI+-Grafikobjekte zugreifen dürfen.

Wir empfehlen die Verwendung eines Windows- oder Linux-Docker-Containers oder möglicherweise eines VPS auf Azure, um dieses Problem zu umgehen, bei dem die beste Schriftwiedergabe erforderlich ist.

Azure Free Tier Hosting ist langsam

Azure Free und Shared Tiers sowie der Consumption Plan sind für das PDF-Rendering nicht geeignet. Wir empfehlen Azure B1 Hosting/Premium Plan, den wir selbst nutzen. Der Prozess von HTML zu PDF ist bedeutende 'Arbeit' für jeden Computer – ähnlich wie das Öffnen und Rendern einer Webseite auf Ihrem eigenen Gerät. Eine echte Browser-Engine wird verwendet, daher müssen wir entsprechend vorsorgen und ähnliche Renderzeiten wie bei einem Desktop-Computer mit vergleichbarer Leistung erwarten.

Erstellen eines Tickets für eine technische Supportanfrage

Um ein Anforderungsticket zu erstellen, beziehen Sie sich auf den 'How to Make an Engineering Support Request for IronPDF' Leitfaden