Zum Fußzeileninhalt springen
IRONPDF NUTZEN

Erstellen eines Azure PDF-Generators mit IronPDF (.NET 10-Anleitung)

Die Erstellung von Azure-PDFs wird unkompliziert, wenn man die Professional Rendering-Engine von IronPDF mit der flexiblen Cloud-Infrastruktur von Azure kombiniert. Dieser Leitfaden zeigt Ihnen, wie Sie einen produktionsreifen PDF-Generator erstellen, bereitstellen und optimieren, der alles von der HTML-Konvertierung bis hin zur komplexen Dokumentmanipulation abdeckt.

Der Aufbau eines zuverlässigen, cloudbasierten PDF-Generators stellt einzigartige Herausforderungen dar. Aufgrund von Sandbox-Beschränkungen, Speicherbegrenzungen und der Komplexität verteilter Systeme haben viele Entwickler Schwierigkeiten, eine produktionsreife Lösung zu finden. Hier arbeiten Azure und IronPDF gut zusammen – IronPDF bietet Professional PDF-Generierung , die mit Ihrem Arbeitsaufkommen skaliert und gleichzeitig die wichtigsten Funktionen beibehält.

Egal ob Sie Rechnungen oder Berichte erstellen oder Webinhalte in PDFs konvertieren möchten – dieser Leitfaden zeigt Ihnen, wie Sie einen zuverlässigen Azure PDF-Generator erstellen. Sie übernehmen alle Aufgaben von der einfachen HTML-Konvertierung bis hin zur komplexen Dokumentenmanipulation und optimieren dabei Leistung und Kosten.

Starten Sie mit einer kostenlosen Testversion von IronPDF und folgen Sie den Anweisungen, um Ihre Cloud-PDF-Lösung zu erstellen.

Was macht einen guten Azure PDF Generator aus?

Nicht alle PDF-Lösungen funktionieren gut in Cloud-Umgebungen. Ein produktionsreifer Azure PDF-Generator muss über die einfache Dokumentenerstellung hinausgehende, kritische Anforderungen erfüllen. Das Verständnis der Bereitstellungsoptionen von Azure Functions gewährleistet den Erfolg.

Warum ist die Performance bei der Cloud-PDF-Generierung wichtig?

Leistungsfähigkeit und Skalierbarkeit bestimmen den Erfolg Ihrer Lösung. Ihr Generator muss gleichzeitige Anfragen ohne Engpässe verarbeiten, bei Lastspitzen automatisch skalieren und auch bei komplexen Dokumenten konsistente Antwortzeiten gewährleisten. Wählen Sie eine Bibliothek, die für Cloud-Umgebungen entwickelt wurde und die Nuancen der serverlosen Architektur versteht.

Welche Azure-spezifischen Einschränkungen sollten Sie berücksichtigen?

Die Azure-Plattform bringt spezifische Überlegungen mit sich. Die App-Dienst-Sandbox schränkt Win32/Grafik-APIs ein – Bibliotheken, die Desktop-Grafikstacks verwenden, können fehlschlagen. Speicherbeschränkungen in Verbrauchsplänen führen bei größeren Dokumenten zu Fehlern. Die verteilte Architektur erfordert effiziente zustandslose Operationen. Detaillierte Informationen zur Fehlerbehebung bei Azure-Bereitstellungen finden Sie in der vollständigen Dokumentation zur Fehlerbehebung .

Welche Enterprise Funktionen sind unerlässlich?

Enterprise benötigen mehr als nur HTML-Konvertierung. Moderne PDF-Generatoren müssen JavaScript Rendering unterstützen, komplexes CSS verarbeiten können und Sicherheitsfunktionen wie Verschlüsselung und digitale Signaturen bieten. IronPDF begegnet diesen Herausforderungen mit seiner auf Chrome basierenden Rendering-Engine und eignet sich daher hervorragend für den Einsatz in Azure.

Worin besteht der Unterschied zwischen Azure App-Diensts und Azure Functions?

Azure App-Diensts und Azure Functions hosten beide Cloud-Anwendungen, dienen aber unterschiedlichen Zwecken. Die Wahl der richtigen Lösung beeinflusst Ihre Architektur, Ihr Kostenmodell und Ihren Bereitstellungsansatz.

Wie wählt man Azure App-Diensts aus?

Azure App-Diensts bietet vollständig verwaltetes Hosting für Webanwendungen, REST-APIs und mobile Backends. Es bietet persistente Ressourcen, unterstützt langlaufende Prozesse und beinhaltet integrierte Skalierung, Bereitstellungsslots und CI/CD-Integration. Diese Eigenschaften machen es ideal für kontinuierlich laufende Anwendungen.

Wie entscheidet man, wann Azure Functions die bessere Wahl sind?

