Altbilgi içeriğine atla
IRONPDF KULLANARAK

Blazor'da PDF Nasıl Görüntülenir (Kılavuz)

.NET uygulamalarınızın taleple kişiselleştirilmiş faturalar, gerçek zamanlı veri raporları ve özel sertifikalar üretmesine olanak tanıyan Dinamik PDF oluşturma, tek bir statik şablonu kullanmadan yapılır. IronPDF bunu basit hale getirir, HTML, CSS ve JavaScript'i doğrudan piksel mükemmelikte PDF belgelerine çeviren bir Chrome tabanlı oluşturma motoru sunar, böylece düşük düzeyde PDF ayrıntıları yerine iş mantığına odaklanabilirsiniz.

Bu kılavuz, .NET'te veri odaklı PDF'ler üretmek için her önemli tekniği ele alır: kütüphaneyi kurmak, yer tutucu şablonlar uygulamak, programlı olarak tablolar oluşturmak, koşullu içerik blokları kullanmak ve oluşturma öncesinde JavaScript yürütmek. Her bölüm, çalışır halde bir C# kod örneği ve hangi stratejiyi izlemeniz gerektiğini açıklayan bir açıklama içerir. Sonunda, uygulamanızın özel gereksinimlerine yönelik tam bir dinamik PDF oluşturma sistemi oluşturmak için yeterli çalışma bilgisine sahip olacaksınız.

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 1 - IronPDF

.NET'te Dinamik PDF Oluşturma Nedir?

Dinamik PDF oluşturma, sabit bir düzen yerine canlı verilerden gelen her içerik parçası -- isimler, rakamlar, tarihler, tablolar, grafikler -- ile çalışma zamanında PDF belgeleri oluşturmak demektir. Belge yapısı aynı kalabilir, ancak yükü her istekte değişir.

Bu yaklaşımın en yüksek değeri sağladığı senaryolar şunlardır:

  • Fatura oluşturma -- satır öğeleri, toplamlar, vergi oranları ve ödeme koşulları her işlem için farklılık gösterir
  • Finansal raporlar -- grafikler ve özet tablolar gün boyunca güncellenmiş bir veritabanından çekilir
  • Sertifikalar ve diplomalar -- alıcı isimleri, tamamlanma tarihleri ve kurs detayları kayıtlara göre değişir
  • Hukuki belgeler -- sözleşmeler, müşteri bazlı hükümler ve yetki kuralları içerir
  • Medikal kayıtlar -- hasta demografisi, test sonuçları ve bakım planları bireysel biçimlendirme gerektirir

Geleneksel alternatif, her varyasyon için sabit şablonlardan oluşan bir kütüphane tutmak ve bunları elle düzenlemek olurdu. Bu yaklaşım, belge hacmi arttıkça ve iş kuralları çoğaldıkça hızla çöker. IronPDF'nin HTML'den PDF'e dönüşüm motoru ile sekaliğine oluşturma mantığını yazarsınız ve binlerce düzgün biçimlendirilmiş, veri-doğru PDF üretirsiniz, hiçbir manuel müdahale gerekmeden.

IronPDF, Windows, Linux, macOS, Docker ve Azure'da çalışır -- aynı API tüm platformlarda aynı şekilde çalışır. Bu çapraz platform tutarlılığı, lokal olarak geliştirip platforma özgü ayarlamalar yapmadan bir bulut konteynerine yerleştirmenizi sağlar. Kütüphane, en son .NET sürümleri ve uzun vadeli destek sürümleri dahil olmak üzere .NET 6 ve daha üstünü hedefler.

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 2 - Özellikler

Kütüphane Nasıl Kurulur ve Yapılandırılır?

IronPDF, bir NuGet paketi olarak dağıtılır ve ASP.NET Core, Blazor ve konsol uygulamaları dahil olmak üzere herhangi bir .NET 6 veya daha ileri projesine entegre edilir. Paket Yöneticisi Konsolu veya .NET CLI üzerinden yükleyin:

Install-Package IronPdf

Paket kurulduktan sonra, hemen PDF oluşturmaya başlayabilirsiniz -- ücretsiz deneme sırasında herhangi bir yapılandırma dosyası veya API anahtarı gerekmiyor. Üretim lisanslaması için IronPDF lisans sayfasını ziyaret edin ve dağıtım modelinize en uygun planı seçin.

Tüm render süreçlerinin giriş noktası ChromePdfRenderer. Aşağıdaki kod parçası, dinamik bir HTML dizisini kaydedilmiş bir PDF dosyasına dönüştürmek için gereken minimum kodu gösterir:

using IronPdf;

var renderer = new ChromePdfRenderer();

