Altbilgi içeriğine atla
IRONPDF KULLANARAK

.NET'te IronPDF ile Dinamik PDF Nasıl Oluşturulur

Dinamik PDF oluşturma, .NET uygulamalarınızın, tek bir statik şablona dokunmadan, kişiselleştirilmiş faturalar, gerçek zamanlı veri raporları ve özelleştirilmiş sertifikalar üretmesine olanak verir. IronPDF, HTML, CSS ve JavaScript'i doğrudan piksel mükemmel PDF belgelerine dönüştüren bir Chrome tabanlı rendering motorunu ortaya çıkararak, düşük seviyeli PDF ayrıntıları yerine iş mantığına odaklanmanıza yardımcı olur.

Bu kılavuz, .NET'te veri odaklı PDF'ler üretmek için her ana tekniği kapsar: kütüphaneyi yüklemek, yer tutucu şablonlarını uygulamak, tabloları programatik olarak oluşturmak, koşullu içerik blokları kullanmak ve renderdan önce JavaScript yürütmek. Her bölümde çalışan bir C# kod örneği ve o belirli stratejiyi ne zaman kullanmanız gerektiğine dair bir açıklama bulunmaktadır. Sonunda, uygulamanızın özel gereksinimlerine uyarlanmış eksiksiz bir dinamik PDF oluşturma sistemi kurmak için yeterli çalışma bilgisine sahip olacaksınız.

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 1 - IronPDF

.NET'te Dinamik PDF Oluşturma Nedir?

Dinamik PDF oluşturma, her içerik parçasının -- isimler, rakamlar, tarihler, tablolar, grafikler -- sabit bir düzen yerine canlı verilerden geldiği çalışma zamanında PDF belgeleri oluşturmak anlamına gelir. Belge yapısı aynı kalabilir, ancak her istekle birlikte içeriği değişir.

Bu yaklaşımın en değerli olduğu senaryolar şunlardır:

  • Fatura oluşturma -- her işlem için satır öğeleri, toplamlar, vergi oranları ve ödeme şartları farklıdır
  • Finansal raporlar -- grafikler ve özet tablolar gün boyu güncellenen bir veritabanından çekilir
  • Sertifikalar ve diplomalar -- alıcı isimleri, tamamlanma tarihleri ve kurs detayları her kaydın özelidir
  • Hukuki belgeler -- sözleşmeler müşteri özel madde ve yargı kurallarını gömülür
  • Tıbbi kayıtlar -- hasta demografik bilgileri, test sonuçları ve bakım planları bireysel biçimlendirme gerektirir

Geleneksel alternatif, statik şablonlardan oluşan bir kütüphaneyi korumak ve her varyasyon için bunları elle düzenlemektir. Belge hacmi arttıkça ve iş kuralları çoğaldıkça bu yaklaşım hızla başarısız olur. IronPDF'in HTML-to-PDF dönüştürme motoru ile, oluşturma mantığını bir kez yazarsınız ve hiçbir elle müdahale gerektirmeden, doğru formatlanmış, veri açıdan doğru binlerce PDF üretirsiniz.

IronPDF, Windows, Linux, macOS, Docker ve Azure'da çalışır -- aynı API tüm platformlarda aynı şekilde çalışır. Bu çapraz platform tutarlılığı, yerel olarak geliştirme yapıp, herhangi bir platforma özgü ayarlama yapmadan bir bulut konteynerine dağıtmanıza olanak tanır. Kutuphane, .NET 6 ve daha sonraki surumleri hedefler, hem en son .NET surumlerini hem de uzun sureli destek surumlerini destekler.

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 2 - Özellikler

Kutuphaneyi Nasıl Kurar ve Yapılandırirsiniz?

IronPDF, NuGet paketi olarak dağıtilir ve .NET 6 veya daha ustu projelerle, ASP.NET Core, Blazor ve konsol uygulamalari dahil, entegre olur. Paket Yonetici Konsolu veya .NET CLI ile yukleyin:

Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
SHELL

Paket yuklendikten sonra, hemen PDF oluşturmaya başlayabilirsiniz -- ücretsiz deneme sirasi boyunca herhangi bir yapılandırma dosyasi veya API anahtari gerekmez. Uretim lisanslamasi icin IronPDF lisanslama sayfasini ziyaret edin ve dağıtim modelinize uygun plani secin.

Tüm renderlemenin başlangıç noktası ChromePdfRenderer. Asagidaki kod parcasi, dinamik bir HTML dizisini kaydedilen bir PDF dosyasina cevirmenin minimum kodunu 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 renderleme karmaşıklığını dahili olarak ele alır. String interpolasyonu ($"""..."""), C# değişkenlerini çağrı noktasında HTML'e yerleştirir, şablonları okunabilir tutar ve basit durumlar için özel bir şablon kitaplığına olan ihtiyaçı ortadan kaldırır.

MVC gorunumleri ve Blazor sunucu projeleri icin ayar rehberini de iceren tam kurulum rehberligi icin IronPDF dokümantasyonuna bakin.

Çıktı

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 5 - PDF Çıktısı

Saplon Tabanli PDF Oluşturmayi Nasıl Uygularsiniz?

Saplon tabanlı oluşturma, belge tasarimini veri baglamasindan ayırır. Bir tasarımcı HTML yerleşimini bir kez oluşturur ve çalışma zamanı değerlerinin görünmesi gereken yerlerde adlandırılmış yer tutucular ({{TOKEN}}) yerleştirir, ve uygulamanız bu tokenları renderlemeden önce değiştirir. Bu, saplonların uygulama kodundan daha sık değiştirildiği projeler icin Stack Overflow'un PDF oluşturma tartışmalarında önerilen desendir.

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

Tokenlar ({{...}}) verinin belgeye girdiği tam yeri işaretler, bu da şablonları geliştirici olmayanlar tarafından okunabilir kılar. Saplonları dış dosyalar olarak saklamak, bir tasarımcının düzeni uygulama kodbase'ine dokunmadan güncellemesine olanak tanır. Bu desenin daha derin bir yürüyüşü icin, IronPDF saplon rehberine bakın.

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 3 - Dinamik PDF Üretimi .NET - IronPDF

Verilerden Programatik Olarak PDF'leri Nasıl Oluşturursunuz?

Belge içeriği döngülere, toplamlara veya kosullu formatlamaya bağlı oldugunda, HTML dizisini kodda oluşturmak size en fazla kontrolu verir. Bu yaklaşım, derleme zamanında satır sayısının bilinmediği finansal ve operasyonel raporlamada yaygındır. Ayrica, formatlama kurallarını statik bir şablona gömmek yerine doğrudan C#'da uygulamanıza izin verir.

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 stringlerini verimli bir şekilde işler. foreach döngüsü, veri kaynağınızın sağladığı kadar satıra genişler ve çalışan grandTotal hesaplaması, iş mantığının HTML yapısına doğal olarak nasıl entegre edildiğini gösterir. Çok büyük veri kümeleri icin bu yaklaşım, IronPDF'nin çok sayfalı işleme seçenekleriyle iyi bir eşleşme sağlar.

Çıktı

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 7 - HTML'den PDF Çıktısına

Birden Çok Sayfaya Yayılan Dinamik Tabloları Nasıl Ele Alırsınız?

Veritabanlarından gelen raporlar genellikle tahmin edilemez satır sayılarına sahiptir. Bir satırı yarılamadan otomatik sayfa kırılmalarını dogru bir şekilde ele almak, IronPDF'nin işleme seçenekleriyle birlikte belirli CSS'ler gerektirir. page-break-inside: avoid kuralı, doğru kenar ayarı ile kombinasyon halinde, tablo sayfalar arasında akarken her satırı sağlam 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ırma için yerleşik tokenlarıdır. Kenar boşlukları her sayfanın kenarlarından içeriği uzak tutar, tablo düzinelerce sayfaya uzarsa bile bitmiş rapora profesyonel bir görünüm kazandırır.

