Passer au contenu du pied de page
UTILISATION DE IRONPDF

Transformer des formulaires de demande en ligne en résumés PDF à l'aide d'IronPDF

Le problème avec la génération manuelle de tickets et de badges

page d'accueil IronPDF Pour un petit dîner privé avec vingt invités, concevoir des tickets dans Figma ou Canva et les exporter manuellement est gérable. Pour une conférence technologique avec 3 000 participants répartis sur cinq niveaux de billets, ce n'est pas un processus, c'est une responsabilité.

Les plateformes de billetterie génériques résolvent le problème de distribution mais restreignent tout le reste. Les options de branding se limitent à un téléchargement de logo et à un sélecteur de couleurs. Les mises en page personnalisées pour les passes VIP, les badges des conférenciers et les accréditations du personnel nécessitent des exports distincts depuis différents outils. Lorsqu'un sommet d'entreprise nécessite un badge de placement pour le dîner lié à un enregistrement et un code QR spécifique à une session, la plupart des plateformes n'ont pas de réponse.

Sans un identifiant unique et scannable sur chaque billet, l'enregistrement devient un goulot d'étranglement. Une liste imprimée ou une recherche de nom à la porte ralentit l'entrée pour tout le monde et crée des opportunités de fraude, un PDF dupliqué sans encodage unique passe l'inspection visuelle et n'est pas détecté jusqu'à ce que quelqu'un d'autre essaie d'utiliser le même billet en même temps.

Les participants remarquent également la différence entre un document d'événement professionnel et une confirmation en texte brut avec une référence de réservation enfouie dans le corps. Un festival de musique, un gala à but non lucratif, un sommet d'entreprise, chacun attend des documents qui reflètent la marque de l'événement, pas un modèle par défaut d'un système tiers.

Solution : Billets PDF personnalisés en C# générés dans votre application .NET

IronPDF permet aux applications .NET de générer des billets et badges PDF de marque à partir du HTML et de modèles CSS remplis avec les données des participants et des images de code QR intégrées. Les détails de chaque inscrit remplissent le même modèle, un code QR est généré par participant encodant leur ID de billet unique ou l'URL d'enregistrement, ChromePdfRenderer gère le processus HTML vers PDF, et l'application le livre par e-mail ou le rend disponible pour téléchargement dans un portail d'inscription.

Il n'y a pas de frais d'API de billetterie tiers, pas d'exports d'outils de conception, et pas d'étapes manuelles entre la confirmation d'inscription et la livraison du billet. Le rendu se fait à l'intérieur de l'application .NET existante, une bibliothèque NuGet en C# pour le traitement PDF (IronPDF), une pour IronQR, et le pipeline est autonome.

Comment ça marche en pratique

1. Déclenchement après la clôture de l'inscription

Un BackgroundService, un travail récurrent Hangfire, ou un point de terminaison webhook appelé par le système d'inscription déclenche la génération des billets, soit immédiatement après que chaque inscription soit confirmée, soit en une exécution de lot avant la date de l'événement. Le travail interroge la base de données d'inscription pour chaque participant confirmé : nom, e-mail, type de billet, sessions assignées, numéro de siège ou de table, et un ID de billet unique.

2. Créer un PDF avec code QR généré par participant

Chaque participant obtient un code QR encodant soit leur ID de billet, soit une URL complète d'enregistrement, par exemple, https://event.example.com/checkin/`{ticketId}`. Le code est rendu sous forme de PNG et converti en une chaîne base64 pour une intégration directe facile dans le modèle HTML, sans besoin d'écriture sur le système de fichiers :

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

Exemple de sortie

fichier PDF de sortie exemple IronPDF L'URI de données base64 intègre l'image QR directement dans le HTML, de sorte que le contenu du PDF est rendu correctement, peu importe où l'application est déployée, sans dépendance à un chemin de fichier ou à un CDN accessible au moment du rendu.

3. Document PDF envoyé par e-mail et stocké pour téléchargement via portail

Le PdfDocument rendu s'écoule directement vers un MemoryStream pour pièce jointe d'e-mail, avec une copie téléchargée sur un stockage blob pour accès via portail et impression sur site :

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

Exemple d'e-mail avec billet joint

E-mail envoyé exemple Pour les événements avec des milliers de participants, le travail partitionne la liste des participants et traite les lots en parallèle, une instance de ChromePdfRenderer par thread, pour compléter l'exécution bien avant la date de l'événement.

Avis Réels

Échelle. IronPDF rend chaque billet en millisecondes. Une exécution de lot pour 3 000 participants, parallélisée sur les cœurs disponibles, se termine en quelques minutes, pas en heures, et pas la veille de l'événement dans la panique.

Cohérence de la marque. Chaque billet et badge porte la même marque de l'événement, les logos des sponsors et la typographie. Les passes VIP, les badges des conférenciers, et les billets d'admission générale semblent tous provenir du même système de conception, car c'est le cas, le même contenu HTML et CSS que l'équipe maintient.

Prévention de la fraude. Chaque code QR encode un ID de billet unique lié à un enregistrement spécifique. Lorsque le personnel de porte le scanne, le système le valide contre la base de données. Un PDF dupliqué produit une numérisation en double que le système signale immédiatement.

Enregistrement rapide. Scannez un code QR et validez-le contre un enregistrement en moins d'une seconde. Aucune recherche de nom, aucune liste imprimée, aucune vérification manuelle lente. Les files d'attente d'entrée se déplacent plus rapidement et le personnel peut gérer les exceptions au lieu de traiter chaque entrée manuellement.

Flexibilité des modèles. Différents rôles d'événements obtiennent différentes mises en page, des passes VIP avec détails d'accès lounge, des badges de conférencier avec des points forts du programme, des accréditations du personnel avec des indicateurs en coulisse. Un pipeline de génération, plusieurs modèles HTML, un déploiement.

Pas de coûts par billet. Le pipeline fonctionne en cours. Il n'y a pas d'appels d'API à un fournisseur de billetterie, pas de comptage d'utilisation, et pas de frais par document qui augmentent avec le nombre d'inscriptions.

Conclusion

La génération de billets et de badges est l'un de ces problèmes qui semblent résolus par les plateformes existantes jusqu'à ce que l'événement ait des exigences de personnalisation réelle, une grande liste de participants, ou des besoins d'intégration que la plateforme ne prend pas en charge. Construire le pipeline à l'intérieur de l'application .NET donne à l'équipe un contrôle total, sur la mise en page, les données, le timing de livraison, et le coût.

IronPDF gère tout le cycle de vie de la génération de PDF en C# avec des fonctionnalités clés allant du rendu au pixel près des modèles HTML à leur sauvegarde, en appliquant des signatures numériques et le cryptage, en diffusant et en manipulant des documents, le tout depuis ironpdf.com. Si vous construisez un système d'inscription ou remplacez une dépendance de billetterie externe, la bibliothèque complète est disponible pour tester vos propres données d'événements, vous pouvez essayer IronPDF gratuitement avec l'essai gratuit.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi