Zum Fußzeileninhalt springen
IRONPDF NUTZEN

Generierung von monatlichen Kontoauszügen als PDF-Dokumente

Das Problem bei der Erstellung von Anweisungen in großem Maßstab

IronPDF Homepage Bei einem kleinen Kundenstamm ist das Exportieren einer CSV-Datei und deren manuelle Formatierung zwar zeitaufwändig, aber machbar. Bei einigen hundert Kunden wird dies zu einer eigenständigen Aufgabe. Bei einigen Tausend wird dies zu einem Engpass, der den Abrechnungszyklus blockiert.

SSRS und Crystal Reports waren lange Zeit die Standardlösung. Sie funktionieren zwar immer noch, aber die Ausgabe sieht aus, als stamme sie aus dem Jahr 2008, lässt sich nur schwer an das jeweilige Design anpassen, ist teuer in der Wartung und passt nicht zum visuellen Design, das der Rest des Produkts verwendet. Die Aktualisierung einer Berichtsdefinition erfordert einen Spezialisten, und das Ergebnis entspricht ohne erheblichen Aufwand selten den Markenanforderungen.

API-Lösungen von Drittanbietern zur Generierung von Abrechnungen lösen zwar das Problem der Darstellung, führen jedoch neue Probleme ein. Die Preise pro Dokument steigen direkt mit dem Kundenwachstum, was bedeutet, dass Ihre Infrastrukturkosten jedes Mal steigen, wenn das Unternehmen erfolgreich ist. Es besteht zudem eine Netzwerkabhängigkeit: Wenn die API während des Abrechnungslaufs nicht verfügbar ist, kommt der gesamte Zyklus zum Stillstand.

Die Leistungsdimension ist nicht trivial. Eine SaaS-Plattform, die am 1. des Monats Nutzungsübersichten für 10.000 Kunden erstellt, ein Telekommunikationssystem, das detaillierte Anrufprotokolle generiert, ein Immobilienverwalter, der Mietabrechnungen an Hunderte von Mietern verteilt – all diese Systeme haben ein Zeitfenster, in dem der Lauf abgeschlossen sein muss. Ein Ansatz, der nicht auf Durchsatz ausgelegt ist, wird dies verfehlen.

Kunden erwarten hingegen ein markengerechtes Dokument, das so aussieht, als gehöre es zu dem Produkt, für das sie bezahlen, und nicht einen Rohdatenexport, auf den einfach ein Logo gesetzt wurde.

Dieses IronPDF-Beispiel zeigt, wie moderne .NET-Anwendungen automatisch ein PDF-Dokument mit Branding aus einer HTML-Datei generieren und es in großem Umfang an Kunden ausliefern können. Mit der IronPDF-Bibliothek für C# können Entwickler HTML innerhalb eines .NET-Projekts in zuverlässige PDF-Dateien konvertieren, ohne auf externe Dienste angewiesen zu sein. Der hier vorgestellte Ansatz funktioniert plattformübergreifend, lässt sich leicht in Visual Studio integrieren und nutzt das vertraute NuGet-Bibliotheksmodell für die PDF-Verteilung, auf das .NET-Entwickler bereits vertrauen.

Die Lösung: Batch-PDF-Erstellung mit der IronPDF-C#-PDF-Bibliothek

Mit IronPDF können .NET-Anwendungen in einer Batch-Schleife oder als Hintergrundauftrag PDF-Abrechnungen mit Markenzeichen aus HTML- und CSS-Vorlagen generieren. Die Daten jedes Kunden werden in dieselbe Vorlage eingefügt, ChromePdfRenderer erstellt die PDF-Datei, und die Anwendung versendet diese per E-Mail oder stellt sie in einem Self-Service-Portal bereit.

Es gibt keine SSRS-Installation zu warten, keine Crystal Reports-Lizenz zu verlängern und keine pro Dokument anfallende Gebühr, die mit Ihrer Kundenzahl steigt. IronPDF läuft innerhalb Ihrer bestehenden .NET-Anwendung als einzelnes NuGet-Paket ohne externe Prozesse. Die HTML-Vorlage gehört Ihrem Team, ist mit demselben CSS gestaltet, das auch für den Rest des Produkts verwendet wird, und wird nach Ihrem eigenen Zeitplan aktualisiert.

Installation des IronPDF-NuGet-Pakets

Die meisten Entwickler installieren IronPDF über den NuGet Package Manager in Visual Studio. Öffnen Sie den Visual Studio-Lösungs-Explorer, klicken Sie mit der rechten Maustaste auf "Referenzen", wählen Sie "NuGet-Pakete verwalten", suchen Sie dann (Strg) nach IronPDF und klicken Sie auf "IronPDF installieren".

