Zum Fußzeileninhalt springen
IRONPDF NUTZEN

Umwandlung von Online-Antragsformularen in PDF-Zusammenfassungen mit IronPDF

Das Problem mit manueller Ticket- und Abzeichengenerierung

IronPDF-Startseite Bei einem kleinen privaten Abendessen mit zwanzig Gästen ist das Entwerfen von Tickets in Figma oder Canva und der manuelle Export überschaubar. Bei einer Technologiekonferenz mit 3.000 Teilnehmern in fünf Ticketstufen ist es kein Prozess, sondern eine Haftung.

Generische Ticketplattformen lösen das Verteilungsproblem, schränken aber alles andere ein. Die Branding-Möglichkeiten beschränken sich auf einen Logo-Upload und einen Farbwähler. Benutzerdefinierte Layouts für VIP-Pässe, Rednerabzeichen und Mitarbeiterausweise erfordern separate Exporte aus verschiedenen Tools. Wenn ein Firmengipfel ein Abendessen-Sitzplatzabzeichen benötigt, das mit einem Registrierungsdatensatz und einem sitzungsspezifischen QR-Code verknüpft ist, haben die meisten Plattformen keine Antwort.

Ohne einen einzigartigen, scannbaren Identifikator auf jedem Ticket wird der Check-in zum Engpass. Eine gedruckte Liste oder eine Namenssuche an der Tür verlangsamt den Eintritt für alle und schafft Gelegenheiten für Betrug. Ein dupliziertes PDF mit keiner einzigartigen Kodierung besteht die visuelle Inspektion und wird erst erkannt, wenn jemand anderes versucht, das gleiche Ticket gleichzeitig zu verwenden.

Teilnehmer bemerken auch den Unterschied zwischen einem professionellen Veranstaltungsdokument und einer reinen Textbestätigung mit einer Buchungsreferenz, die im Textkörper verborgen ist. Ein Musikfestival, eine Wohltätigkeitsgala, ein Firmengipfel, sie alle erwarten Materialien, die das Markenimage des Ereignisses widerspiegeln, nicht eine Standardvorlage eines Drittanbietersystems.

Die Lösung: Personalisierte C#-PDF-Tickets, die in Ihrer .NET-Anwendung generiert werden

IronPDF lässt .NET-Anwendungen gebrandete PDF-Tickets und -Abzeichen aus HTML und CSS-Vorlagen generieren, die mit Teilnehmerdaten und eingebetteten QR-Code-Bildern befüllt sind. Die Details jedes Registranten füllen dieselbe Vorlage, ein QR-Code wird pro Teilnehmer generiert, der ihre eindeutige Ticket-ID oder Check-in-URL codiert, ChromePdfRenderer übernimmt den HTML-zu-PDF-Prozess, und die Anwendung liefert es per E-Mail oder stellt es in einem Registrierungsportal zum Download bereit.

Es gibt keine API-Gebühren von Drittanbieter-Tickets, keinen Export von Design-Tools und keine manuellen Schritte zwischen Bestätigung der Registrierung und Ticketlieferung. Das Rendering läuft innerhalb der bestehenden .NET-Anwendung, eine C#-NuGet-Bibliothek für die PDF-Verarbeitung (IronPDF), eine für IronQR, und die Pipeline ist eigenständig.

Wie es in der Praxis funktioniert

1. Auslöser wird nach Schließen der Registrierung aktiviert

Ein BackgroundService, ein wiederkehrender Job in Hangfire oder ein von dem Registrierungssystem aufgerufener Webhook-Endpunkt löst die Ticketgenerierung aus, entweder sofort nach Bestätigung jeder Registrierung oder in einem Batchlauf vor dem Veranstaltungsdatum. Der Job fragt die Registrierungsdatenbank nach jedem bestätigten Teilnehmer: Name, E-Mail, Tickettyp, zugewiesene Sitzungen, Sitz- oder Tischnummer und eine eindeutige Ticket-ID.

