Wie führt man HTML zu PDF mit .NET auf Azure aus?

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

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.

Azure-Funktionen auf Docker

Wenn Sie Azure-Funktionen innerhalb eines Docker-Containers ausführen, lesen Sie bitte stattdessen dieses Azure Docker Linux Tutorial.


Anleitung zum Tutorial

Ihr Projekt einrichten

Installation von IronPDF für den Einstieg

Der erste Schritt besteht darin, IronPDF mit NuGet zu installieren:

Install-Package IronPdf

Alternativ können Sie das .dll manuell installieren, indem Sie den IronPDF-Direktdownload-Paket für Azure verwenden.

Richtige Azure-Optionen auswählen

Auswahl der richtigen Hosting-Ebene Azure Tier

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

Das Kontrollkästchen "Aus Paketdatei ausführen

Wenn Sie Ihre Azure Functions-Anwendung veröffentlichen, stellen Sie sicher, dass Run from package file NICHT ausgewählt ist.

Deaktivieren Sie die Option Aus Paketdatei ausführen

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
      }
}
{
      "configProperties": {
         "System.Drawing.EnableUnixSupport": true
      }
}
If True Then
	  "configProperties":
	  If True Then
		 "System.Drawing.EnableUnixSupport": True
	  End If
End If
$vbLabelText   $csharpLabel
  1. Fügen Sie schließlich die folgende Zeile am Anfang Ihres Programms hinzu: System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

Verwendung von Docker auf Azure

Eine Möglichkeit, die Kontrolle, den Zugriff auf SVG-Schriften und die Leistung auf Azure zu kontrollieren, ist die Verwendung von IronPDF-Anwendungen und -Funktionen innerhalb von Docker-Containern.

Wir haben ein umfassendes IronPDF Azure Docker Tutorial für Linux- und Windows-Instanzen, das empfehlenswert ist.

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;

    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
$vbLabelText   $csharpLabel

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übersicht keine Server unterstützt, die SVG-Schriftarten, wie Google Fonts, in ihren günstigeren gemeinsam genutzten Web-App-Ebenen laden. Der Grund dafür ist, dass diese Shared-Hosting-Plattformen aus Sicherheitsgründen nicht auf Windows-GDI+-Grafikobjekte zugreifen dürfen.

Wir empfehlen die Verwendung eines Windows- oder Linux-Docker-Container-Leitfadens für IronPDF oder eventuell eines VPS auf Azure, um dieses Problem zu umgehen, wo die beste Schriftartendarstellung 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 Anfrage-Ticket zu erstellen, beziehen Sie sich auf den Leitfaden für die Erstellung einer technischen Supportanfrage für IronPDF.

Chaknith Bin
Software-Ingenieur
Chaknith arbeitet an IronXL und IronBarcode. Er hat tiefgehende Expertise in C# und .NET und hilft, die Software zu verbessern und Kunden zu unterstützen. Seine Erkenntnisse aus Benutzerinteraktionen tragen zu besseren Produkten, Dokumentation und einem insgesamt besseren Erlebnis bei.