var customerName = "Alexandra Chen";
var orderNumber = "ORD-2025-001";
var totalAmount = 1499.99m;

var html = $"""
    <h1>Order Confirmation</h1>
    <p>Dear {customerName},</p>
    <p>Thank you for your order #{orderNumber}.</p>
    <p>Total amount: ${totalAmount:F2}</p>
    <p>Your order will be processed within 24 hours.</p>
    """;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("order-confirmation.pdf");

// Stream the bytes directly in a web response if needed
byte[] pdfBytes = pdf.BinaryData;
using IronPdf;

var renderer = new ChromePdfRenderer();

var customerName = "Alexandra Chen";
var orderNumber = "ORD-2025-001";
var totalAmount = 1499.99m;

var html = $"""
    <h1>Order Confirmation</h1>
    <p>Dear {customerName},</p>
    <p>Thank you for your order #{orderNumber}.</p>
    <p>Total amount: ${totalAmount:F2}</p>
    <p>Your order will be processed within 24 hours.</p>
    """;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("order-confirmation.pdf");

// Stream the bytes directly in a web response if needed
byte[] pdfBytes = pdf.BinaryData;
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim customerName As String = "Alexandra Chen"
Dim orderNumber As String = "ORD-2025-001"
Dim totalAmount As Decimal = 1499.99D

Dim html As String = $"
    <h1>Order Confirmation</h1>
    <p>Dear {customerName},</p>
    <p>Thank you for your order #{orderNumber}.</p>
    <p>Total amount: ${totalAmount:F2}</p>
    <p>Your order will be processed within 24 hours.</p>
    "

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("order-confirmation.pdf")

' Stream the bytes directly in a web response if needed
Dim pdfBytes As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

ChromePdfRenderer tüm render karmaşıklığını dahili olarak yönetir. Dize enterpolasyonu ($"""...""") C# değişkenlerini çağrı noktasında HTML'e yerleştirir, şablonları okunabilir tutar ve basit durumlar için özel bir şablon kütüphanesini ortadan kaldırır.

Tam kurulum rehberliği, MVC görünümleri ve Blazor sunucu projeleri için yapılandırma dahil olmak üzere, IronPDF belgelerine göz atın.

Çıktı

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 5 - PDF Çıktısı

Şablon Tabanlı PDF Oluşturmayı Nasıl Uygularsınız?

Şablon tabanlı oluşturma, belge tasarımını veri bağlamasından ayırır. Bir tasarımcı HTML düzenini bir kez oluşturur, çalışma zamanı değerlerinin ortaya çıkması gereken yerlere adlandırılmış yer tutucular ({{TOKEN}}) yerleştirir ve uygulamanız bu belirteçleri render işleminden önce değiştirir. Bu, Stack Overflow'un PDF oluşturma tartışmalarında önerilen bir modeldir, özellikle şablonların uygulama kodundan daha sık değiştiği projelerde.

using IronPdf;

// Reusable template -- stored in a file or database in production
var htmlTemplate = """
    <style>
        .invoice { font-family: Arial; max-width: 800px; margin: auto; }
        .header  { background: #f0f0f0; padding: 20px; }
        .label   { font-weight: bold; }
    </style>
    <div class='invoice'>
        <div class='header'>
            <h2>Invoice #{{INVOICE_NUMBER}}</h2>
            <p>Date: {{INVOICE_DATE}}</p>
        </div>
        <p>Bill to: {{CUSTOMER_NAME}}</p>
        <p class='label'>Amount due: ${{TOTAL_AMOUNT}}</p>
    </div>
    """;

var invoiceHtml = htmlTemplate
    .Replace("{{INVOICE_NUMBER}}", "INV-2025-1234")
    .Replace("{{INVOICE_DATE}}", DateTime.Now.ToString("MMM dd, yyyy"))
    .Replace("{{CUSTOMER_NAME}}", "TechCorp Industries")
    .Replace("{{TOTAL_AMOUNT}}", "5,750.00");

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText    = "Invoice",
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);
pdf.SaveAs("invoice.pdf");
using IronPdf;

// Reusable template -- stored in a file or database in production
var htmlTemplate = """
    <style>
        .invoice { font-family: Arial; max-width: 800px; margin: auto; }
        .header  { background: #f0f0f0; padding: 20px; }
        .label   { font-weight: bold; }
    </style>
    <div class='invoice'>
        <div class='header'>
            <h2>Invoice #{{INVOICE_NUMBER}}</h2>
            <p>Date: {{INVOICE_DATE}}</p>
        </div>
        <p>Bill to: {{CUSTOMER_NAME}}</p>
        <p class='label'>Amount due: ${{TOTAL_AMOUNT}}</p>
    </div>
    """;