2. Erstellen Sie ein PDF mit pro Teilnehmer generiertem QR-Code

Jeder Teilnehmer erhält einen QR-Code, der entweder ihre Ticket-ID oder eine vollständige Check-in-URL codiert, z.B. https://event.example.com/checkin/`{ticketId}`. Der Code wird als PNG gerendert und in eine Base64-Zeichenkette konvertiert, um eine einfache direkte Einbettung in die HTML-Vorlage zu ermöglichen, ohne dass ein Schreibvorgang auf dem Dateisystem erforderlich ist:

using IronQr;
using IronPdf;

// Generate QR code encoding the attendee's check-in URL
var qrCode = QrWriter.Write($"https://event.example.com/checkin/{attendee.TicketId}");

var qrImage = qrCode.Save();

// Convert to base64 for HTML embedding
string qrBase64 = Convert.ToBase64String(qrImage.ExportBytes());

string qrDataUri = $"data:image/png;base64,{qrBase64}";

// Populate HTML ticket template with attendee data and embedded QR code
string ticketHtml = $@"
    <div style='font-family:sans-serif; border:2px solid #1a1a2e; padding:32px; max-width:600px;'>
        <img src='/assets/event-logo.png' height='48' alt='Event Logo'/>
        <h1 style='color:#1a1a2e;'>{attendee.FullName}</h1>
        <p><strong>Ticket Type:</strong> {attendee.TicketType}</p>
        <p><strong>Session:</strong> {attendee.AssignedSession}</p>
        <p><strong>Seat:</strong> {attendee.SeatNumber} &nbsp;|&nbsp; <strong>ID:</strong> {attendee.TicketId}</p>
        <img src='{qrDataUri}' width='160' height='160' alt='Entry QR Code'/>
        <p style='font-size:11px; color:#666;'>Scan at entry. One use only.</p>
    </div>";

var renderer = new ChromePdfRenderer();

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

renderer.RenderingOptions.MarginTop = 10;

renderer.RenderingOptions.MarginBottom = 10;

PdfDocument ticket = renderer.RenderHtmlAsPdf(ticketHtml);
using IronQr;
using IronPdf;

// Generate QR code encoding the attendee's check-in URL
var qrCode = QrWriter.Write($"https://event.example.com/checkin/{attendee.TicketId}");

var qrImage = qrCode.Save();

// Convert to base64 for HTML embedding
string qrBase64 = Convert.ToBase64String(qrImage.ExportBytes());

string qrDataUri = $"data:image/png;base64,{qrBase64}";

// Populate HTML ticket template with attendee data and embedded QR code
string ticketHtml = $@"
    <div style='font-family:sans-serif; border:2px solid #1a1a2e; padding:32px; max-width:600px;'>
        <img src='/assets/event-logo.png' height='48' alt='Event Logo'/>
        <h1 style='color:#1a1a2e;'>{attendee.FullName}</h1>
        <p><strong>Ticket Type:</strong> {attendee.TicketType}</p>
        <p><strong>Session:</strong> {attendee.AssignedSession}</p>
        <p><strong>Seat:</strong> {attendee.SeatNumber} &nbsp;|&nbsp; <strong>ID:</strong> {attendee.TicketId}</p>
        <img src='{qrDataUri}' width='160' height='160' alt='Entry QR Code'/>
        <p style='font-size:11px; color:#666;'>Scan at entry. One use only.</p>
    </div>";

var renderer = new ChromePdfRenderer();

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

renderer.RenderingOptions.MarginTop = 10;

renderer.RenderingOptions.MarginBottom = 10;

PdfDocument ticket = renderer.RenderHtmlAsPdf(ticketHtml);
Imports IronQr
Imports IronPdf

' Generate QR code encoding the attendee's check-in URL
Dim qrCode = QrWriter.Write($"https://event.example.com/checkin/{attendee.TicketId}")

Dim qrImage = qrCode.Save()

' Convert to base64 for HTML embedding
Dim qrBase64 As String = Convert.ToBase64String(qrImage.ExportBytes())

Dim qrDataUri As String = $"data:image/png;base64,{qrBase64}"

' Populate HTML ticket template with attendee data and embedded QR code
Dim ticketHtml As String = $"
    <div style='font-family:sans-serif; border:2px solid #1a1a2e; padding:32px; max-width:600px;'>
        <img src='/assets/event-logo.png' height='48' alt='Event Logo'/>
        <h1 style='color:#1a1a2e;'>{attendee.FullName}</h1>
        <p><strong>Ticket Type:</strong> {attendee.TicketType}</p>
        <p><strong>Session:</strong> {attendee.AssignedSession}</p>
        <p><strong>Seat:</strong> {attendee.SeatNumber} &nbsp;|&nbsp; <strong>ID:</strong> {attendee.TicketId}</p>
        <img src='{qrDataUri}' width='160' height='160' alt='Entry QR Code'/>
        <p style='font-size:11px; color:#666;'>Scan at entry. One use only.</p>
    </div>"

Dim renderer As New ChromePdfRenderer()

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

renderer.RenderingOptions.MarginTop = 10

renderer.RenderingOptions.MarginBottom = 10

Dim ticket As PdfDocument = renderer.RenderHtmlAsPdf(ticketHtml)
$vbLabelText   $csharpLabel

Beispiel Output

IronPDF-Beispielausgabe-PDF-Datei Die Base64-Daten-URI bettet das QR-Bild direkt in das HTML ein, sodass die PDF-Inhalte korrekt gerendert werden, unabhängig davon, wo die Anwendung bereitgestellt wird, ohne Abhängigkeit von einem Dateipfad oder CDN, der zur Renderzeit erreichbar ist.

3. PDF-Dokument per E-Mail versendet und zum Portal-Download gespeichert

Das gerenderte PdfDocument wird direkt in einen MemoryStream für den E-Mail-Anhang gestreamt, mit einer Kopie, die zum Blob-Speicher für den Portalzugriff und zum erneuten Drucken vor Ort hochgeladen wird:

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

var pdfBytes = ticket.BinaryData;

// Store for portal download and on-site reprint
await _blobStorage.UploadAsync(
    $"tickets/{attendee.TicketId}.pdf",
    new BinaryData(pdfBytes)
);

// Email ticket to attendee
using var stream = new MemoryStream(pdfBytes);
using var attachment = new Attachment(stream,
    $"Ticket-{attendee.TicketId}.pdf", "application/pdf");

var message = new MailMessage("tickets@yourevent.com", attendee.Email)
{
    Subject = $"Your Ticket — {eventName}",
    Body = $"Hi {attendee.FirstName}, your ticket is attached. See you there."
};

message.Attachments.Add(attachment);

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

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

var pdfBytes = ticket.BinaryData;

// Store for portal download and on-site reprint
await _blobStorage.UploadAsync(
    $"tickets/{attendee.TicketId}.pdf",
    new BinaryData(pdfBytes)
);

// Email ticket to attendee
using var stream = new MemoryStream(pdfBytes);
using var attachment = new Attachment(stream,
    $"Ticket-{attendee.TicketId}.pdf", "application/pdf");

var message = new MailMessage("tickets@yourevent.com", attendee.Email)
{
    Subject = $"Your Ticket — {eventName}",
    Body = $"Hi {attendee.FirstName}, your ticket is attached. See you there."
};

message.Attachments.Add(attachment);

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

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

Dim pdfBytes = ticket.BinaryData

' Store for portal download and on-site reprint
Await _blobStorage.UploadAsync(
    $"tickets/{attendee.TicketId}.pdf",
    New BinaryData(pdfBytes)
)

