IRONSOFTWAREHOME
IRONPDF NUTZEN

Dynamische PDF-Erzeugung in C# mit IronPDF

Curtis Chau
Curtis Chau
Updated: 12. Juli 2026

PDF-Dateien in Xamarin.Forms zu erstellen kann knifflig sein. Die meisten .NET PDF-Bibliotheken unterstützen mobile Apps nicht direkt, und der Versuch, PDF-Dokumente auf einem Gerät zu generieren, führt oft zu Fehlern oder fehlender Funktionalität. Genau hier kommt IronPDF ins Spiel.

IronPDF läuft zwar nicht nativ in einer Xamarin.Forms-App, aber ein serverseitiger API-Ansatz überbrückt diese Lücke elegant. Ihre mobile App sendet HTML-Inhalte an die API und erhält im Gegenzug fertige PDF-Dateien – so erhalten Sie Zugriff auf die Professional PDF-Generierung inklusive Formularen, Kopf- und Fußzeilen, Bildern und benutzerdefinierten Layouts.

Wichtiger Hinweis: Microsoft hat den Support für Xamarin im Mai 2024 eingestellt. Für neue Projekte wird .NET MAUI als Nachfolger empfohlen, da es IronPDF direkter unterstützt. Dieser Leitfaden behandelt das serverseitige Muster für ältere Xamarin-Projekte, die noch gewartet werden, und erläutert den Migrationspfad zu MAUI für Teams, die von Grund auf neu beginnen.

Warum funktioniert ein serverseitiger Ansatz für die mobile PDF-Generierung?

IronPDF zeichnet sich durch die Umwandlung von HTML-Inhalten in ansprechende PDF-Dokumente mit voller Unterstützung für CSS, JavaScript und komplexe Layouts aus. Die Ausführung von IronPDF auf einem dedizierten Server – anstatt innerhalb einer mobilen Anwendung – umgeht die Plattformbeschränkungen, die das direkte Rendern von PDFs auf iOS und Android verhindern.

Das serverseitige Modell bietet mehrere konkrete Vorteile:

  • Einheitliche Ausgabe: Schriftarten, Bilder und CSS werden serverseitig aufgelöst, wodurch Darstellungsunterschiede zwischen Android- und iOS-Hardware vermieden werden.
  • Funktionszugriff: IronPDF Funktionen wie die Erstellung von PDF-Formularen, digitale Signaturen, Wasserzeichen und mehrseitige Layouts sind auf dem Server uneingeschränkt verfügbar.
  • Leichtere mobile App: Das Gerät sendet lediglich eine HTTP-Anfrage und speichert die zurückgegebenen PDF-Bytes – es läuft keine ressourcenintensive PDF-Engine auf dem Telefon.
  • Zentralisierte Lizenzierung: Eine einzige IronPDF Lizenz deckt Ihre Serverbereitstellung ab, anstatt jedes Gerät separat zu lizenzieren.

Der Xamarin.Forms-Client ruft die API auf, empfängt ein Byte-Array, schreibt es in den lokalen Speicher und öffnet optional einen PDF-Viewer. Der Server kümmert sich um alles Weitere.

Wie richtet man eine IronPDF PDF-Generierungs-API ein?

Beginnen Sie mit der Erstellung eines ASP.NET Core Web API-Projekts. Dies ist eine standardmäßige minimale .NET 10 API, die Sie überall hosten können – im Azure App Service, in AWS, auf einem lokalen Server oder in einem Docker-Container.

IronPDF installieren

Installieren Sie IronPDF über NuGet mit einem der folgenden Befehle:

PM > Install-Package IronPdf

PDF-Controller erstellen

Nachdem IronPDF installiert ist, fügen Sie einen Controller hinzu, der HTML akzeptiert und ein PDF zurückgibt:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();

namespace PdfGenerationApi.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class PdfController : ControllerBase
    {
        [HttpPost("generate")]
        public async Task<IActionResult> GeneratePdf([FromBody] PdfRequest request)
        {
            var renderer = new ChromePdfRenderer();
            renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
            renderer.RenderingOptions.MarginTop = 25;
            renderer.RenderingOptions.MarginBottom = 25;
            renderer.RenderingOptions.MarginLeft = 20;
            renderer.RenderingOptions.MarginRight = 20;

            var pdf = await renderer.RenderHtmlAsPdfAsync(request.HtmlContent);
            return File(pdf.BinaryData, "application/pdf", "document.pdf");
        }
    }

    public class PdfRequest
    {
        public string HtmlContent { get; set; } = string.Empty;
    }
}

ChromePdfRenderer verwendet eine auf Chromium basierende Engine, um HTML genau so darzustellen, wie es ein moderner Browser tun würde. Die HTML-zu-PDF-Konvertierung berücksichtigt CSS-Animationen, eingebettete Schriftarten, SVG-Grafiken und JavaScript-generierte Inhalte. Papierformat und Randeinstellungen werden direkt in das endgültige Dokumentlayout übernommen.

Kopf- und Fußzeilen hinzufügen

Für Professional Dokumente sollten Kopf- und Fußzeilen vor dem Aufruf des Renderers hinzugefügt werden:

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right; font-size:12px; color:#555;'>Confidential -- Page {page} of {total-pages}</div>",
    DrawDividerLine = true
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:11px;'>Generated by MyCompany App</div>"
};

Seitennummern-Token wie {page} und {total-pages} werden zur Renderzeit automatisch aufgelöst.

Wie implementiert man den Xamarin-Client?

Erstellen Sie in der Xamarin.Forms-Anwendung eine Serviceklasse, die die API aufruft. Der Dienst sollte schlank gehalten werden – seine einzige Aufgabe besteht darin, die HTML-Nutzdaten zu serialisieren, sie zu senden und die rohen PDF-Bytes an den Aufrufer zurückzugeben.

using System.Net.Http;
using System.Text;
using System.Text.Json;

namespace XamarinPdfApp.Services
{
    public class PdfService
    {
        private readonly HttpClient _httpClient;
        private const string ApiUrl = "https://your-api.example.com/api/pdf/generate";

        public PdfService()
        {
            _httpClient = new HttpClient
            {
                Timeout = TimeSpan.FromSeconds(60)
            };
        }

        public async Task<byte[]> GeneratePdfAsync(string htmlContent)
        {
            var payload = new { HtmlContent = htmlContent };
            var json = JsonSerializer.Serialize(payload);
            var content = new StringContent(json, Encoding.UTF8, "application/json");

            var response = await _httpClient.PostAsync(ApiUrl, content);

            if (response.IsSuccessStatusCode)
                return await response.Content.ReadAsByteArrayAsync();

            var error = await response.Content.ReadAsStringAsync();
            throw new InvalidOperationException($"PDF generation failed ({(int)response.StatusCode}): {error}");
        }
    }
}

Ein Timeout von 60 Sekunden berücksichtigt komplexe HTML-Dokumente mit vielen Bildern oder CSS-Ressourcen. Bei sehr großen Dateien empfiehlt es sich, von der API eine vorab signierte Download-URL zurückzugeben, anstatt die Binärdatei direkt zu streamen – dadurch bleibt die Speichernutzung auf Mobilgeräten vorhersehbar.

Wie speichert und öffnet man PDF-Dateien auf dem Gerät?

Sobald der Dienst das Byte-Array zurückgibt, schreiben Sie es in den Gerätespeicher und öffnen Sie es im PDF-Viewer der Plattform. Xamarin.Forms verwendet das DependencyService-Muster, um plattformspezifische Implementierungen aufzurufen.

Die Schnittstelle im gemeinsamen Code definieren:

using System.Threading.Tasks;

namespace XamarinPdfApp.Interfaces
{
    public interface ISaveFile
    {
        Task<string> SavePdfAsync(string filename, byte[] pdfData);
    }
}

Registrieren Sie die iOS-Implementierung mit DependencyService:

using Foundation;
using QuickLook;
using UIKit;
using XamarinPdfApp.Interfaces;
using Xamarin.Forms;

[assembly: Dependency(typeof(XamarinPdfApp.iOS.SaveFileIOS))]
namespace XamarinPdfApp.iOS
{
    public class SaveFileIOS : ISaveFile
    {
        public async Task<string> SavePdfAsync(string filename, byte[] pdfData)
        {
            var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            var filePath = System.IO.Path.Combine(documents, filename);
            await System.IO.File.WriteAllBytesAsync(filePath, pdfData);
            return filePath;
        }
    }
}

Für Android schreiben Sie in das externe Dateiverzeichnis der App und registrieren Sie ein FileProvider im Manifest, damit Sie den URI an einen PDF-Viewer-Intent übergeben können. Der DependencyService.Get<ISaveFile>()-Aufruf im gemeinsamen Code ruft zur Laufzeit diejenige Implementierung ab, die für die aktuelle Plattform registriert ist.

Alles miteinander verkabeln

Kombinieren Sie in Ihrer Xamarin.Forms-Seite oder Ihrem ViewModel den Dienst und den Plattform-Saver:

var htmlContent = BuildInvoiceHtml(invoice);
var pdfBytes = await _pdfService.GeneratePdfAsync(htmlContent);
var saver = DependencyService.Get<ISaveFile>();
var filePath = await saver.SavePdfAsync("invoice.pdf", pdfBytes);
await Launcher.OpenAsync(new OpenFileRequest
{
    File = new ReadOnlyFile(filePath, "application/pdf")
});

Dadurch wird die gespeicherte PDF-Datei in dem vom Benutzer installierten Viewer geöffnet, typischerweise einer nativen PDF-Anwendung sowohl unter iOS als auch unter Android.

Wie erstellt man Professional Rechnungs- und Berichts-PDFs?

Die Qualität einer PDF-Datei hängt fast ausschließlich von der Qualität der an den Renderer übergebenen HTML-Vorlage ab. Verwenden Sie C#-Stringinterpolation oder eine Template-Bibliothek wie Scriban, um datengesteuertes HTML zu erstellen:

public string BuildInvoiceHtml(Invoice invoice)
{
    var rows = string.Join(
        "\n",
        invoice.Elements.Select(i =>
            $"<tr><td>{i.Name}</td><td>{i.Quantity}</td><td>${i.UnitPrice:F2}</td><td>${i.Total:F2}</td></tr>"
        )
    );

    return $@"<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<style>
  body {{font-family: Arial, sans-serif; color: #333; margin: 0; padding: 30px;}}
  h1 {{color: #1a73e8;}}
  table {{width: 100%; border-collapse: collapse; margin-top: 20px;}}
  th {{background: #1a73e8; color: #fff; padding: 10px; text-align: left;}}
  td {{padding: 10px; border-bottom: 1px solid #e0e0e0;}}
  .total {{font-weight: bold; font-size: 1.1em; text-align: right; margin-top: 15px;}}
</style>
</head>
<body>
  <h1>Invoice #{invoice.Number}</h1>
  <p>Date: {invoice.Date:yyyy-MM-dd} &nbsp;|&nbsp; Due: {invoice.DueDate:yyyy-MM-dd}</p>
  <p>Bill to: <strong>{invoice.ClientName}</strong></p>
  <table>
    <thead><tr><th>Element</th><th>Qty</th><th>Unit Price</th><th>Total</th></tr></thead>
    <tbody>{rows}</tbody>
  </table>
  <p class='total'>Grand Total: ${invoice.GrandTotal:F2}</p>
</body>
</html>";
}
C#

Der ChromePdfRenderer rendert diese Vorlage genau so, wie es ein Browser tun würde. Sie können Wasserzeichen mithilfe der IronPDF-Wasserzeichen-API hinzufügen oder benutzerdefinierte Wasserzeichendesigns für vertrauliche Entwürfe anwenden. Bei Dokumenten, die ein Unterschriftenfeld erfordern, ermöglicht die Signaturunterstützung von IronPDF das serverseitige Einbetten von Platzhaltern für digitale Signaturen.

Wie verarbeitet man PDF-Formulare in einer Xamarin-App?

PDF-Formulare sind eine häufige Anforderung für mobile Business-Apps – Verträge, Onboarding-Fragebögen und Inspektionschecklisten profitieren alle von vorab ausgefüllten editierbaren Feldern. Die Server-API kann Felddaten zusammen mit der HTML-Vorlage entgegennehmen und Formularwerte einbetten, bevor sie das PDF zurückgibt:

[HttpPost("form")]
public async Task<IActionResult> GenerateForm([FromBody] FormRequest request)
{
    var renderer = new ChromePdfRenderer();
    // Render an HTML form template to create an interactive PDF form
    var pdf = await renderer.RenderHtmlAsPdfAsync(request.HtmlTemplate);

    // Fill known values before returning
    var form = pdf.Form;
    foreach (var field in request.FieldValues)
    {
        var pdfField = form.Fields.FirstOrDefault(f => f.Name == field.Key);
        if (pdfField is IronPdf.Forms.PdfFormTextFieldField textField)
            textField.Value = field.Value;
    }

    return File(pdf.BinaryData, "application/pdf", "form.pdf");
}

Der mobile Client sendet ein Wörterbuch mit Feldnamen und Werten. Der Server füllt die Felder aus und sendet ein Formular zurück, das der Benutzer überprüfen, die restlichen Felder in einem PDF-Viewer ausfüllen und anschließend absenden kann.

Wie extrahiert man Text und führt PDFs aus einer Xamarin-App zusammen?

Über die Dokumentenerstellung hinaus unterstützt IronPDF eine breite Palette von Dokumentoperationen, die Sie als API-Endpunkte bereitstellen können:

  • Text aus PDF extrahieren : PDF-Inhalte analysieren, um Dokumente zu indexieren oder Dateneingabeformulare vorauszufüllen.
  • PDFs zusammenführen oder aufteilen : Mehrere Berichte zu einer einzigen PDF-Datei kombinieren oder ein großes Dokument in separate Dateien für einzelne Abschnitte aufteilen.
  • PDF in Bild konvertieren : PDF-Seiten als PNG- oder JPEG-Miniaturansichten zur Vorschau in der mobilen Benutzeroberfläche rendern.

Jeder dieser Punkte wird zu einem separaten API-Endpunkt. Der Xamarin-Client ruft sie wie jede andere REST-Ressource auf, wodurch der mobile Code frei von PDF-Logik bleibt und der Server als maßgeblicher Dokumentenverarbeiter fungiert.

Welche Probleme treten häufig auf und wie lassen sie sich beheben?

Die Server-Client-Architektur ist unkompliziert, aber einige Aspekte im Produktionsbetrieb verdienen Beachtung:

Häufige Probleme und empfohlene Lösungen für die Xamarin- IronPDF -API-Integration
AusgabeUrsacheEmpfohlene Lösung
Zeitüberschreitung der AnfrageKomplexes HTML mit vielen externen Ressourcen benötigt Zeit zum Rendern.Erhöhen Sie HttpClient.Timeout und legen Sie das serverseitige Rendering-Timeout in den Rendering-Optionen fest.
Großer Anstieg des PDF-SpeicherbedarfsStreaming einer 20 MB großen PDF-Datei über den AntworttextIn den Blob-Speicher hochladen und stattdessen eine kurzlebige Download-URL zurückgeben
Offline-GenerierungDas Gerät hat keine Verbindung, wenn der Benutzer eine PDF-Datei anfordert.Anfragen lokal in die Warteschlange stellen und erneut versuchen, sobald die Verbindung wiederhergestellt ist.
Unautorisierter API-ZugriffDer Endpunkt ist mit dem Internet verbunden.Sicherung mit JWT oder API-Schlüssel; HTTPS auf allen Routen erzwingen
Schriftart nicht eingebettetAuf dem Server-Betriebssystem ist die Schriftart nicht installiert.Binden Sie die Schriftart als Base64-Daten-URI oder als CSS-Regel @font-face in den HTML-Code ein.
iOS-SpeicherberechtigungDie App zielt auf iOS 14+ mit strengerer Sandbox-Umgebung ab.Schreiben Sie in Environment.SpecialFolder.MyDocuments innerhalb der App-Sandbox

Zur Ratenbegrenzung fügen Sie Middleware auf der ASP.NET Core Seite mithilfe einer Bibliothek wie AspNetCoreRateLimit hinzu. Protokollieren Sie jede Generierungsanforderung mit Zeitangaben, damit Sie langsame Vorlagen erkennen können, bevor sie sich auf die Benutzer auswirken.

Sollten Sie von Xamarin zu .NET MAUI migrieren?

Wenn Sie 2026 ein neues mobiles Projekt starten, ist .NET MAUI die richtige Wahl. Microsoft hat den Support für Xamarin im Mai 2024 eingestellt, sodass keine weiteren Sicherheitsupdates oder Fehlerbehebungen mehr bereitgestellt werden. .NET MAUI ist der direkte Nachfolger und läuft unter .NET 10, was der aktuellen IronPDF Laufzeitumgebung entspricht.

Die in diesem Leitfaden beschriebene serverseitige Architektur funktioniert identisch für .NET MAUI Anwendungen – der Client-HTTP-Code ist im Wesentlichen derselbe; nur der DependencyService wird durch die eingebaute Abhängigkeitsinjektion von MAUI ersetzt. Teams, die bestehende Xamarin-Anwendungen betreuen, sollten eine Migration zu MAUI planen; Der offizielle .NET MAUI Migrationsleitfaden von Microsoft dokumentiert die einzelnen Schritte detailliert.

Wie implementiert und lizenziert man IronPDF für den Produktiveinsatz?

Die Bereitstellung ist unkompliziert: Die ASP.NET Core API wird mit Docker containerisiert und anschließend in Azure App Service, AWS ECS oder einem beliebigen Kubernetes-Cluster bereitgestellt. Der IronPDF Lizenzschlüssel ist als Umgebungsvariable auf dem Server festgelegt:

IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY")
    ?? throw new InvalidOperationException("IronPDF license key not set.");

Auf der IronPDF -Lizenzseite finden Sie die passende Lizenzstufe für Ihre Anwendung. Mit einer kostenlosen Testlizenz können Sie den vollen Funktionsumfang testen, bevor Sie sich endgültig entscheiden. Bei containerisierten oder serverlosen Bereitstellungen prüfen Sie, ob die Lizenzstufe die Anzahl der gleichzeitig laufenden Serverinstanzen abdeckt.

Nach der Lizenzierung sollten Sie die IronPDF -Dokumentation für erweiterte Konfigurationsoptionen erkunden, darunter Thread-sichere Rendering-Einstellungen, PDF/A-Konformität und Accessibility-Tagging.

Checkliste für die Produktionsbereitstellung

Checkliste für die Bereitstellung einer IronPDF-basierten PDF-Generierungs-API
ElementEmpfehlung
LizenzschlüsselSpeichern Sie die Daten in Umgebungsvariablen oder einem Geheimnismanager, niemals im Quellcode.
HTTPSTLS sollte für alle API-Endpunkte erzwungen werden; HTML-Nutzdaten sollten niemals über unverschlüsseltes HTTP gesendet werden.
AuthentifizierungVerwenden Sie JWT-Bearer-Token oder API-Schlüssel; widerrufen Sie diese bei Verstößen.
CachingUm redundante Renderings zu vermeiden, werden identische HTML-Nutzdaten für eine kurze TTL zwischengespeichert.
SkalierungIronPDF ist threadsicher; mehrere API-Replikate können hinter einem Load Balancer betrieben werden.
ÜberwachungRenderverzögerung und Fehlerraten überwachen; bei Spitzenwerten über dem Basiswert eine Warnung ausgeben

Das serverseitige Muster skaliert horizontal, ohne dass Änderungen am Xamarin- oder MAUI-Client erforderlich sind. Fügen Sie Replikate hinzu, wenn das Volumen der PDF-Generierung zunimmt, und verlassen Sie sich darauf, dass der Load Balancer die Anfragen gleichmäßig verteilt.

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 Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Buchen Sie Ihre kostenlose Live-Demo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Kundenlogos von Iron Software
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.