var invoiceHtml = htmlTemplate
    .Replace("{{INVOICE_NUMBER}}", "INV-2025-1234")
    .Replace("{{INVOICE_DATE}}", DateTime.Now.ToString("MMM dd, yyyy"))
    .Replace("{{CUSTOMER_NAME}}", "TechCorp Industries")
    .Replace("{{TOTAL_AMOUNT}}", "5,750.00");

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText    = "Invoice",
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);
pdf.SaveAs("invoice.pdf");
Imports IronPdf

' Reusable template -- stored in a file or database in production
Dim htmlTemplate As String = "
    <style>
        .invoice { font-family: Arial; max-width: 800px; margin: auto; }
        .header  { background: #f0f0f0; padding: 20px; }
        .label   { font-weight: bold; }
    </style>
    <div class='invoice'>
        <div class='header'>
            <h2>Invoice #{{INVOICE_NUMBER}}</h2>
            <p>Date: {{INVOICE_DATE}}</p>
        </div>
        <p>Bill to: {{CUSTOMER_NAME}}</p>
        <p class='label'>Amount due: ${{TOTAL_AMOUNT}}</p>
    </div>
    "

Dim invoiceHtml As String = htmlTemplate _
    .Replace("{{INVOICE_NUMBER}}", "INV-2025-1234") _
    .Replace("{{INVOICE_DATE}}", DateTime.Now.ToString("MMM dd, yyyy")) _
    .Replace("{{CUSTOMER_NAME}}", "TechCorp Industries") _
    .Replace("{{TOTAL_AMOUNT}}", "5,750.00")

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "Invoice",
    .DrawDividerLine = True
}

Dim pdf = renderer.RenderHtmlAsPdf(invoiceHtml)
pdf.SaveAs("invoice.pdf")
$vbLabelText   $csharpLabel

Belirteçler ({{...}}) verilerin belgeye girdiği yeri tam olarak işaretler ve şablonları geliştirici olmayanlar tarafından okunabilir hale getirir. Şablonları harici dosyalar olarak saklamak, bir tasarımcının düzeni uygulama kod tabanına dokunmadan güncelleyebilmesini sağlar. Bu desenin daha derin bir incelemesi için IronPDF şablon eğitici bak.

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 3 - Dinamik PDF Oluşturma .NET - IronPDF

Verilerden PDF'leri Programatik Olarak Nasıl İnşa Edersiniz?

Belge içeriği döngüler, toplama ya da koşullu biçimlendirmeye bağlı olduğunda, HTML dizisini kodda oluşturmak en fazla kontrolü verir. Bu yöntem, derleme zamanında sıra sayısının bilinmediği finansal ve operasyonel raporlama alanlarında yaygındır. Ayrıca C# dilinde biçimlendirme kuralları uygulamanızı, bunlar yerine sabit bir şablona gömmenizi sağlar.

using IronPdf;
using System.Text;

var orderItems = new[]
{
    new { Product = "Premium License",  Quantity = 5, Price = 399.00m },
    new { Product = "Support Package",  Quantity = 1, Price = 299.00m },
    new { Product = "Training Session", Quantity = 2, Price = 150.00m }
};

var sb = new StringBuilder();
sb.Append("<h2>Order Summary</h2>");
sb.Append("<table style='width:100%; border-collapse:collapse;'>");
sb.Append("<tr style='background:#333; color:white;'>");
sb.Append("<th style='padding:10px;'>Product</th><th>Qty</th><th>Unit Price</th><th>Total</th>");
sb.Append("</tr>");

decimal grandTotal = 0;
foreach (var item in orderItems)
{
    var lineTotal = item.Quantity * item.Price;
    grandTotal += lineTotal;
    sb.Append($"""
        <tr>
            <td style='padding:10px;'>{item.Product}</td>
            <td style='text-align:center;'>{item.Quantity}</td>
            <td style='text-align:right;'>${item.Price:F2}</td>
            <td style='text-align:right;'>${lineTotal:F2}</td>
        </tr>
        """);
}

sb.Append($"""
    <tr style='font-weight:bold; background:#f0f0f0;'>
        <td colspan='3' style='padding:10px; text-align:right;'>Grand total:</td>
        <td style='text-align:right; padding:10px;'>${grandTotal:F2}</td>
    </tr>
    """);
sb.Append("</table>");

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(sb.ToString());

pdf.SaveAs("order-summary.pdf");

// Get bytes for a web download response
byte[] pdfData = pdf.BinaryData;
using IronPdf;
using System.Text;

var orderItems = new[]
{
    new { Product = "Premium License",  Quantity = 5, Price = 399.00m },
    new { Product = "Support Package",  Quantity = 1, Price = 299.00m },
    new { Product = "Training Session", Quantity = 2, Price = 150.00m }
};

var sb = new StringBuilder();
sb.Append("<h2>Order Summary</h2>");
sb.Append("<table style='width:100%; border-collapse:collapse;'>");
sb.Append("<tr style='background:#333; color:white;'>");
sb.Append("<th style='padding:10px;'>Product</th><th>Qty</th><th>Unit Price</th><th>Total</th>");
sb.Append("</tr>");

decimal grandTotal = 0;
foreach (var item in orderItems)
{
    var lineTotal = item.Quantity * item.Price;
    grandTotal += lineTotal;
    sb.Append($"""
        <tr>
            <td style='padding:10px;'>{item.Product}</td>
            <td style='text-align:center;'>{item.Quantity}</td>
            <td style='text-align:right;'>${item.Price:F2}</td>
            <td style='text-align:right;'>${lineTotal:F2}</td>
        </tr>
        """);
}

sb.Append($"""
    <tr style='font-weight:bold; background:#f0f0f0;'>
        <td colspan='3' style='padding:10px; text-align:right;'>Grand total:</td>
        <td style='text-align:right; padding:10px;'>${grandTotal:F2}</td>
    </tr>
    """);
sb.Append("</table>");

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(sb.ToString());

pdf.SaveAs("order-summary.pdf");

// Get bytes for a web download response
byte[] pdfData = pdf.BinaryData;
Imports IronPdf
Imports System.Text

Dim orderItems = New() {
    New With {.Product = "Premium License", .Quantity = 5, .Price = 399.0D},
    New With {.Product = "Support Package", .Quantity = 1, .Price = 299.0D},
    New With {.Product = "Training Session", .Quantity = 2, .Price = 150.0D}
}

Dim sb = New StringBuilder()
sb.Append("<h2>Order Summary</h2>")
sb.Append("<table style='width:100%; border-collapse:collapse;'>")
sb.Append("<tr style='background:#333; color:white;'>")
sb.Append("<th style='padding:10px;'>Product</th><th>Qty</th><th>Unit Price</th><th>Total</th>")
sb.Append("</tr>")

Dim grandTotal As Decimal = 0
For Each item In orderItems
    Dim lineTotal = item.Quantity * item.Price
    grandTotal += lineTotal
    sb.Append($"
        <tr>
            <td style='padding:10px;'>{item.Product}</td>
            <td style='text-align:center;'>{item.Quantity}</td>
            <td style='text-align:right;'>${item.Price:F2}</td>
            <td style='text-align:right;'>${lineTotal:F2}</td>
        </tr>
        ")
Next

sb.Append($"
    <tr style='font-weight:bold; background:#f0f0f0;'>
        <td colspan='3' style='padding:10px; text-align:right;'>Grand total:</td>
        <td style='text-align:right; padding:10px;'>${grandTotal:F2}</td>
    </tr>
    ")
sb.Append("</table>")

Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(sb.ToString())

pdf.SaveAs("order-summary.pdf")

' Get bytes for a web download response
Dim pdfData As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

StringBuilder büyük HTML dizelerini verimli bir şekilde işler. foreach döngüsü, veri kaynağınızın sağladığı kadar çok satıra genişler ve çalışan grandTotal hesaplaması iş mantığının HTML yapımı ile nasıl doğal bir şekilde entegre olduğunu gösterir. Çok büyük veri kümeleri için, bu yaklaşım IronPDF'nin çok sayfalı oluşturma seçenekleriyle iyi bir şekilde eşleşir.

Çıktı

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 7 - HTML'den PDF Çıktısı

Birden Çok Sayfayı Kapsayan Dinamik Tabloları Nasıl Yönetirsiniz?

Genelde veritabanlarından oluşturulan raporlar, tahmin edilemez sıra sayılarına sahiptir. Otomatik sayfa kırılmalarını -- satırı yarıda kesmeden -- doğru bir şekilde ele almak, IronPDF'nin render seçenekleriyle birleştirilmiş belirli CSS gerektirir. page-break-inside: avoid kuralı, doğru kenar boşluğu yapılandırması ile birleştiğinde, tablo sayfalar arasında akar iken her satırı bütün halde tutar.

using IronPdf;

var salesData = Enumerable.Range(1, 30).Select(i => new
{
    Month   = $"Month {i}",
    Revenue = 10_000 + (i * 500),
    Growth  = 2.5 + (i * 0.3)
});

var tableHtml = """
    <style>
        table { width: 100%; border-collapse: collapse; page-break-inside: auto; }
        th    { background: #2c3e50; color: white; padding: 12px; }
        td    { padding: 8px; border-bottom: 1px solid #ddd; }
        tr:nth-child(even) { background: #f9f9f9; }
        tr    { page-break-inside: avoid; page-break-after: auto; }
    </style>
    <h2>Sales Performance Report</h2>
    <table>
        <thead><tr><th>Period</th><th>Revenue</th><th>Growth %</th></tr></thead>
        <tbody>
    """;

foreach (var row in salesData)
{
    tableHtml += $"""
        <tr>
            <td>{row.Month}</td>
            <td>${row.Revenue:N0}</td>
            <td>{row.Growth:F1}%</td>
        </tr>
        """;
}

tableHtml += "</tbody></table>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize   = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop    = 40;
renderer.RenderingOptions.MarginBottom = 40;

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "{page} of {total-pages}",
    FontSize   = 10
};

var pdf = renderer.RenderHtmlAsPdf(tableHtml);
pdf.SaveAs("sales-report.pdf");
using IronPdf;

var salesData = Enumerable.Range(1, 30).Select(i => new
{
    Month   = $"Month {i}",
    Revenue = 10_000 + (i * 500),
    Growth  = 2.5 + (i * 0.3)
});

var tableHtml = """
    <style>
        table { width: 100%; border-collapse: collapse; page-break-inside: auto; }
        th    { background: #2c3e50; color: white; padding: 12px; }
        td    { padding: 8px; border-bottom: 1px solid #ddd; }
        tr:nth-child(even) { background: #f9f9f9; }
        tr    { page-break-inside: avoid; page-break-after: auto; }
    </style>
    <h2>Sales Performance Report</h2>
    <table>
        <thead><tr><th>Period</th><th>Revenue</th><th>Growth %</th></tr></thead>
        <tbody>
    """;

foreach (var row in salesData)
{
    tableHtml += $"""
        <tr>
            <td>{row.Month}</td>
            <td>${row.Revenue:N0}</td>
            <td>{row.Growth:F1}%</td>
        </tr>
        """;
}

tableHtml += "</tbody></table>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize   = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop    = 40;
renderer.RenderingOptions.MarginBottom = 40;

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "{page} of {total-pages}",
    FontSize   = 10
};