Azure Functions bietet serverlose Rechenleistung für ereignisgesteuerte, kurzlebige Aufgaben. Funktionen werden nur bei Bedarf (HTTP-Anfrage, Timer oder Nachrichtenwarteschlange) ausgeführt, und Sie zahlen nur für die Ausführungszeit. Sie eignen sich hervorragend für Hintergrundprozesse, Datenverarbeitung, Automatisierungsskripte und Microservices, ohne dass ständig Hosts laufen müssen.

Azure-Hostingoptionen für die PDF-Generierung
Merkmal App-Dienst Azure Functions
Abrechnungsmodell Fester monatlicher Betrag Pro Ausführung
Leerlaufkosten Immer in Rechnung gestellt Null im Leerlauf
Kaltstartrisiko Minimal Ja (Verbrauchsplan)
Langlaufende PDFs Unterstützt Es gelten Zeitlimits.
Kundenspezifische Container Unterstützt Nur Premium/Dedicated

Wie installiert man IronPDF für Azure Functions?

Für die Einrichtung von IronPDF in Azure Functions ist die Auswahl des richtigen Pakets erforderlich. Die Bibliothek bietet Optionen für Windows- und Linux-Umgebungen. Die richtige Auswahl der Komponenten gewährleistet optimale Leistung und vermeidet Kompatibilitätsprobleme.

Welches IronPDF Paket sollten Sie installieren?

Für Windows-basierte Azure Functions verwenden Sie das Standard- IronPDF Paket, das auf NuGet verfügbar ist. Für Linux-Container verwenden Sie IronPdf.Linux mit run-from-package deployment für schnellere Kaltstarts.

# NuGet Package Manager (Windows / App-Dienst)
Install-Package IronPdf

# .NET CLI (cross-platform)
dotnet add package IronPdf
# NuGet Package Manager (Windows / App-Dienst)
Install-Package IronPdf

# .NET CLI (cross-platform)
dotnet add package IronPdf
SHELL
# Linux / container deployments
Install-Package IronPdf.Linux

# .NET CLI alternative
dotnet add package IronPdf.Linux
# Linux / container deployments
Install-Package IronPdf.Linux

# .NET CLI alternative
dotnet add package IronPdf.Linux
SHELL

Wie konfiguriert man IronPDF für Azure Functions?

Hier ist eine vollständige Azure-Funktion zur PDF-Generierung mit korrekter Konfiguration für .NET 10 unter Verwendung von Anweisungen auf oberster Ebene:

using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Net;

// Configure IronPDF once at startup
License.LicenseKey = Environment.GetEnvironmentVariable("IronPdfLicenseKey") ?? string.Empty;
Installation.LinuxAndDockerDependenciesAutoConfig = true;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
Installation.CustomDeploymentDirectory = "/tmp";

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();

// Azure Function class
public class PdfGeneratorFunction
{
    private readonly ILogger _logger;

    public PdfGeneratorFunction(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<PdfGeneratorFunction>();
    }

    [Function("GeneratePdf")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = "generate-pdf")] HttpRequestData req)
    {
        string htmlContent = await req.ReadAsStringAsync() ?? string.Empty;
        var response = req.CreateResponse(HttpStatusCode.OK);

        if (string.IsNullOrWhiteSpace(htmlContent))
        {
            response.StatusCode = HttpStatusCode.BadRequest;
            await response.WriteStringAsync("HTML content is required.");
            return response;
        }

        try
        {
            var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    MarginTop = 10,
                    MarginBottom = 10,
                    MarginLeft = 10,
                    MarginRight = 10,
                    EnableJavaScript = true
                }
            };

            using var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            response.Headers.Add("Content-Type", "application/pdf");
            await response.WriteBytesAsync(pdf.BinaryData);
            _logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount);
            return response;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error generating PDF.");
            response.StatusCode = HttpStatusCode.InternalServerError;
            await response.WriteStringAsync($"PDF generation failed: {ex.Message}");
            return response;
        }
    }
}
using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Net;

// Configure IronPDF once at startup
License.LicenseKey = Environment.GetEnvironmentVariable("IronPdfLicenseKey") ?? string.Empty;
Installation.LinuxAndDockerDependenciesAutoConfig = true;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
Installation.CustomDeploymentDirectory = "/tmp";

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();

// Azure Function class
public class PdfGeneratorFunction
{
    private readonly ILogger _logger;

    public PdfGeneratorFunction(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<PdfGeneratorFunction>();
    }

    [Function("GeneratePdf")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = "generate-pdf")] HttpRequestData req)
    {
        string htmlContent = await req.ReadAsStringAsync() ?? string.Empty;
        var response = req.CreateResponse(HttpStatusCode.OK);

        if (string.IsNullOrWhiteSpace(htmlContent))
        {
            response.StatusCode = HttpStatusCode.BadRequest;
            await response.WriteStringAsync("HTML content is required.");
            return response;
        }

        try
        {
            var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    MarginTop = 10,
                    MarginBottom = 10,
                    MarginLeft = 10,
                    MarginRight = 10,
                    EnableJavaScript = true
                }
            };

            using var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            response.Headers.Add("Content-Type", "application/pdf");
            await response.WriteBytesAsync(pdf.BinaryData);
            _logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount);
            return response;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error generating PDF.");
            response.StatusCode = HttpStatusCode.InternalServerError;
            await response.WriteStringAsync($"PDF generation failed: {ex.Message}");
            return response;
        }
    }
}
Imports IronPdf
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Imports Microsoft.Extensions.Logging
Imports System.Net