' Email ticket to attendee
Using stream As New MemoryStream(pdfBytes)
    Using attachment As New Attachment(stream, $"Ticket-{attendee.TicketId}.pdf", "application/pdf")
        Dim message As New MailMessage("tickets@yourevent.com", attendee.Email) With {
            .Subject = $"Your Ticket — {eventName}",
            .Body = $"Hi {attendee.FirstName}, your ticket is attached. See you there."
        }

        message.Attachments.Add(attachment)

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

Beispiel-E-Mail mit angehängtem Ticket

Beispiel gesendete E-Mail Für Veranstaltungen mit Tausenden von Registranten teilt der Job die Teilnehmerliste auf und verarbeitet Batches parallel, eine ChromePdfRenderer-Instanz pro Thread, um den Lauf lange vor dem Veranstaltungsdatum abzuschließen.

Nutzen in der realen Welt

Skalierung. IronPDF rendert jedes Ticket in Millisekunden. Ein Batchlauf für 3.000 Teilnehmer, parallelisiert über verfügbare Kerne, wird in Minuten abgeschlossen, nicht Stunden, und nicht am Tag vor der Veranstaltung in Panik.

Markenkonsistenz. Jedes Ticket und Abzeichen trägt das gleiche Markenimage der Veranstaltung, Sponsorenlogos und Typografie. VIP-Pässe, Redner-Abzeichen und allgemeine Eintrittskarten sehen alle aus, als kämen sie vom selben Designs-System, weil sie es tun, der gleiche HTML-Inhalt und CSS, den das Team pflegt.

Betrugsprävention. Jeder QR-Code kodiert eine eindeutige Ticket-ID, die an einen spezifischen Registrierungsdatensatz gebunden ist. Wenn das Türpersonal ihn scannt, validiert das System gegen die Datenbank. Ein dupliziertes PDF erzeugt einen doppelten Scan, den das System sofort markiert.

Schneller Check-in. Das Scannen eines QR-Codes und die Validierung gegen einen Registrierungsdatensatz dauert weniger als eine Sekunde. Keine Namenssuche, keine gedruckten Listen, keine langsame manuelle Überprüfung. Eingangsschlangen bewegen sich schneller und das Personal kann Ausnahmesituationen verwalten, anstatt jede Einreise manuell zu handhaben.

Vorlagenflexibilität. Verschiedene Veranstaltungsrollen erhalten unterschiedliche Layouts, VIP-Pässe mit Details zum Zugang zur Lounge, Redner-Abzeichen mit Highlight im Zeitplan, Mitarbeiterausweise mit Backstage-Anzeigen. Eine Generationspipeline, mehrere HTML-Vorlagen, eine Bereitstellung.

Keine kosten pro Ticket. Die Pipeline läuft im Prozess. Es gibt keine API-Anrufe an einen Ticketanbieter, keine Verwendungsmessung und keine Dokumentgebühr, die mit der Anmeldungszahl wächst.

Abschluss

Die Erstellung von Tickets und Abzeichen ist eines dieser Probleme, die von bestehenden Plattformen gelöst erscheinen, bis die Veranstaltung echte Anpassungsanforderungen hat, eine große Teilnehmerliste oder Integrationsbedürfnisse, die die Plattform nicht unterstützt. Der Aufbau der Pipeline innerhalb der .NET-Anwendung gibt dem Team die volle Kontrolle über Layout, Daten, Lieferzeitpunkt und Kosten.

IronPDF verwaltet den gesamten Lebenszyklus der PDF-Erstellung in C# mit Schlüsselfunktionen, die von der pixelgenauen Darstellung von HTML-Vorlagen über deren Speicherung, das Anbringen digitaler Signaturen und Verschlüsselung, das Streamen und Bearbeiten von Dokumenten reichen, alles von ironpdf.com. Wenn Sie ein Registrierungssystem aufbauen oder eine externe Ticketabhängigkeit ersetzen, ist die vollständige Bibliothek verfügbar, um mit Ihren eigenen Ereignisdaten getestet zu werden. Sie können IronPDF mit der kostenlosen Testversion kostenlos ausprobieren.

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