var pdf = renderer.RenderHtmlAsPdf(tableHtml);
pdf.SaveAs("sales-report.pdf");
Imports IronPdf

Dim salesData = Enumerable.Range(1, 30).Select(Function(i) New With {
    .Month = $"Month {i}",
    .Revenue = 10000 + (i * 500),
    .Growth = 2.5 + (i * 0.3)
})

Dim tableHtml As String = "
    <style>
        table { width: 100%; border-collapse: collapse; page-break-inside: auto; }
        th    { background: #2c3e50; color: white; padding: 12px; }
        td    { padding: 8px; border-bottom: 1px solid #ddd; }
        tr:nth-child(even) { background: #f9f9f9; }
        tr    { page-break-inside: avoid; page-break-after: auto; }
    </style>
    <h2>Sales Performance Report</h2>
    <table>
        <thead><tr><th>Period</th><th>Revenue</th><th>Growth %</th></tr></thead>
        <tbody>
    "

For Each row In salesData
    tableHtml += $"
        <tr>
            <td>{row.Month}</td>
            <td>${row.Revenue:N0}</td>
            <td>{row.Growth:F1}%</td>
        </tr>
        "
Next

tableHtml += "</tbody></table>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 40
renderer.RenderingOptions.MarginBottom = 40

renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .CenterText = "{page} of {total-pages}",
    .FontSize = 10
}

Dim pdf = renderer.RenderHtmlAsPdf(tableHtml)
pdf.SaveAs("sales-report.pdf")
$vbLabelText   $csharpLabel

{page} ve {total-pages}, IronPDF'nin otomatik altbilgi numaralandırması için yerleşik belirteçleridir. Marjlar, içeriği her sayfanın kenarlarından uzak tutar ve tablonun düzinelerce sayfa boyunca devam ettiği durumlarda bile son rapora profesyonel bir görünüm verir.

Birleştirilmiş hücreler dahil olmak üzere karmaşık tablo düzenleri için biçimlendirme rehberliği için IronPDF render seçenekleri referansına bakın.

Bir PDF'e Koşullu İçerik Nasıl Eklersiniz?

Birçok belge türü, yalnızca belirli koşullar doğru olduğunda görünmesi gereken bölümlere sahiptir -- üst-tüketici müşteriler için bir premium rozeti, bir promosyon geçerli olduğunda bir indirim bloğu, bir hesap geciktiğinde bir uyarı. C# koşullu mantığı, bu gereksinimle doğrudan eşleşir ve koşul, HTML dizisi oluşturulmadan önce değerlendirildiği için, son PDF'de boş yer tutucu öğeler bulunmaz.

using IronPdf;

var customer = new
{
    Name           = "Global Tech Solutions",
    IsPremium      = true,
    HasDiscount    = true,
    DiscountPct    = 15,
    LoyaltyPoints  = 2500
};

var html = $"""<h2>Customer Profile: {customer.Name}</h2><div style='border:1px solid #ddd; padding:20px;'>""";

if (customer.IsPremium)
{
    html += """<div style='background:gold; padding:10px; margin-bottom:10px;'>PREMIUM MEMBER -- Exclusive benefits applied</div>""";
}

if (customer.HasDiscount)
{
    html += $"""<div style='background:#e8f5e9; padding:10px; margin-bottom:10px;'>Special discount: {customer.DiscountPct}% off all orders</div>""";
}

if (customer.LoyaltyPoints > 0)
{
    html += $"""<div style='background:#f3e5f5; padding:10px;'>Loyalty points balance: {customer.LoyaltyPoints:N0} points</div>""";
}

html += "</div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("customer-profile.pdf");
using IronPdf;

var customer = new
{
    Name           = "Global Tech Solutions",
    IsPremium      = true,
    HasDiscount    = true,
    DiscountPct    = 15,
    LoyaltyPoints  = 2500
};

var html = $"""<h2>Customer Profile: {customer.Name}</h2><div style='border:1px solid #ddd; padding:20px;'>""";

if (customer.IsPremium)
{
    html += """<div style='background:gold; padding:10px; margin-bottom:10px;'>PREMIUM MEMBER -- Exclusive benefits applied</div>""";
}

if (customer.HasDiscount)
{
    html += $"""<div style='background:#e8f5e9; padding:10px; margin-bottom:10px;'>Special discount: {customer.DiscountPct}% off all orders</div>""";
}

if (customer.LoyaltyPoints > 0)
{
    html += $"""<div style='background:#f3e5f5; padding:10px;'>Loyalty points balance: {customer.LoyaltyPoints:N0} points</div>""";
}

html += "</div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("customer-profile.pdf");
Imports IronPdf

Dim customer = New With {
    .Name = "Global Tech Solutions",
    .IsPremium = True,
    .HasDiscount = True,
    .DiscountPct = 15,
    .LoyaltyPoints = 2500
}

Dim html = $"<h2>Customer Profile: {customer.Name}</h2><div style='border:1px solid #ddd; padding:20px;'>"

If customer.IsPremium Then
    html += "<div style='background:gold; padding:10px; margin-bottom:10px;'>PREMIUM MEMBER -- Exclusive benefits applied</div>"
End If

If customer.HasDiscount Then
    html += $"<div style='background:#e8f5e9; padding:10px; margin-bottom:10px;'>Special discount: {customer.DiscountPct}% off all orders</div>"
End If

If customer.LoyaltyPoints > 0 Then
    html += $"<div style='background:#f3e5f5; padding:10px;'>Loyalty points balance: {customer.LoyaltyPoints:N0} points</div>"
End If

html += "</div>"

Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("customer-profile.pdf")
$vbLabelText   $csharpLabel

Aynı deseni herhangi bir kurallar tabanlı içerik için genişletebilirsiniz: bir yargı alanına özgü yasal siblaverler, alışveriş sepeti değeriyle tetiklenen promosyon bölümleri veya ürün kategorisine göre tetiklenen güvenlik uyarıları. Sonuç olarak PDF, tam olarak olması gereken içeriği içerir -- ne eksik ne de fazla.

Çıktı

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 8 - Dinamik PDF Çıktısı

JavaScript Tabanlı Grafikler Kullanılarak PDF Nasıl Oluşturulur?

Modern panolar genellikle render sırasında grafik çizmek için Chart.js veya D3.js gibi JavaScript grafik kütüphanelerine dayanır. IronPDF, sayfayı yakalamadan önce JavaScript çalıştırabilir, böylece grafik PDF anlık görüntüsü alınmadan önce tam olarak oluşturulur. Bu, ayrı bir ekran görüntü hizmetine veya sunucu tarafında bir grafik işleme kütüphanesine gerek olmadığı anlamına gelir.

using IronPdf;

var chartHtml = """
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
    <canvas id='revenueChart' width='500' height='250'></canvas>
    <script>
        var ctx = document.getElementById('revenueChart').getContext('2d');
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ['Q1', 'Q2', 'Q3', 'Q4'],
                datasets: [{
                    label: 'Revenue (thousands)',
                    data: [120, 195, 230, 285],
                    backgroundColor: '#3498db'
                }]
            },
            options: { animation: false }
        });
    </script>
    """;

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1500);

var pdf = renderer.RenderHtmlAsPdf(chartHtml);
pdf.SaveAs("revenue-chart.pdf");
using IronPdf;

var chartHtml = """
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
    <canvas id='revenueChart' width='500' height='250'></canvas>
    <script>
        var ctx = document.getElementById('revenueChart').getContext('2d');
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ['Q1', 'Q2', 'Q3', 'Q4'],
                datasets: [{
                    label: 'Revenue (thousands)',
                    data: [120, 195, 230, 285],
                    backgroundColor: '#3498db'
                }]
            },
            options: { animation: false }
        });
    </script>
    """;

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1500);