Birleşik hucreleri içeren karmaşık tablo düzenleri icin formatlama rehberligi icin IronPDF işleme seçenekleri referansına başvurun.

Kosullu Iceığı Bir PDF'e Nasıl Eklersiniz?

Pek çok belge türü, belirli kosullar gerçek oldugunda yalnızca gorunmesi gereken bölümler icerir -- ust düzey müşteriler icin bir premium rozet, bir promosyon uygulandıgında bir indirim bloğu, bir hesap gecikmiş oldugunda bir uyarı. C# kosullu mantığı bu gereksinimle dogrudan eşleşir ve kosul HTML dizisi oluşturulmadan once değerlendirildigi icin, son PDF'te bos yer tutucu ogeler yer almaz.

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 kural tabanlı icerige genişletebilirsiniz: yargı yetkisine özel yasal açıklamalar, sepet degerinden tetiklenen promosyon bölümleri veya ürün kategorisi tarafından tetiklenen guvenlik uyarıları. Ortaya çıkan PDF, olması gereken tam iceriği icerir -- ne daha fazlasını ne de daha azını.

Çıktı

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 8 - Dinamik PDF Çıktısı

JavaScript Destekli Grafiklerin Bir PDF'te Nasıl Görüntüleneceğini Nasıl Saglarsınız?

Modern kontrol panelleri, Chart.js veya D3.js gibi JavaScript grafik kitaplıklarına sık sık grafikleri işleme vaktinde cizmek icin güveniyor. IronPDF, sayfayı yakalamadan once JavaScript'i calıstırabilir, bu nedenle grafik, PDF'ın anlık görüntüsü alınmadan once tam olarak işlenir. Bu, ayrı bir ekran görüntüsü hizmetine veya sunucu taraflı grafik işleme kutuphanesine ihtiyaçınız olmadıgı 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 başsız Chrome motorunda betik yürütmeyi etkinleştirir. Sayfa yüklendikten sonra 1,5 saniyelik bir duraklama ekleyen RenderDelay(1500), asenkron grafik renderlemesinin anlık görüntü alınmadan önce tamamlanması için zaman tanır. Chart.js seçeneklerinde animation: false ayarlanması, geçiş ortasındayken animasyonlu karelerin yakalanmasını önler.

Bu teknik, herhangi bir JavaScript kutuphanesiyle calısır. C# string interpolasyonu kullanarak sunucu tarafı verilerini <script> bloğuna geçirebilirsiniz, böylece her grafik üretim anında canlı veritabanı rakamlarını yansıtır. JavaScript yapılandırması hakkında daha fazla ayrıntı icin IronPDF'nin JavaScript işleme rehberine bakın.

Oluşturulan PDF'i Nasıl Ihraç Edip Teslim Edersiniz?

RenderHtmlAsPdf bir PdfDocument nesnesi döndüğünde, uygulama türünüze bağlı olarak birkaç teslimat seçeneğiniz olur. Diskte kaydetmek en basit yaklaşımdır ve ard plan paket islerinde calısır. Web API'leri ve MVC kontrolörleri icin, baytları doğrudan HTTP yanıtına aktarmak, gecici dosyaları yazmayı önler 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, ASP.NET Core'un File() sonucu ile doğrudan eşleşen byte[] olarak ham baytları döndürür. Tarayıcı, doğru MIME türünü (application/pdf) alır ve anlamlı bir dosya adı ile bir indirme iletişim kutucuğu tetikler.

Ek çıktı yetenekleri, PDF birleştirme, dijital imzalar, PDF/A arşiv formatı, parola koruması ve metin ve görüntü çıkarma dahil. Bu özellikler, ara dosyalar oluşturmadan işlemleri zincirlemenize olanak tanıyan, oluşturucu tarafından döndürülen aynı PdfDocument nesnesinde çalışır.

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 9 - Lisanslama

Sıradaki Adımlarınız Neler?

.NET'teki dinamik PDF üretimi, üç yapı taşına dayanır: verilerinizle değişen bir HTML stringi, bu stringi PDF'e dönüştürmek için ChromePdfRenderer ve uygulamanıza uygun teslimat mekanizması. IronPDF, aradaki her şeyi halleder -- sayfa kırılmaları, başlıklar ve altbilgiler, JavaScript çalıştırma ve çapraz platform uyumluluğu.

Okuma işlemlerinden oluşturma işlemlerine geçiş yapabilmek için, paketi yükleyerek ve yukarıdaki örneklerden birini kendi verilerinizle çalıştırarak başlayın.

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Oradan, platforma özel kurulum (Azure, Docker, Linux), gelişmiş işleme seçenekleri ve tam API referansı için IronPDF dokümantasyonunu keşfedin. Dağıtıma hazır olduğunuzda, üretim hacminize uygun bir planı seçmek için lisanslama sayfasını ziyaret edin. Ücretsiz deneme, kredi kartı gerekmeksizin tam özellikli erişim sağlar, bu da taahhütte bulunmadan önce uygulamanızı doğrulamanıza olanak tanır.

Dinamik jenerasyon ile iyi eşleşen ek rehberler:

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 6 - Çapraz platform uyumluluğu

Dinamik PDF Üretimi .NET'i IronPDF Kullanarak: Görsel 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 girişlerine dayalı PDF belgeleri oluşturmayı ifade eder.

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

IronPDF, geliştiricilerin iş mantığına odaklanarak HTML, resimler veya diğer kaynaklardan PDF oluşturmasına olanak tanıyarak karmaşık PDF render işlemlerini basitleştirir.

Dinamik PDF'ler oluştururken IronPDF kullanmanın avantajları nelerdir?

IronPDF kullanarak dinamik PDF oluşturmak, kişiselleştirme, gerçek zamanlı veri entegrasyonu ve .NET uygulamalarından doğrudan PDF belgeleri oluşturma sürecinde azalmış karmaşıklık sağlar.

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

Evet, IronPDF gerçek zamanlı verileri entegre ederek kişiselleştirilmiş faturalar oluşturabilir, bu da onu e-ticaret platformları için ideal kılar.

Hangi tür uygulamalar dinamik PDF oluşturmandan faydalanır?

E-ticaret platformları, raporlama sistemleri ve eğitim platformları gibi uygulamalar, kişiselleştirilmiş, gerçek zamanlı belgeler sunarak dinamik PDF oluşturmandan faydalanır.

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

Kesinlikle, IronPDF gerçek zamanlı verileri çekerek PDF raporları oluşturmaya yönelik tasarlanmıştır, bu da onu dinamik belge oluşturma için mükemmel kılar.

IronPDF PDF render işlemlerinin karmaşıklığını nasıl yönetir?

IronPDF, PDF render işlemlerinin karmaşıklıklarını soyutlayarak geliştiricilerin yüksek kaliteli PDF'ler oluştururken uygulamanın iş mantığına odaklanmasına olanak tanır.

IronPDF, eğitim sertifikalarını dinamik olarak üretebilir mi?

Evet, IronPDF, veri girişlerini kullanarak kişiselleştirilmiş ve profesyonel görünümlü sertifikalar üreterek eğitim sertifikalarını dinamik olarak oluşturabilir.

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ürmeye olanak tanıyarak HTML içeriğinden PDF oluşturmayı destekler.

IronPDF geliştiricilerin verimliliğini nasıl artırır?

IronPDF basit bir API sunarak PDF oluşturmayı kolaylaştırır ve dinamik belgeleri oluşturmak için gereken zaman ve çabayı azaltır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

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