' Configure IronPDF once at startup
License.LicenseKey = If(Environment.GetEnvironmentVariable("IronPdfLicenseKey"), String.Empty)
Installation.LinuxAndDockerDependenciesAutoConfig = True
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Installation.CustomDeploymentDirectory = "/tmp"

Dim host = New HostBuilder() _
    .ConfigureFunctionsWorkerDefaults() _
    .Build()

host.Run()

' Azure Function class
Public Class PdfGeneratorFunction
    Private ReadOnly _logger As ILogger

    Public Sub New(loggerFactory As ILoggerFactory)
        _logger = loggerFactory.CreateLogger(Of PdfGeneratorFunction)()
    End Sub

    <Function("GeneratePdf")>
    Public Async Function Run(
        <HttpTrigger(AuthorizationLevel.Function, "post", Route:="generate-pdf")> req As HttpRequestData) As Task(Of HttpResponseData)

        Dim htmlContent As String = Await req.ReadAsStringAsync() OrElse String.Empty
        Dim response = req.CreateResponse(HttpStatusCode.OK)

        If String.IsNullOrWhiteSpace(htmlContent) Then
            response.StatusCode = HttpStatusCode.BadRequest
            Await response.WriteStringAsync("HTML content is required.")
            Return response
        End If

        Try
            Dim renderer = New ChromePdfRenderer With {
                .RenderingOptions = New ChromePdfRenderOptions With {
                    .MarginTop = 10,
                    .MarginBottom = 10,
                    .MarginLeft = 10,
                    .MarginRight = 10,
                    .EnableJavaScript = True
                }
            }

            Using pdf = renderer.RenderHtmlAsPdf(htmlContent)
                response.Headers.Add("Content-Type", "application/pdf")
                Await response.WriteBytesAsync(pdf.BinaryData)
                _logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount)
                Return response
            End Using
        Catch ex As Exception
            _logger.LogError(ex, "Error generating PDF.")
            response.StatusCode = HttpStatusCode.InternalServerError
            Await response.WriteStringAsync($"PDF generation failed: {ex.Message}")
            Return response
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

Warum sind diese Konfigurationseinstellungen wichtig?

Die Konfigurationseinstellungen gewährleisten den Erfolg der Azure-Bereitstellung. LinuxAndDockerDependenciesAutoConfig konfiguriert Chrome-Abhängigkeiten korrekt, während die Deaktivierung des GPU-Modus Probleme beim serverlosen Rendering verhindert. Das Festlegen des Deployment-Verzeichnisses auf /tmp ermöglicht den Schreibzugriff in eingeschränkten Azure Functions-Umgebungen, was eine häufige Quelle für "Zugriff verweigert"-Fehler ist.

Beispiel für die PDF-Ausgabedatei

Monatsbericht-PDF generiert von Azure Function mit Verkaufszahlen, regionaler Datentabelle und Unternehmens-Highlights mit professioneller grüner Kopfzeile.

Welche Azure-Hosting-Ebene sollten Sie für die PDF-Generierung wählen?

Die PDF-Erstellung mit IronPDF erfordert mehr Rechen- und Grafikleistung als weniger umfangreiche Arbeitslasten. Sowohl Microsoft als auch IronPDF raten aufgrund von GDI+-Beschränkungen, Begrenzungen der gemeinsam genutzten Rechenleistung und unzureichendem Speicher von den Tarifen Free, Shared und Consumption ab.

Empfohlene Azure-Tarife für IronPDF
Stufe GDI+-Unterstützung Geeignet für PDF Anmerkungen
Kostenlos / Gemeinsam Nein Nein Eingeschränkter Sandkasten
Verbrauch (Funktionen) Begrenzt Begrenzt Speicherbegrenzungen gelten
Basis / Standard Ja Ja Mindestempfehlung
Premium / Isoliert Ja Ja (am besten) Voller Funktionszugriff

Für Workloads mit hohem Volumen bieten die Premium- oder Isolated-Tarife dedizierte Rechenkapazität, VNET-Integration und keine Kaltstartverzögerungen – alles Faktoren, die den PDF-Durchsatz und die Zuverlässigkeit direkt verbessern.

Wie erstellt man eine serverlose PDF-API mit Azure Functions?

Die Entwicklung einer serverlosen PDF-API mit Azure Functions bietet automatische Skalierung, nutzungsbasierte Abrechnung und minimalen Infrastrukturverwaltungsaufwand. Die unten stehende Funktion akzeptiert JSON-Anfragen mit optionalen Sicherheitseinstellungen und gibt einen PDF-Byte-Stream zurück.

