IronPDFを使ってオンライン申請フォームをPDF要約にする
手動チケットとバッジ生成の問題
20人のゲストを招いた小さな私人夕食会の場合、FigmaやCanvaでのチケットデザインおよび手動でのエクスポートは管理可能です。 五つのチケット階層を持つ3,000人の参加者がいる技術会議の場合、それはプロセスではなく、責任です。
一般的なチケットプラットフォームは配布の問題を解決しますが、他のすべてに制限を加えます。 ブランドオプションはロゴアップロードとカラーピッカーに限定されています。 VIPパス、スピーカーバッジ、スタッフ認証用のカスタムレイアウトには、異なるツールから個別にエクスポートする必要があります。 企業サミットが登録記録と紐づいたディナー席付バッジとセッション特有のQRコードを必要とする場合、大半のプラットフォームには答えがありません。
各チケットに固有のスキャン可能な識別子がないと、チェックインはボトルネックになります。 印刷済みリストやドアでの名前検索はすべてに対して入場を遅らせ、詐欺の機会を作り出します。ユニークなエンコーディングのないPDFは視覚的検査に合格し、他の人が同じチケットを同時に使用しようとするまで発見されません。
参加者はまた、専門的なイベントドキュメントとボディに埋もれた予約参照を持つプレーンテキスト確認との違いを認識します。 音楽祭、非営利ガラ、企業サミットのどれも、そのイベントブランドを反映する資料を期待しています。第三者システムのデフォルトテンプレートではありません。
ソリューション:あなた for .NETアプリケーション内で生成されたパーソナライズドC# PDFチケット
IronPDFは.NETアプリケーションがHTMLとCSSテンプレートから参加者データと埋め込まれたQRコード画像で満たされたブランドPDFチケットとバッジを生成することを可能にします。 それぞれの登録者の詳細が同じテンプレートに入力され、QRコードが参加者ごとに生成され、彼らのユニークなチケットIDやチェックインURLをエンコードし、ChromePdfRendererがHTMLからPDFプロセスを担当し、アプリケーションがメールで配信するか、登録ポータルでダウンロードできるようにします。
第三者チケットAPI料金、デザインツールのエクスポート、および登録確認とチケット配信の間の手動処 steps to solve the ticket and badge generation problem... レンダリングは既存 for .NETアプリケーション内で行われ、PDF処理用にIronPDFを用いる1つのC# NuGetライブラリ、IronQR用の1つのライブラリ、全体は個別のパイプラインで完結しています。
実際の使用方法
1. 登録終了後のトリガー
BackgroundService、Hangfire定期ジョブ、または登録システムによって呼び出されたWebhookエンドポイントがチケット生成をトリガーし、それぞれの登録確定後やイベント日より前のバッチ実行で行います。 ジョブは確認された各参加者の名前、メール、チケットタイプ、割り当てられたセッション、席やテーブル番号、ユニークなチケットIDのために登録データベースをクエリします。
2. 参加者ごとにQRコード生成のPDFを作成
各参加者は、彼らのチケットIDかフルチェックインURLをエンコードするQRコードを取得します。例:https://event.example.com/checkin/`{ticketId}` コードはPNGとしてレンダリングされ、ベース64文字列に変換され、HTMLテンプレートに直接埋め込むのが簡単で、ファイルシステムへの書き込みは必要ありません:
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} | <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} | <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} | <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)
例の出力
ベース64データURIはQR画像をHTMLに直接埋め込みます。それでアプリケーションがどこに配置されていてもPDFコンテンツが正しくレンダリングされます。レンダー時にファイルパスやCDNへの依存はありません。
3. PDFドキュメントは電子メールで送信され、ポータルでダウンロードできるように保存されます
レンダリングされたPdfDocumentは、メール添付用にMemoryStreamに直接ストリーミングされ、ポータルアクセスと現地での再印刷のためにblobストレージにコピーされます:
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
添付チケット付きの例メール
数千人の登録者を持つイベントに対して、ジョブは参加者リストを分割し、利用可能なコアに並列化した一スレッドごとのChromePdfRendererインスタンスでバッチ処理を行い、イベント日よりはるかに前に完了します。
実世界の利点
スケール。 IronPDFは各チケットをミリ秒でレンダリングします。 3,000人の参加者のバッチ実行は、利用可能なコアに並列化され、数分で完了します。時間でなく、そしてイベント前日のパニックでもありません。
ブランドコンシステンシー。 各チケットとバッジは同じイベントブランディング、スポンサーのロゴ、タイポグラフィーを持っています。 VIPパス、スピーカーバッジ、一般入場券全ては同じデザインシステムから来たように見えます。それはそうで、チームが維持する同じHTMLコンテンツとCSSです。
詐欺防止。 各QRコードは特定の登録記録に紐付けられたユニークなチケットIDをエンコードします。 ドアスタッフがそれをスキャンすると、システムはデータベースに対してバリデーションします。 複製され Email PDFは、即座に システムがフラグを立てる重複スキャンを生成します。
迅速なチェックイン。 QRコードをスキャンし、登録記録を対照するのに1秒かかりません。 名前検索や印刷済みリスト、手動検証の遅延ありません。 エントリーキューが速く動き、スタッフは全ての入場を手動で扱うのではなく、例外扱いに集中できます。
テンプレートの柔軟性。 異なるイベント役割が異なるレイアウトを取得します。VIPパスには休憩所アクセスの詳細、スピーカーバッジにはスケジュールのハイライト、スタッフクレデンシャルには舞台裏インジケーター。 一つの生成パイプライン、複数のHTMLテンプレート、一つのデプロイメント。
チケット毎の費用なし。 パイプラインはインプロセスで動作します。 チケットベンダーへのAPIコールなし、使用メータリングなし、登録数が増えることで増える一文書あたりの料金なし。
結び
チケットとバッジの生成は既存のプラットフォームで解決されたように見えますが、イベントに実際 カスタマイズ要件、大人数の参加者リスト、あるいはプラットフォームがサポートしない統合ニーズがある場合、問題です。 .NETアプリケーション内でパイプラインを構築することで、チームはレイアウト、データ、配信タイミング、コストを完全にコントロールできます。
IronPDF は、C#でのPDF生成の全ライフサイクルを取り扱い、HTMLテンプレートのピクセル完璧なレンダリングから、それらの保存、デジタル署名や暗号化の適用、ストリーミング、ドキュメントの操作まで、すべてをironpdf.comから行います。 登録システムを構築する場合や外部チケット依存を置き換える場合、フルライブラリは自分のイベントデータに対してテスト可能です。無料トライアルを利用してIronPDFを無料で試せます。