var pdf = renderer.RenderHtmlAsPdf(chartHtml);
pdf.SaveAs("revenue-chart.pdf");
Imports IronPdf

Dim chartHtml As String = "
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
    <canvas id='revenueChart' width='500' height='250'></canvas>
    <script>
        var ctx = document.getElementById('revenueChart').getContext('2d');
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ['Q1', 'Q2', 'Q3', 'Q4'],
                datasets: [{
                    label: 'Revenue (thousands)',
                    data: [120, 195, 230, 285],
                    backgroundColor: '#3498db'
                }]
            },
            options: { animation: false }
        });
    </script>
    "

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(1500)

Dim pdf = renderer.RenderHtmlAsPdf(chartHtml)
pdf.SaveAs("revenue-chart.pdf")
$vbLabelText   $csharpLabel

EnableJavaScript = true betik yürütümünü Headless Chrome motoru içinde etkinleştirir. RenderDelay(1500), sayfa yüklendikten sonra 1,5 saniyelik bir duraklama ekleyerek, grafiklerin asenkron olarak render edilmesini tamamlaması için snapshot alınmadan önce süre tanır. Chart.js seçeneklerinde animation: false ayarlaması, animasyonlu karelerin geçiş ortasında yakalanmasını engeller.

Bu teknik, herhangi bir JavaScript kütüphanesi ile çalışır. Sunucu tarafındaki verileri C# dize enterpolasyonu kullanarak <script> bloğuna aktarabilirsiniz, böylece her grafik, oluşum anında canlı veritabanı rakamlarını yansıtır. JavaScript yapılandırması hakkında daha fazla ayrıntı için IronPDF'nin JavaScript rendering kılavuzuna bakın.