Das NuGet-Logo erscheint neben der Paketliste und bestätigt, dass die neueste NuGet-Version verfügbar ist. Fügen Sie nach der Installation den erforderlichen Namespace zu Ihrem Projekt hinzu:

using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

IronPDF wird als C#-PDF-DLL bereitgestellt, die über die C#-NuGet-Bibliothek verteilt wird, wodurch die Installation für jeden .NET-Dokumenten-Workflow unkompliziert ist.

So funktioniert es in der Praxis: Einsatz von IronPDF in Ihren .NET-Projekten

1. Ein geplanter Job löst den Abrechnungslauf aus

Ein BackgroundService, ein wiederkehrender Hangfire-Job oder ein Quartz.NET-Scheduler wird zu Beginn jedes Abrechnungszeitraums ausgelöst, in der Regel um Mitternacht des 1. Tages. Der Job fragt die Abrechnungsdatenbank nach allen aktiven Kunden und deren Periodendaten ab: Einzelposten, Gebühren, Gutschriften, Laufsaldo und Nutzungsmetriken.

Die Abfrage gibt einen Datensatz pro Kunde zurück. Ab diesem Punkt erfolgt die Generierung von Anweisungen in einer Schleife.

2. HTML-Vorlage wird pro Kunde ausgefüllt

Die Vorlage ist eine Standard-HTML-Zeichenkette oder eine gerenderte Razor-Ansicht. Sie enthält das Firmenlogo (eingebettet als Base64-Daten-URI für eine bereitstellungssichere Darstellung), die Kontonummer des Kunden, den Abrechnungszeitraum sowie alle Abrechnungsdetails, gegliedert in Abschnitte, Nutzungsaufschlüsselung, Gebühren, Gutschriften und Endsaldo.

Die Vorlage ist die einzige verbindliche Quelle für die Darstellung aller Aussagen. Wenn die Rechtsabteilung eine neue Fußzeile für die Offenlegung benötigt oder das Designteam das Farbschema aktualisiert, ändert sich eine einzige Datei, und jede zukünftige Erklärung spiegelt dies wider.

3. ChromePdfRenderer rendert jede Anweisung

In diesem IronPDF-Beispiel wandelt der ChromePdfRenderer dynamische HTML-Inhalte in ein generiertes PDF-Dokument um und demonstriert, wie ein moderner PDF-Viewer wie Adobe Reader den endgültigen PDF-Inhalt genau wie vorgesehen anzeigen kann.

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

renderer.RenderingOptions.MarginTop = 20;

renderer.RenderingOptions.MarginBottom = 20;

foreach (var customer in activeCustomers)

{
    string html = $@"
        <h1>Account Statement — {customer.StatementPeriod}</h1>
        <p><strong>Account:</strong> {customer.AccountNumber}</p>
        <p><strong>Name:</strong> {customer.FullName}</p>
        <hr/>
        <h2>Charges This Period</h2>
        {customer.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {customer.ClosingBalance:C}</p>";

    PdfDocument statement = renderer.RenderHtmlAsPdf(html);
    await DeliverStatementAsync(customer, statement);
}
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

renderer.RenderingOptions.MarginTop = 20;

renderer.RenderingOptions.MarginBottom = 20;

foreach (var customer in activeCustomers)

{
    string html = $@"
        <h1>Account Statement — {customer.StatementPeriod}</h1>
        <p><strong>Account:</strong> {customer.AccountNumber}</p>
        <p><strong>Name:</strong> {customer.FullName}</p>
        <hr/>
        <h2>Charges This Period</h2>
        {customer.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {customer.ClosingBalance:C}</p>";

    PdfDocument statement = renderer.RenderHtmlAsPdf(html);
    await DeliverStatementAsync(customer, statement);
}
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4

renderer.RenderingOptions.MarginTop = 20

renderer.RenderingOptions.MarginBottom = 20

For Each customer In activeCustomers

    Dim html As String = $"
        <h1>Account Statement — {customer.StatementPeriod}</h1>
        <p><strong>Account:</strong> {customer.AccountNumber}</p>
        <p><strong>Name:</strong> {customer.FullName}</p>
        <hr/>
        <h2>Charges This Period</h2>
        {customer.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {customer.ClosingBalance:C}</p>"

    Dim statement As PdfDocument = renderer.RenderHtmlAsPdf(html)
    Await DeliverStatementAsync(customer, statement)
Next
$vbLabelText   $csharpLabel

Ausgabe als gerendertes PDF-Dokument

IronPDF Beispiel einer generierten PDF-Ausgabe Die Wiederverwendung derselben ChromePdfRenderer-Instanz über die Schleife hinweg vermeidet redundanten Initialisierungsaufwand. Bei einem Kundenstamm von mehreren Tausend kann der Job die Liste partitionieren und parallele Batches über die verfügbaren Kerne ausführen, um innerhalb des Abrechnungsfensters zu bleiben.

TippsFür die parallele Stapelverarbeitung sollten Sie pro Thread einen separaten ChromePdfRenderer instanziieren, anstatt eine Instanz gemeinsam zu nutzen. Der Renderer ist nicht threadsicher, aber mehrere Instanzen laufen gleichzeitig ohne Konflikte.

4. PDF per E-Mail zugestellt und für den Portalzugriff gespeichert

Das PdfDocument stellt BinaryData bereit, das direkt in einen MemoryStream für E-Mail-Anhänge schreibt, ohne dass Schreibvorgänge im Dateisystem erforderlich sind:

using System.Net.Mail;
using System.IO;

async Task DeliverStatementAsync(CustomerRecord customer, PdfDocument statement)
{
    var pdfBytes = statement.BinaryData;
    // Store in blob storage for portal download
    await _blobClient.UploadAsync(
        $"statements/{customer.AccountNumber}/{customer.StatementPeriod}.pdf",
        new BinaryData(pdfBytes)
    );

    // Email to customer
    using var stream = new MemoryStream(pdfBytes);
    using var attachment = new Attachment(stream,
        $"Statement-{customer.StatementPeriod}.pdf", "application/pdf");
    var message = new MailMessage("billing@yourcompany.com", customer.Email)
    {
        Subject = $"Your {customer.StatementPeriod} Statement",
        Body = $"Dear {customer.FullName}, your statement for {customer.StatementPeriod} is attached."
    };

    message.Attachments.Add(attachment);

    using var smtp = new SmtpClient("smtp.yourprovider.com");

    await smtp.SendMailAsync(message);
}
using System.Net.Mail;
using System.IO;

async Task DeliverStatementAsync(CustomerRecord customer, PdfDocument statement)
{
    var pdfBytes = statement.BinaryData;
    // Store in blob storage for portal download
    await _blobClient.UploadAsync(
        $"statements/{customer.AccountNumber}/{customer.StatementPeriod}.pdf",
        new BinaryData(pdfBytes)
    );

    // Email to customer
    using var stream = new MemoryStream(pdfBytes);
    using var attachment = new Attachment(stream,
        $"Statement-{customer.StatementPeriod}.pdf", "application/pdf");
    var message = new MailMessage("billing@yourcompany.com", customer.Email)
    {
        Subject = $"Your {customer.StatementPeriod} Statement",
        Body = $"Dear {customer.FullName}, your statement for {customer.StatementPeriod} is attached."
    };

    message.Attachments.Add(attachment);

    using var smtp = new SmtpClient("smtp.yourprovider.com");

    await smtp.SendMailAsync(message);
}
Imports System.Net.Mail
Imports System.IO

Async Function DeliverStatementAsync( _
    customer As CustomerRecord, _
    statement As PdfDocument) As Task

    Dim pdfBytes = statement.BinaryData
    ' Store in blob storage for portal download
    Await _blobClient.UploadAsync( _
        $"statements/{customer.AccountNumber}/{customer.StatementPeriod}.pdf", _
        New BinaryData(pdfBytes) _
    )

    ' Email to customer
    Using stream As New MemoryStream(pdfBytes)
        Using attachment As New Attachment(stream, _
            $"Statement-{customer.StatementPeriod}.pdf", "application/pdf")
            Dim message As New MailMessage("billing@yourcompany.com", customer.Email) With { _
                .Subject = $"Your {customer.StatementPeriod} Statement", _
                .Body = $"Dear {customer.FullName}, your statement for {customer.StatementPeriod} is attached." _
            }

            message.Attachments.Add(attachment)

            Using smtp As New SmtpClient("smtp.yourprovider.com")
                Await smtp.SendMailAsync(message)
            End Using
        End Using
    End Using
End Function
$vbLabelText   $csharpLabel

Beispiel-E-Mail mit angehängter PDF-Rechnung

E-Mail mit angehängtem PDF Blob Storage indiziert die Datei nach Kontonummer und Zeitraum, wodurch das Abrufen über das Portal zu einer einfachen Suche wird. Kunden laden aktuelle und historische Kontoauszüge herunter, ohne den Support kontaktieren zu müssen.

Nutzen in der realen Welt

Skalierbarkeit. IronPDF rendert jede Anweisung in Millisekunden. Ein Abrechnungslauf für 5.000 Kunden ist bei paralleler Ausführung über mehrere Kerne in wenigen Minuten abgeschlossen und liegt damit deutlich innerhalb eines typischen nächtlichen Abrechnungsfensters.

Markenkonsistenz. Alle Aussagen sind mit demselben Logo, Farbschema, derselben Typografie und demselben Layout versehen. Es besteht kein Risiko eines nicht übereinstimmenden Exports oder einer Aussage, die anders aussieht, weil sie von einem anderen Teammitglied erstellt wurde.

Kundenselbstbedienung. In Blob-Speicher abgelegte Abrechnungsbelege stehen unmittelbar nach Abschluss des Abrechnungslaufs im Portal zum Download bereit. Kunden rufen aktuelle und vergangene Zeiträume selbst ab, wodurch das Support-Ticket-Aufkommen für Anfragen wie "Können Sie mir meinen Kontoauszug erneut zusenden?" entsprechend sinkt.

Compliance und Archivierung. IronPDF unterstützt die Ausgabe im PDF/A-Format, dem ISO-standardisierten Format für die langfristige Dokumentenarchivierung. Für Finanzinstitute und regulierte Branchen erfüllen PDF/A-Abrechnungen die Anforderungen an die Aufbewahrung von Unterlagen, ohne dass ein separater Archivierungsschritt erforderlich ist. Die Aktivierung erfolgt über eine einzige Rendering-Option.

Wiederverwendung von Vorlagen. Die HTML- und CSS-Vorlage wird von Ihrem Team zusammen mit dem restlichen Anwendungscode gepflegt. Die Aktualisierung erfordert dieselben Fähigkeiten wie bei jeder anderen Ansicht – kein Berichtsdesigner, kein proprietäres Definitionsformat.

Keine Kosten pro Dokument. Die Wiedergabe erfolgt prozessintern. Es gibt keine API-Aufrufe an einen Statement-Anbieter, keine zu erfassende nutzungsabhängige Abrechnung und keinen Posten auf Ihrer Infrastrukturrechnung, der mit dem Kundenwachstum skaliert.

Erste Schritte mit IronPDF

Entwickler können die Bibliothek mit der voll funktionsfähigen kostenlosen Testversion testen, die einen Testschlüssel enthält, der nach der Kontoerstellung über das Testformular verfügbar ist. Während der Testphase ist keine Kreditkarteneingabe erforderlich, sodass Teams die wichtigsten Funktionen völlig unverbindlich erkunden können.

IronPDF ist Teil der umfassenderen Iron Suite, die häufig durch das Iron Suite Enterprise-Logo und Iron Suite-bezogene Branding auf den Kundenlogos von Iron Software dargestellt wird. Das Toolkit hilft Unternehmen dabei, Probleme im Dokumenten-Workflow in .NET-Anwendungen und Enterprise-Systemen zu lösen.

Wenn Sie eine Einweisung wünschen, können Sie beim Software-Produktdemo-Team eine Live-Demo, eine persönliche Demo oder eine Iron Software-Produktdemo anfordern. Das Vertriebsteam vereinbart Termine, bei denen das Software-Enterprise-Consult-Team und die Iron Software Enterprise-Consult-Spezialisten projektspezifische Funktionsempfehlungen geben und technische Fragen beantworten.

Abschluss

Die Erstellung monatlicher Abrechnungen scheint ein gelöstes Problem zu sein, bis man versucht, dies in großem Maßstab mit einheitlichem Branding und zuverlässiger Bereitstellung umzusetzen. Die Tools, die vor einem Jahrzehnt Standard waren, liefern Ergebnisse, die nicht mehr zum Erscheinungsbild der Produkte passen, und die SaaS-Alternativen tauschen eine Reihe von Einschränkungen gegen eine andere ein.

Eine von IronPDF unterstützte Batch-Schleife ersetzt all das durch eine HTML-Vorlage, einen Renderer und einen Ausgabeschritt, die alle innerhalb der Anwendung laufen, die Ihr Team bereits besitzt und betreibt. IronPDF deckt den gesamten Lebenszyklus von PDF-Arbeiten in C# ab – vom Rendern und Erstellen von Dokumenten bis hin zum Speichern, Streamen und Bearbeiten – alles über dieselbe Bibliothek auf ironpdf.com. Wenn Sie eine Abrechnungspipeline aufbauen oder neu gestalten, starten Sie Ihre kostenlose 30-Tage-Testversion und führen Sie einen vollständigen Abrechnungszyklus mit Ihren eigenen Daten durch, bevor Sie sich festlegen.

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