Wie strukturiert man eine produktive PDF-API?

using IronPdf;
using IronPdf.Editing;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Net;
using System.Text.Json;

public class PdfApiFunction
{
    private static readonly ChromePdfRenderer Renderer = new ChromePdfRenderer
    {
        RenderingOptions = new ChromePdfRenderOptions
        {
            PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
        }
    };

    [Function("ConvertUrlToPdf")]
    public async Task<HttpResponseData> ConvertUrl(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
    {
        var body = await req.ReadAsStringAsync() ?? "{}";
        var request = JsonSerializer.Deserialize<ConvertUrlRequest>(body);

        if (string.IsNullOrEmpty(request?.Url))
        {
            var bad = req.CreateResponse(HttpStatusCode.BadRequest);
            await bad.WriteStringAsync("URL is required.");
            return bad;
        }

        using var pdf = Renderer.RenderUrlAsPdf(request.Url);

        if (request.AddWatermark)
        {
            pdf.ApplyWatermark(
                "<h2>CONFIDENTIAL</h2>",
                30,
                VerticalAlignment.Middle,
                HorizontalAlignment.Center);
        }

        if (request.ProtectWithPassword && !string.IsNullOrEmpty(request.Password))
        {
            pdf.SecuritySettings.UserPassword = request.Password;
            pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        }

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "application/pdf");
        await response.WriteBytesAsync(pdf.BinaryData);
        return response;
    }
}

public class ConvertUrlRequest
{
    public string Url { get; set; } = string.Empty;
    public bool AddWatermark { get; set; }
    public bool ProtectWithPassword { get; set; }
    public string Password { get; set; } = string.Empty;
}
using IronPdf;
using IronPdf.Editing;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Net;
using System.Text.Json;

public class PdfApiFunction
{
    private static readonly ChromePdfRenderer Renderer = new ChromePdfRenderer
    {
        RenderingOptions = new ChromePdfRenderOptions
        {
            PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
        }
    };

    [Function("ConvertUrlToPdf")]
    public async Task<HttpResponseData> ConvertUrl(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
    {
        var body = await req.ReadAsStringAsync() ?? "{}";
        var request = JsonSerializer.Deserialize<ConvertUrlRequest>(body);

        if (string.IsNullOrEmpty(request?.Url))
        {
            var bad = req.CreateResponse(HttpStatusCode.BadRequest);
            await bad.WriteStringAsync("URL is required.");
            return bad;
        }

        using var pdf = Renderer.RenderUrlAsPdf(request.Url);

        if (request.AddWatermark)
        {
            pdf.ApplyWatermark(
                "<h2>CONFIDENTIAL</h2>",
                30,
                VerticalAlignment.Middle,
                HorizontalAlignment.Center);
        }

        if (request.ProtectWithPassword && !string.IsNullOrEmpty(request.Password))
        {
            pdf.SecuritySettings.UserPassword = request.Password;
            pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        }

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "application/pdf");
        await response.WriteBytesAsync(pdf.BinaryData);
        return response;
    }
}

public class ConvertUrlRequest
{
    public string Url { get; set; } = string.Empty;
    public bool AddWatermark { get; set; }
    public bool ProtectWithPassword { get; set; }
    public string Password { get; set; } = string.Empty;
}
Imports IronPdf
Imports IronPdf.Editing
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Imports System.Net
Imports System.Text.Json

Public Class PdfApiFunction
    Private Shared ReadOnly Renderer As New ChromePdfRenderer With {
        .RenderingOptions = New ChromePdfRenderOptions With {
            .PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
            .PrintHtmlBackgrounds = True,
            .CreatePdfFormsFromHtml = True,
            .CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
        }
    }

    <Function("ConvertUrlToPdf")>
    Public Async Function ConvertUrl(
        <HttpTrigger(AuthorizationLevel.Function, "post")> req As HttpRequestData) As Task(Of HttpResponseData)

        Dim body As String = Await req.ReadAsStringAsync() ?? "{}"
        Dim request As ConvertUrlRequest = JsonSerializer.Deserialize(Of ConvertUrlRequest)(body)

        If String.IsNullOrEmpty(request?.Url) Then
            Dim bad As HttpResponseData = req.CreateResponse(HttpStatusCode.BadRequest)
            Await bad.WriteStringAsync("URL is required.")
            Return bad
        End If

        Using pdf = Renderer.RenderUrlAsPdf(request.Url)
            If request.AddWatermark Then
                pdf.ApplyWatermark(
                    "<h2>CONFIDENTIAL</h2>",
                    30,
                    VerticalAlignment.Middle,
                    HorizontalAlignment.Center)
            End If

            If request.ProtectWithPassword AndAlso Not String.IsNullOrEmpty(request.Password) Then
                pdf.SecuritySettings.UserPassword = request.Password
                pdf.SecuritySettings.AllowUserCopyPasteContent = False
            End If

            Dim response As HttpResponseData = req.CreateResponse(HttpStatusCode.OK)
            response.Headers.Add("Content-Type", "application/pdf")
            Await response.WriteBytesAsync(pdf.BinaryData)
            Return response
        End Using
    End Function
End Class

Public Class ConvertUrlRequest
    Public Property Url As String = String.Empty
    Public Property AddWatermark As Boolean
    Public Property ProtectWithPassword As Boolean
    Public Property Password As String = String.Empty
End Class
$vbLabelText   $csharpLabel

Diese Konstruktion bietet Flexibilität bei gleichzeitiger Gewährleistung einer sauberen Trennung. Die Funktion akzeptiert JSON-Anfragen, verarbeitet diese inklusive Fehlerbehandlung und gibt PDFs mit optionaler Sicherheitsfunktion zurück. Sie können Wasserzeichen hinzufügen, Passwortschutz implementieren und digitale Signaturen anwenden.

Was sind die besten Praktiken für die PDF-Erstellung in der Produktion?

Die Erstellung von Produktions-PDFs erfordert besondere Aufmerksamkeit hinsichtlich Leistung, Zuverlässigkeit und Ressourcenmanagement. Diese bewährten Verfahren gewährleisten eine optimale Leistung unter realen Bedingungen bei gleichzeitigen Anfragen.

Wie verwalten Sie Speicher und Ressourcen?

Bei gleichzeitigen Anfragen wird die Speicherverwaltung entscheidend. Entsorgen Sie PDF-Objekte immer mit using-Anweisungen. Bei großen Dokumenten sollte die Ausgabe als Stream erfolgen, anstatt ganze PDFs in den Speicher zu laden. Implementieren Sie eine Anforderungsdrosselung, um Speichererschöpfung bei Lastspitzen zu verhindern.

using IronPdf;
using Microsoft.Extensions.Logging;

public static class PdfProductionService
{
    // Limit concurrent PDF operations to avoid memory exhaustion
    private static readonly SemaphoreSlim Throttle = new SemaphoreSlim(5);

    public static async Task<byte[]> GeneratePdfAsync(string html, ILogger log)
    {
        await Throttle.WaitAsync();
        try
        {
            using var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    Timeout = 60,
                    UseMarginsOnHeaderAndFooter = UseMargins.Neinne
                }
            };

            renderer.RenderingOptions.WaitFor.RenderDelay(1000);
            using var pdf = renderer.RenderHtmlAsPdf(html);

            log.LogInformation(
                "PDF generated: {Pages} pages, {Bytes} bytes",
                pdf.PageCount,
                pdf.BinaryData.Length);

            return pdf.BinaryData;
        }
        finally
        {
            Throttle.Release();
        }
    }
}
using IronPdf;
using Microsoft.Extensions.Logging;

public static class PdfProductionService
{
    // Limit concurrent PDF operations to avoid memory exhaustion
    private static readonly SemaphoreSlim Throttle = new SemaphoreSlim(5);

    public static async Task<byte[]> GeneratePdfAsync(string html, ILogger log)
    {
        await Throttle.WaitAsync();
        try
        {
            using var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    Timeout = 60,
                    UseMarginsOnHeaderAndFooter = UseMargins.Neinne
                }
            };

            renderer.RenderingOptions.WaitFor.RenderDelay(1000);
            using var pdf = renderer.RenderHtmlAsPdf(html);

            log.LogInformation(
                "PDF generated: {Pages} pages, {Bytes} bytes",
                pdf.PageCount,
                pdf.BinaryData.Length);

            return pdf.BinaryData;
        }
        finally
        {
            Throttle.Release();
        }
    }
}
Imports IronPdf
Imports Microsoft.Extensions.Logging
Imports System.Threading

Public Module PdfProductionService
    ' Limit concurrent PDF operations to avoid memory exhaustion
    Private ReadOnly Throttle As New SemaphoreSlim(5)

    Public Async Function GeneratePdfAsync(html As String, log As ILogger) As Task(Of Byte())
        Await Throttle.WaitAsync()
        Try
            Using renderer As New ChromePdfRenderer With {
                .RenderingOptions = New ChromePdfRenderOptions With {
                    .Timeout = 60,
                    .UseMarginsOnHeaderAndFooter = UseMargins.Neinne
                }
            }
                renderer.RenderingOptions.WaitFor.RenderDelay(1000)
                Using pdf = renderer.RenderHtmlAsPdf(html)
                    log.LogInformation("PDF generated: {Pages} pages, {Bytes} bytes", pdf.PageCount, pdf.BinaryData.Length)
                    Return pdf.BinaryData
                End Using
            End Using
        Finally
            Throttle.Release()
        End Try
    End Function
End Module
$vbLabelText   $csharpLabel

Wie überwacht man den Zustand der PDF-Generierung?

Die Überwachung ermöglicht es Ihnen, den Zustand Ihres PDF-Generators einzusehen. Verwenden Sie Application Insights, um Generierungszeiten, Fehlerraten und Ressourcenverbrauch zu verfolgen. Richten Sie Warnmeldungen für Anomalien wie vermehrte Fehler oder eine Verschlechterung der Reaktionsfähigkeit ein. Protokollieren Sie detaillierte Informationen zu jeder Anfrage zur Fehlerbehebung.

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;

// Track custom metrics using Application Insights
var telemetry = new TelemetryClient(TelemetryConfiguration.CreateDefault());

var sw = System.Diagnostics.Stopwatch.StartNew();
var pdfBytes = await PdfProductionService.GeneratePdfAsync(html, logger);
sw.Stop();

telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds);
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length);
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;

// Track custom metrics using Application Insights
var telemetry = new TelemetryClient(TelemetryConfiguration.CreateDefault());

var sw = System.Diagnostics.Stopwatch.StartNew();
var pdfBytes = await PdfProductionService.GeneratePdfAsync(html, logger);
sw.Stop();

telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds);
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length);
Imports Microsoft.ApplicationInsights
Imports Microsoft.ApplicationInsights.Extensibility
Imports System.Diagnostics

' Track custom metrics using Application Insights
Dim telemetry As New TelemetryClient(TelemetryConfiguration.CreateDefault())

Dim sw As Stopwatch = Stopwatch.StartNew()
Dim pdfBytes = Await PdfProductionService.GeneratePdfAsync(html, logger)
sw.Stop()

telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds)
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length)
$vbLabelText   $csharpLabel

Wie handhabt man erweiterte PDF-Funktionen in Azure?

Die erweiterten Funktionen von IronPDF erweitern Ihren PDF-Generator über die grundlegende PDF-Erstellung hinaus. Diese Funktionen werden in Azure vollständig unterstützt und ermöglichen Professional Workflows zur Dokumentenverarbeitung.

Wie sichert man PDFs mit Verschlüsselung und Berechtigungen?

IronPDF unterstützt Passwortschutz und Berechtigungsverwaltung für eine detaillierte Dokumentenkontrolle. Die Funktion für PDF-Berechtigungen und Passwörter verwendet AES-256-Verschlüsselung:

using IronPdf;

// Load or generate the PDF
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "view-password";
pdf.SecuritySettings.OwnerPassword = "admin-password";

// Restrict permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;

pdf.SaveAs("azure-secure-report.pdf");
using IronPdf;

// Load or generate the PDF
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "view-password";
pdf.SecuritySettings.OwnerPassword = "admin-password";

// Restrict permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;

pdf.SaveAs("azure-secure-report.pdf");
Imports IronPdf

' Load or generate the PDF
Using pdf = New ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>")

    ' Apply password protection
    pdf.SecuritySettings.UserPassword = "view-password"
    pdf.SecuritySettings.OwnerPassword = "admin-password"

    ' Restrict permissions
    pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
    pdf.SecuritySettings.AllowUserCopyPasteContent = False
    pdf.SecuritySettings.AllowUserAnnotations = False

    pdf.SaveAs("azure-secure-report.pdf")
End Using
$vbLabelText   $csharpLabel

Sie können Verschlüsselung mit digitalen Signaturen kombinieren, um unanfechtbare, fälschungssichere Dokumente zu erstellen.

Wie fügt man Kopf- und Fußzeilen sowie Wasserzeichen hinzu?

Das Hinzufügen von Kopf- und Fußzeilen mit dynamischen Seitenzahlen und benutzerdefinierten Wasserzeichen funktioniert in Azure genauso wie in jeder anderen .NET Umgebung:

using IronPdf;

using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>");

// Add dynamic header with page numbers
var header = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
    Height = 15
};
pdf.AddHTMLHeaders(header);

// Apply a draft watermark when needed
pdf.ApplyWatermark(
    "<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
    45,
    IronPdf.Editing.VerticalAlignment.Middle,
    IronPdf.Editing.HorizontalAlignment.Center);

pdf.SaveAs("report-with-header.pdf");
using IronPdf;

using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>");

// Add dynamic header with page numbers
var header = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
    Height = 15
};
pdf.AddHTMLHeaders(header);

// Apply a draft watermark when needed
pdf.ApplyWatermark(
    "<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
    45,
    IronPdf.Editing.VerticalAlignment.Middle,
    IronPdf.Editing.HorizontalAlignment.Center);

pdf.SaveAs("report-with-header.pdf");
Imports IronPdf

Using pdf = New ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>")
    ' Add dynamic header with page numbers
    Dim header As New HtmlHeaderFooter With {
        .HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
        .Height = 15
    }
    pdf.AddHTMLHeaders(header)

    ' Apply a draft watermark when needed
    pdf.ApplyWatermark(
        "<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
        45,
        IronPdf.Editing.VerticalAlignment.Middle,
        IronPdf.Editing.HorizontalAlignment.Center)

    pdf.SaveAs("report-with-header.pdf")
End Using
$vbLabelText   $csharpLabel

Sie können außerdem PDFs zusammenführen oder aufteilen , Text extrahieren , PDFs in Bilder konvertieren und mit PDF-Formularen arbeiten.

Auf welche häufigen Fehler sollten Sie achten?

Selbst bei korrekter Konfiguration treten beim Einsatz von PDF-Generatoren in Azure häufig bestimmte Probleme auf. Das Verständnis dieser Probleme spart wertvolle Zeit bei der Fehlersuche.

Warum treten "Zugriff verweigert"-Fehler auf?

Fehler der Art "Zugriff auf den Pfad verweigert" treten auf, wenn IronPDF keine temporären Dateien schreiben kann. Setzen Sie Installation.CustomDeploymentDirectory = "/tmp", um Schreibzugriff zu gewährleisten. Wenn Sie Run-from-Package verwenden, stellen Sie sicher, dass die Anwendung einen separaten beschreibbaren Pfad hat, da /home/site/wwwroot in diesem Modus schreibgeschützt ist.

Wie behebt man Timeout- und Rendering-Probleme?

Timeout-Ausnahmen treten auf, wenn das Rendern komplexer Dokumente das Funktionstimeout von Azure überschreitet. Erhöhen Sie das Renderer-Timeout, fügen Sie eine Renderverzögerung für JavaScript-lastige Seiten hinzu oder lagern Sie große Aufgaben in eine dauerhafte Aufgabenwarteschlange aus.

Probleme bei der Schriftwiedergabe äußern sich in fehlenden oder fehlerhaften Schriftarten. Schriftarten können mithilfe der Base64-Codierung eingebettet, websichere Schriftarten, die Azure nativ unterstützt, verwendet oder eine Containerbereitstellung für die vollständige Kontrolle über die Schriftarten gewählt werden.

Was verursacht Speicherausnahmen während der PDF-Generierung?

Speicherausnahmen entstehen aufgrund des hohen Speicherbedarfs bei der PDF-Generierung. Häufige Probleme sind Speichermangel bei großen oder gleichzeitigen Anfragen.

Zu den bewährten Verfahren gehören:

  • Entsorgen Sie PdfDocument Objekte sofort mit using Anweisungen
  • Begrenzen Sie gleichzeitige Anfragen mit einem SemaphoreSlim wie im Beispiel des Produktionsdienstes gezeigt
  • Verwenden Sie für große PDFs die Stream-basierte Ausgabe anstatt ganze Byte-Arrays zu laden.
  • Upgrade vom Verbrauchstarif auf Premium oder Dedicated für eine planbare Speicherzuweisung

Wie stellen Sie Ihren Azure PDF Generator bereit und überwachen ihn?

Eine solide Bereitstellungsstrategie gewährleistet, dass Ihr PDF-Generator stabil, nachvollziehbar und einfach zu aktualisieren bleibt. Die folgenden Vorgehensweisen gelten unabhängig davon, ob Sie Azure App-Dienst oder Azure Functions als Zielplattform verwenden.

Welche Best Practices für die Bereitstellung sollten Sie befolgen?

  • Automatisierte CI/CD: Nutzen Sie Azure DevOps oder GitHub Actions für wiederholbare, nachvollziehbare Bereitstellungen.
  • Lizenzschlüssel: Speichern Sie IronPDF Lizenzen im Azure Key Vault anstatt in der Quellcodeverwaltung oder in Umgebungsvariablen.
  • Schreibbarer Pfad: Konfigurieren Sie IronPDF Temp-Ordner (/tmp für Linux-Container) beim Start der Anwendung
  • Paketauswahl: Verwenden Sie IronPdf.Linux für Container-basierte Bereitstellungen; das Standardpaket IronPdf für Windows App-Dienst verwenden

Wie richtet man Monitoring und Metriken ein?

Application Insights lässt sich direkt mit Azure Functions und App-Dienst integrieren. Verwenden Sie TelemetryClient, um benutzerdefinierte Metriken pro PDF-Generierungsereignis zu verfolgen:

using Microsoft.ApplicationInsights;

var telemetryClient = new TelemetryClient();
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds);
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount);
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes);
using Microsoft.ApplicationInsights;

var telemetryClient = new TelemetryClient();
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds);
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount);
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes);
Imports Microsoft.ApplicationInsights

Dim telemetryClient As New TelemetryClient()
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds)
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount)
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes)
$vbLabelText   $csharpLabel

Richten Sie im Azure-Portal metrikbasierte Warnungen ein, um benachrichtigt zu werden, wenn die Generierungszeiten einen akzeptablen Schwellenwert überschreiten oder die Fehlerraten sprunghaft ansteigen.

Wie können Sie heute mit der Azure-PDF-Generierung beginnen?

Sie haben nun ein vollständiges Bild für die Erstellung eines produktionsreifen Azure PDF-Generators: von der Auswahl der richtigen Azure-Ebene und der Installation des richtigen NuGet Pakets über die Konfiguration des Renderers für Cloud-Umgebungen bis hin zum Hinzufügen von Sicherheit, Überwachung und Ressourcenbegrenzung.

Die Kombination aus der Cloud-Infrastruktur von Azure und der Chrome-basierten Rendering-Engine von IronPDF schafft eine PDF-Plattform, die mit Ihren Bedürfnissen skaliert. Egal, ob Sie nur wenige Dokumente oder Tausende pro Stunde verarbeiten, der Generator bietet eine gleichbleibende Leistung bei vorhersehbaren Kosten.

Machen Sie sich zunächst mit der Funktionsübersicht von IronPDF vertraut , um sich einen Überblick über die verfügbaren Funktionen zu verschaffen, und lesen Sie anschließend die Dokumentation , um Details zur API zu erfahren. Wenn Sie bereit für den Einsatz sind, aktivieren Sie eine kostenlose Testlizenz für umfassende Tests ohne Gebühren pro Dokument. Prüfen Sie die Lizenzoptionen , um den Plan auszuwählen, der zu Ihrem Produktionsworkload passt.

Weitere Optionen für die Dokumentenverarbeitung finden Sie im IronPDF NuGet-Installationshandbuch und in der kompletten IronSoftware-Produktsuite.

Starten Sie jetzt mit IronPDF.
green arrow pointer

Häufig gestellte Fragen

Welche Vorteile bietet die Nutzung von IronPDF in Azure zur PDF-Erzeugung?

IronPDF bietet enterprise-taugliche PDF-Erzeugungsfähigkeiten, die nahtlos in Azure integriert werden, um Skalierbarkeit und Zuverlässigkeit zu gewährleisten. Es überwindet Herausforderungen wie Sandbox-Beschränkungen und Speicherbegrenzungen, die in Cloud-Umgebungen häufig auftreten.

Wie geht IronPDF mit Speicherbeschränkungen in Azure-Umgebungen um?

IronPDF ist optimiert, um innerhalb der Speicherbeschränkungen von Azure zu arbeiten, und nutzt effiziente Verarbeitungstechniken, die ihm ermöglichen, PDFs zu erzeugen, ohne die verfügbaren Ressourcen zu überschreiten.

Kann IronPDF mit Azure Functions verwendet werden?

Ja, IronPDF kann mit Azure Functions integriert werden, um serverlose PDF-Erzeugungslösungen zu erstellen, die von automatischem Skalieren und kosteneffizienter Ausführung profitieren.

Welche Sicherheitsüberlegungen werden bei der Nutzung von IronPDF mit Azure angesprochen?

IronPDF unterstützt sichere PDF-Erstellung, indem es sich an Best Practices für den Datenschutz bei der Übertragung und Speicherung hält und so die Einhaltung der Sicherheitsstandards von Azure gewährleistet.

Ist es möglich, IronPDF auf Azure App Service bereitzustellen?

Absolut, IronPDF kann auf Azure App Service bereitgestellt werden, sodass Entwickler seine Funktionen in einer verwalteten Hosting-Umgebung nutzen können.

Unterstützt IronPDF PDF-Funktionsanpassungen in Azure?

Ja, IronPDF bietet umfangreiche Anpassungsoptionen für die PDF-Erzeugung, einschließlich Layout, Design und Interaktivität, während es in Azure ausgeführt wird.

Wie stellt IronPDF eine hohe Leistung in einem verteilten Azure-System sicher?

IronPDF ist so konzipiert, dass es sich mühelos auf verteilten Systemen skalieren lässt und die Infrastruktur von Azure nutzt, um hohe Leistung und Zuverlässigkeit zu gewährleisten.

Unterstützt IronPDF for .NET 10 für die Azure-PDF-Generierung?

Ja, IronPDF ist vollständig kompatibel mit .NET 10 in Azure-Umgebungen – einschließlich Functions, App Services und Containerbereitstellungen. Es bietet nahtlose Unterstützung ohne zusätzliche Anpassungen. Die Plattformvoraussetzungen von IronPDF führen .NET 10 explizit als unterstützte Laufzeitumgebung auf. (ironpdf.com)

Welche .NET-Versionen unterstützt IronPDF, und wie verbessert die Kompatibilität mit .NET 10 die Leistung?

IronPDF unterstützt eine Vielzahl von .NET-Versionen, darunter .NET 6, 7, 8, 9 und 10. Mit .NET 10 profitieren Sie von den neuesten Laufzeitoptimierungen, verbesserter Speicherbereinigung und höherer Leistung in Azure – insbesondere für die serverlose oder containerbasierte PDF-Generierung. ironpdf.com bestätigt die Unterstützung von .NET 10 in der Funktionsliste der „C# PDF-Bibliothek“.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an