Oluşturulan PDF Nasıl Dışa Aktarılır ve Teslim Edilir?

RenderHtmlAsPdf bir PdfDocument nesnesi döndürdüğünde, uygulama türünüze bağlı olarak birkaç teslimat seçeneğiniz olur. Diskte kaydetmek en basit yaklaşım olup arka plan toplu işler için uygundur. Web API'leri ve MVC denetleyicileri için, baytları doğrudan HTTP yanıtına aktarmak geçici dosyalar yazmaktan kaçınır ve sunucu dosya sistemini temiz tutar.

using IronPdf;
using Microsoft.AspNetCore.Mvc;

// In an ASP.NET Core controller action:
public IActionResult DownloadInvoice(int orderId)
{
    var renderer = new ChromePdfRenderer();
    var html     = BuildInvoiceHtml(orderId);   // your data-binding method
    var pdf      = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;

// In an ASP.NET Core controller action:
public IActionResult DownloadInvoice(int orderId)
{
    var renderer = new ChromePdfRenderer();
    var html     = BuildInvoiceHtml(orderId);   // your data-binding method
    var pdf      = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

' In an ASP.NET Core controller action:
Public Function DownloadInvoice(orderId As Integer) As IActionResult
    Dim renderer = New ChromePdfRenderer()
    Dim html = BuildInvoiceHtml(orderId)   ' your data-binding method
    Dim pdf = renderer.RenderHtmlAsPdf(html)

    Return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf")
End Function
$vbLabelText   $csharpLabel

pdf.BinaryData ham baytları bir byte[] olarak döndürür, bu doğrudan ASP.NET Core'un File() sonucuna eşlenir. Tarayıcı doğru MIME türünü (application/pdf) alır ve anlamlı bir dosya adı ile bir indirme diyaloğu başlatır.

Ek çıktı yetenekleri arasında PDF birleştirme, dijital imzalar, PDF/A arşiv formatı, parola koruma ve metin ve resim çıkarma yer alır. Bu özellikler, yineleyici tarafından döndürülen aynı PdfDocument nesnesi üzerinde çalışır, bu nedenle ara dosyalar oluşturmadan işlemleri zincirleyebilirsiniz.

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 9 - Lisans

Sonraki Adımlarınız Neler?

.NET'te dinamik PDF oluşturma, üç yapı taşına dayanır: verilerinizle değişen bir HTML dizgesi, o dizgeyi PDF'e dönüştüren ChromePdfRenderer ve uygulamanıza uygun teslimat mekanizması. IronPDF, sayfa kırılmaları, başlık ve dipnotlar, JavaScript çalıştırma ve platformlar arası uyumluluk gibi her şeyi ele alır.

Okumadan oluşturma işlemine geçmek için paketi yükleyerek ve yukarıdaki örneklerden birini kendi verilerinize karşı çalıştırarak başlayın:

dotnet add package IronPdf

IronPDF dokümantasyonuna giderek platforma özel kurulum (Azure, Docker, Linux), gelişmiş oluşturma seçenekleri ve tam API referansı hakkında daha fazla bilgi alın. Dağıtıma hazır olduğunuzda, üretim hacminize uygun bir plan seçmek için lisanslama sayfasını ziyaret edin. ücretsiz deneme size kredi kartı gerektirmeden tüm özelliklere tam erişim sağlar, böylece taahhüt etmeden önce uygulamanızı doğrulayabilirsiniz.

Dinamik oluşturma ile iyi uyum sağlayan ek kılavuzlar:

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 6 - Çapraz platform uyumluluğu

Dinamik PDF Oluşturma .NET IronPDF Kullanarak: Resim 4 - Kurulum

Sıkça Sorulan Sorular

Dinamik PDF oluşturma nedir?

Dinamik PDF oluşturma, önceden var olan statik şablonlar yerine gerçek zamanlı veri girdilerine dayanak PDF belgelerinin anında oluşturulmasını ifade eder.

IronPDF, .NET'de dinamik PDF oluşturulmasına nasıl yardımcı olabilir?

IronPDF, geliştiricilerin iş mantığına odaklanmalarını sağlar ve PDF rendering ile ilgili karmaşıklıkları soyutlayarak, HTML, görseller veya diğer kaynaklardan PDF’leri oluşturmayı basitleştirir.

Dinamik PDF oluşturma için IronPDF kullanmanın faydaları nelerdir?

IronPDF kullanarak dinamik PDF’ler, kişiselleştirme, gerçek zamanlı veri entegrasyonu ve doğrudan .NET uygulamalarından PDF belgeleri oluşturma karmaşıklığını azaltmayı sağlar.

IronPDF, bir e-ticaret platformunda kişiselleştirilmiş faturalar oluşturmak için kullanılabilir mi?

Evet, IronPDF gerçek zamanlı veri entegrasyonu yaparak kişiselleştirilmiş faturalar dinamik olarak oluşturabilir, bu da onu e-ticaret platformları için ideal kılar.

Dinamik PDF oluşturmanın faydalandığı uygulama türleri nelerdir?

Dinamik PDF oluşturması, özelleştirilmiş, gerçek zamanlı belgeler sağlamak için e-ticaret platformları, raporlama sistemleri ve eğitim platformları gibi uygulamalar için faydalıdır.

IronPDF, gerçek zamanlı verilerle PDF raporları oluşturma için uygun mudur?

Kesinlikle, IronPDF, dinamik belge oluşturulmasını sağlamak için gerçek zamanlı verileri çekerek PDF raporları oluşturmak üzere tasarlanmıştır.

IronPDF, PDF rendering karmaşıklıklarını nasıl yönetir?

IronPDF, yüksek kaliteli PDF'ler oluştururken geliştiricilerin uygulamalarının iş mantığına odaklanmalarına olanak tanıyarak PDF rendering karmaşıklıklarını soyutlar.

IronPDF, eğitim sertifikalarını dinamik olarak oluşturabilir mi?

Evet, IronPDF, veri girdilerini kullanarak kişiselleştirilmiş ve profesyonel görünümlü sertifikalar oluşturarak eğitim sertifikalarını dinamik olarak üretebilir.

IronPDF, HTML içeriğinden PDF oluşturmayı destekliyor mu?

IronPDF, web sayfalarını veya HTML dizelerini doğrudan PDF formatına dönüştürerek HTML içeriğinden PDF oluşturmayı destekler.

IronPDF, geliştiricilerin üretkenliğini nasıl artırır?

IronPDF, geliştirici verimliliğini PDF oluşturma için basit bir API sağlayarak iyileştirir ve dinamik belgeler oluşturmak için gereken zaman ve çabayı azaltır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara