IRONSOFTWAREHOME
IRONPDF KULLANARAK

Dotnet Core'da PDF Dosyalari Nasıl Oluşturulur: Şekil 1 - HTML'den PDF'ye cikti PDF dosyasi

Curtis Chau
Curtis Chau
Updated: 5 Temmuz 2026

ASP.NET Core'da HTML içeriğini şık PDF'lere dönüştürerek ve bunları doğrudan tarayıcıya aktararak dinamik olarak profesyonel PDF belgeleri oluşturun. Disk depolaması gerekmez, geçici dosya yönetimi yoktur.

ASP.NET Core'da modern web uygulamaları geliştirirken, ihtiyaca göre PDF belgeleri oluşturabilme yeteneği, tekrarlayan bir gereksinimdir. Faturalar, bir ödeme onaylandığında indirilmelidir. Uyumluluk raporları, bir denetçi 'Dışa Aktar'ı tıkladığında anında görünmelidir. Kullanıcı bir şeylerin yanlış gidip gitmediğini düşünmeden önce sertifikalar hazır olmalıdır. IronPDF, HTML'yi - CSS, JavaScript ve web yazı tipleri dahil - diske hiçbir şey yazmadan piksel hassasiyetinde PDF çıktısına dönüştüren Chromium tabanlı PDF kütüphanesi aracılığıyla tüm bu senaryoları ele alır.

Bu kılavuz, bilmeniz gereken her şeyi kapsar: kütüphaneyi kurmak, HTML dizelerinden faturalar oluşturmak, Entity Framework verilerinden raporları iletmek, sayfa başlıklarını ve güvenlik ayarlarını uygulamak ve yüksek trafikli ASP.NET uygulamalarının iyi performans göstermesini sağlamak için en iyi uygulamaları benimsemek.

PDF'leri Anında Oluşturmak Ne Anlama Gelir?

"Anında" demek, belgenin HTTP isteği anında bellekte oluşturulduğu ve doğrudan çağrıya gönderildiği anlamına gelir. Hiçbir PDF dosyası dosya sistemine yazılmaz, hiçbir arka plan işi çalışma sırasına alınmaz ve istekler arasında sonucu saklayacak bir önbellek yoktur.

Bu yaklaşımın birkaç nedeni vardır. İlk olarak, bulut dağıtım hedefleri - Azure App Service, AWS Lambda, Docker kapsayıcıları - genellikle yerel dosya sisteminin geçici veya salt okunur olduğu ortamlarda çalışır. Bir PDF'yi geçici bir klasöre yaratmak ve ardından geri okumak bu ortamlarda kırılgandır. İkincisi, disk yazmalarından kaçınmak saldırı yüzeyini azaltır: sonrasında bir istek tarafından yanlış kullanıcıya yanlışlıkla sunulabilecek kalıntı dosya yoktur. Üçüncüsü, yalnızca bellek üzerinde gerçekleştirilen oluşturma tipik olarak daha hızlıdır çünkü kritik yol üzerindeki iki I/O işlemini (yazma ve okuma) ortadan kaldırır.

IronPDF'nin ChromePdfRenderer, her oluşturulan dokümanda .BinaryData özelliği ve .Stream özelliği sağlar. Bunlardan herhangi biri doğrudan bir ASP.NET Core FileResult'a iletilebilir, bu da akışı pratikte tek satıra indirir.

İlk Adım:
arrow pointer

IronPDF'i bir ASP.NET Core Projesinde Nasıl Kurarsınız?

NuGet paketini Paket Yöneticisi Konsolu veya .NET CLI yoluyla ekleyin:

PM > Install-Package IronPdf

Paket yüklendikten sonra uygulama başlangıcında lisans anahtarınızı ayarlayın -- genellikle ilk render oluşturulmadan önce Program.cs içinde:

using IronPdf;

// Place license activation before any IronPDF call
License.LicenseKey = "YOUR-LICENSE-KEY";

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();

// Register ChromePdfRenderer as a singleton so the Chromium engine
// is initialised once and reused across all requests.
builder.Services.AddSingleton<ChromePdfRenderer>();

var app = builder.Build();
app.MapDefaultControllerRoute();
app.Run();

ChromePdfRenderer'yi singleton olarak kaydetmek önemlidir. Render işlemi ilk kullanıldığında dahili bir Chromium alt süreci başlatır. Her istek için yeni bir örnek oluşturursanız, bu başlangıç süresi artışını her çağrıda ödersiniz, bu da yük altında yüzlerce milisaniye gecikme ekler. Bir singleton örneği iş parçacığı güvenliğindedir ve ek yapılandırma gerekmeden eş zamanlı render isteklerini ele alır.

Özel beslemeler için NuGet.config kurulumları dahil genişleyen kurulum seçeneklerine göz atmak için kurulum genel bakışını ziyaret edin.

Bir HTML Dizesinden Fatura PDF'si Nasıl Oluşturursunuz?

Anında gerçekleştirme için en yaygın kullanım durumu, e-ticaret belgelerinin - faturalar, makbuzlar, sipariş onayları - oluşturulmasıdır; burada içerik her isteğe göre değişirken düzen sabit kalır.

Desen şudur: veri içeren bir HTML dizesi oluşturun, bunu RenderHtmlAsPdf'a iletin ve ikili sonucu bir dosya indirmesi olarak döndürün.

using IronPdf;
using Microsoft.AspNetCore.Mvc;

public class DocumentController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public DocumentController(ChromePdfRenderer renderer)
    {
        _renderer = renderer;
    }

    [HttpGet("invoice/{orderId:int}")]
    public IActionResult GetInvoice(int orderId)
    {
        // In a real application, fetch this from your database or order service.
        var order = GetOrderData(orderId);

        string html = $"""
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="utf-8">
                <style>
                    body  {{font-family: Arial, sans-serif; margin: 40px; color: #333;}}
                    h1   {{color: #1a56db;}}
                    table {{width: 100%; border-collapse: collapse; margin-top: 24px;}}
                    th, td {{padding: 10px 14px; border: 1px solid #d1d5db; text-align: left;}}
                    th   {{background: #f3f4f6;}}
                    tfoot td {{font-weight: bold;}}
                </style>
            </head>
            <body>
                <h1>Invoice #{order.InvoiceNumber}</h1>
                <p>Date: {DateTime.UtcNow:yyyy-MM-dd} &nbsp;|&nbsp; Customer: {order.CustomerName}</p>
                <table>
                    <thead><tr><th>Item</th><th>Qty</th><th>Unit Price</th><th>Subtotal</th></tr></thead>
                    <tbody>
                        {string.Join("", order.Items.Select(i =>
                            $"<tr><td>{i.Name}</td><td>{i.Quantity}</td>" +
                            $"<td>${i.UnitPrice:F2}</td><td>${i.Quantity * i.UnitPrice:F2}</td></tr>"))}
                    </tbody>
                    <tfoot>
                        <tr><td colspan="3">Total</td><td>${order.Items.Sum(i => i.Quantity * i.UnitPrice):F2}</td></tr>
                    </tfoot>
                </table>
            </body>
            </html>
            """;

        var pdf = _renderer.RenderHtmlAsPdf(html);
        return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
    }
}
C#

RenderHtmlAsPdf, Google Chrome'u güçlendiren aynı Chromium motorunu kullanarak tam HTML dokümanını işler -- CSS grid, Flexbox, web yazı tipleri, hatta satır içi SVG. Dönen PdfDocument, BinaryData (bir byte[]) ve Stream (bir MemoryStream) sağlar. BinaryData'yi File() ile "application/pdf" ve bir dosya adı ile geçirerek bir tarayıcı indirmesini tetikler.

Piksel mükemmelliğinde sadakat gerektiren düzenler için, duyarlı CSS, özel yazı tipleri ve JavaScript render işlemi üzerine bilgi veren HTML'den PDF'ye render kılavuzuna bakın.

Oluşturulan Fatura PDF'si Nasıl Görünür?

Professional PDF invoice showing Invoice #123 dated 2025-11-13 with a styled header section, organized table containing Product A ($10.99) and Product B ($5.49), demonstrating dynamic PDF generation capabilities with custom CSS styling

Bir PDF'yi İndirme Diyalogu Olmadan Doğrudan Tarayıcıya Nasıl Aktarırsınız?

Bir PDF'yi satır içi olarak sunmak -- tarayıcının yerleşik görüntüleyicisinde açılması yerine indirilmesi -- iki küçük değişiklik gerektirir: Content-Disposition değerini inline olarak ayarlayın ve File() çağrısından dosya adını çıkarın.

[HttpPost("report/preview")]
public async Task<IActionResult> PreviewReport([FromBody] ReportRequest request)
{
    string html = BuildReportHtml(request);

    var pdfDocument = await _renderer.RenderHtmlAsPdfAsync(html);

    // "inline" tells the browser to display rather than download.
    Response.Headers["Content-Disposition"] = "inline; filename=report.pdf";

    return new FileContentResult(pdfDocument.BinaryData, "application/pdf");
}

Asenkron aşırı yük RenderHtmlAsPdfAsync kullanılması ASP.NET Core denetleyicileri için önerilir çünkü Chromium render yaparken thread havuzu thread'ini serbest bırakır ve sunucuyu eşzamanlı yük altında tepki verebilir halde tutar.

Bellek Tabanlı PDF Oluşturma Nasıl Çalışır?

Gerçek iş dünyası belge oluşturmayı gösteren biçimlendirilmiş içerikle birlikte 'Aylık Performans İncelemesi' başlığını gösteren oluşturulmuş PDF raporu, HTML şablonundan işlenmiş grafikler, metrikler ve detaylı analiz bölümleri

pdfDocument.BinaryData bayt dizisi tamamen yönetilen bellekte yaşar. Ara yol dosyası yer almaz. Content-Disposition başlığı PDF'nin satır içi görüntülenip görüntülenmeyeceğini veya indirme olarak sunulup sunulmayacağını kontrol eder -- bu, HTTP spesifikasyonu tarafından tanımlanan bir tarayıcı davranışıdır. Azure Blob Storage için yayılmasına dahil incelemek üzerine, Hafıza Akışı yaklaşımına daha derinlemesine bakmak için PDF hafıza akışı belgelerini ziyaret edin.

Entity Framework Core Sorgu Sonuçlarından PDF'ler Nasıl Oluşturulur?

Çoğu iş uygulaması, verileri çağrı zamanında oluşturmak yerine bir veritabanından alır. Aşağıdaki desen, Entity Framework Core'i sorgular, bir HTML tablosu oluşturur ve bir PDF döndürür - hepsi tek bir denetleyici eylemi içinde.

[HttpGet("report/monthly")]
public async Task<IActionResult> MonthlyReport(int year, int month)
{
    // Pull aggregated transaction data from EF Core.
    var rows = await _dbContext.Transactions
        .Where(t => t.Date.Year == year && t.Date.Month == month)
        .GroupBy(t => t.Category)
        .Select(g => new { Category = g.Key, Count = g.Count(), Total = g.Sum(t => t.Amount) })
        .OrderByDescending(g => g.Total)
        .ToListAsync();

    string tableRows = string.Join("", rows.Select(r =>
        $"<tr><td>{r.Category}</td><td>{r.Count}</td><td>${r.Total:F2}</td></tr>"));

    string html = $"""
        <html><body style="font-family:Arial,sans-serif;padding:32px">
        <h1>Monthly Report -- {month:D2}/{year}</h1>
        <table style="width:100%;border-collapse:collapse">
          <thead>
            <tr style="background:#e5e7eb">
              <th style="padding:8px;border:1px solid #d1d5db">Category</th>
              <th style="padding:8px;border:1px solid #d1d5db">Transactions</th>
              <th style="padding:8px;border:1px solid #d1d5db">Total</th>
            </tr>
          </thead>
          <tbody>{tableRows}</tbody>
        </table>
        </body></html>
        """;

    var pdf = _renderer.RenderHtmlAsPdf(html);
    pdf.MetaData.Title  = $"Monthly Report {month:D2}/{year}";
    pdf.MetaData.Author = "Reporting System";

    return File(pdf.BinaryData, "application/pdf", $"report-{year}-{month:D2}.pdf");
}

pdf.MetaData.Title ve pdf.MetaData.Author ayarlamak, bu bilgiyi PDF'nin doküman özelliklerine gömer, ki bu uyumluluk takibi ve doküman yönetim sistemleri için kullanışlıdır. Daha karmaşık rapor düzenleri için, CSS yazdırma stillerini, açık sayfa kırılmaları ve gömülü grafik görüntüleri seçeneğini düşünebilirsiniz.

Oluşturulan PDF'lere Başlık, Altbilgi ve Güvenlik Nasıl Uygulanır?

Üretim belgelerinde genellikle belge başlığı ile çalışan başlıklar, sayfa numarası altbilgileri ve yetkisiz baskı veya kopyalamayı önleyebilecek erişim kontrolleri gerekir. IronPDF'nin ChromePdfRenderOptions tüm bu gereksinimleri kapsar.

[HttpPost("document/secured")]
public async Task<IActionResult> GenerateSecuredDocument([FromBody] SecuredDocRequest request)
{
    var renderOptions = new ChromePdfRenderOptions
    {
        PaperSize       = PdfPaperSize.A4,
        MarginTop       = 45,
        MarginBottom    = 45,
        MarginLeft      = 25,
        MarginRight     = 25,
        EnableJavaScript = true,
        WaitFor         = new WaitFor { RenderDelay = 500 }
    };

    renderOptions.TextHeader = new TextHeaderFooter
    {
        CenterText       = request.DocumentTitle,
        DrawDividerLine  = true,
        FontSize         = 11
    };

    renderOptions.TextFooter = new TextHeaderFooter
    {
        LeftText  = "{date} {time}",
        RightText = "Page {page} of {total-pages}",
        FontSize  = 9
    };

    _renderer.RenderingOptions = renderOptions;

    var pdf = await _renderer.RenderHtmlAsPdfAsync(request.HtmlContent);

    if (request.RequirePassword)
    {
        pdf.SecuritySettings.OwnerPassword         = request.OwnerPassword;
        pdf.SecuritySettings.UserPassword          = request.UserPassword;
        pdf.SecuritySettings.AllowUserPrinting     = PdfPrintSecurity.NoPrint;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    }

    return File(pdf.BinaryData, "application/pdf", $"{request.FileName}.pdf");
}

WaitFor.RenderDelay ayarı, özellikle HTML'niz Chart.js veya ApexCharts gibi asenkron olarak çizimlerini tamamlayan grafik kütüphanelerini içerdiğinde faydalıdır. 300-500 ms'lik bir gecikme ayarlanması, Chromium'un son render edilmiş durumu yakaladığını garanti eder. Arşiv standartlarını karşılamak gereken belgeler için, yukarıdaki yaklaşımı PDF/A uyumluluğu ve dijital imzalar ile birleştirin.

Alt bilgideki {page} ve {total-pages} jetonları, render zamanında IronPDF tarafından otomatik olarak çözülür. Ek başlık ve alt bilgisi seçenekleri, logo yerleşimi için HTML tabanlı başlıklar ve bölüm başına geçersiz kılma yeteneklerini içerir.

Hangi Render Seçenekleri Mevcuttur?

Aşağıdaki tablo, anlık oluşturma için en kullanışlı ChromePdfRenderOptions özelliklerini özetlemektedir:

Sık Kullanılan ChromePdfRenderOptions Özellikleri
ÖzellikTürAmaç
PaperSizePdfPaperSizeSayfa boyutlarını ayarlar (A4, Mektup, Yasal, özel)
MarginTop / MarginBottomint (mm)Baskı alanı boşluk kontrolü
EnableJavaScriptboolJavaScript yürütümüne çekilmeden önce izin verir
WaitFor.RenderDelayint (ms)Asenkron işleme için yakalamayı geciktirir
TextHeader / TextFooterTextHeaderFooterÇalışan sayfa başlıkları ve altbilgileri
HtmlHeader / HtmlFooterHtmlHeaderFooterGörüntülerle HTML formatlı başlıklar/altbilgiler
GrayScaleboolMonokrom PDF çıktılar
FitToPaperWidthboolGeniş içeriği sayfaya sığacak şekilde ölçekler

Yüksek Hacimli PDF Oluşturma İçin Performans En İyi Uygulamaları Nelerdir?

Tek bir sunucu yüzlerce eş zamanlı PDF isteği ele aldığında, birkaç mimari karar tahmin ve gecikme süresi üzerinde olağanüstü etkiler yaratır.

Singleton renderer kaydı. Kurulum bölümünde gösterildiği gibi, ChromePdfRenderer'yi DI konteynerde singleton olarak kaydetmek, talep başına yeni bir Chromium alt sürecinin başlatılmasının maliyetini önler. Microsoft'un ASP.NET Core performans kılavuzuna göre, nesne tahsislerinin en aza indirilmesi ve pahalı kaynakların yeniden kullanılması mevcut en etkili optimizasyonlardır.

Her zaman asenkron kullanın. RenderHtmlAsPdfAsync bir Task<PdfDocument> döndürür ve Chromium çalışırken denetleyici thread'ini askıya alır. Bu, iş parçacığı havuzunu diğer gelen isteklerle paralel olarak ele almaya serbest bırakır, bu yüzden async belgelendirmesi, web sunucuları için bu overload'u önerir. Eşzamanlı overload, yalnızca iş parçacığı bloklamanın kabul edilebilir olduğu konsol araçları veya arka plan hizmetleri için uygundur.

Doğrudan aktarım yapın, mümkünse ara diziyi atlayın. Büyük PDF dosyaları için .Stream, tam bayt dizisi materyalize edilmeden yanıt gövdesine doğrudan yazılabilir:

[HttpGet("document/large")]
public IActionResult StreamLargeDocument(int documentId)
{
    string html = BuildLargeDocumentHtml(documentId);
    var pdf = _renderer.RenderHtmlAsPdf(html);

    // Stream.Position is already at 0; no seek needed.
    return File(pdf.Stream, "application/pdf", $"document-{documentId}.pdf");
}

Kullanımdan sonra atıl. PdfDocument, IDisposable uygular. Bir using ifadesi içinde sarmak, temel bellek tamponunu hemen serbest bırakır, bu durum art arda birçok büyük PDF oluştururken önemlidir:

using var pdf = _renderer.RenderHtmlAsPdf(html);
byte[] data = pdf.BinaryData;
// pdf is disposed here; data is safely copied to the local array.
return File(data, "application/pdf", "output.pdf");

Azure, AWS, Docker ve Linux ortamlarını kapsayan bulut dağıtım rehberi için, ortam özel yapılandırma notları sunan IronPDF belgelerinde bulunabilir. Başlatma sonrası ilk render yavaşsa, ısıtma ve önbellekleme kılavuzu'na bakın; ilk kullanıcı isteği gelmeden önce render yapıcıyı önceden başlatma stratejileri için.

Oluşturulan PDF'ye Nasıl Filigran Eklersiniz?

Oluşturulan belgenin her sayfasına metin veya görüntü filigranı eklenebilir:

[HttpGet("document/draft/{id:int}")]
public IActionResult GetDraftDocument(int id)
{
    string html = BuildDocumentHtml(id);
    var pdf = _renderer.RenderHtmlAsPdf(html);

    // Stamp "DRAFT" diagonally across every page.
    pdf.ApplyWatermark(
        "<h1 style='color:rgba(200,0,0,0.25);transform:rotate(-45deg)'>DRAFT</h1>",
        rotation: 45,
        opacity: 30
    );

    return File(pdf.BinaryData, "application/pdf", $"draft-{id}.pdf");
}

Resim filigranları ve sayfa başına kontrol dahil tam filigran yapılandırma seçenekleri için filigran belgelerine bakın.

NuGetNuGet ile yükleyin

PM > Install-Package IronPdf

Install IronPDF by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

Sonraki Adımlarınız Neler?

ASP.NET Core'da dinamik PDF oluşturma tutarlı bir deseni izler: HTML'inizi oluşturun, RenderHtmlAsPdf veya onun asenkron aşımını çağırın ve sonucu bir FileResult ile dönüş yapın. IronPDF, disk I/O gerektirmeksizin -- Chromium render işlemi, CSS uygulaması, JavaScript yürütmesi -- arasındaki her şeyi ele alır.

Buradan, uygulama gereksinimlerinize bağlı olarak keşfedebileceğiniz birkaç yön var. PDF'lerinizin birden fazla kaynak belgeyi birleştirmesi gerekiyorsa, birleştirme ve ayırma kılavuzu, mevcut PDF'leri taze oluşturulmuş sayfalarla birleştirmeyi kapsar. Kullanıcıların bir PDF içinde gömülü formları doldurup göndermesi gerekiyorsa, etkileşimli formlar belgeleri alan değerlerini nasıl oluşturup okuyacağını gösterir. Düzenlemeye tabi sektörler için, PDF/A uyumluluğu ve PDF/UA erişilebilirliği belgelerin arşiv ve erişilebilirlik standartlarını karşıladığını garanti eder.

IronPDF'i alternatiflerine karşı değerlendiriyorsanız, iText vs IronPDF karşılaştırması yan yana teknik bir analiz sunar. Üretime geçmeye hazır olduğunuzda, tüm özellikleri açmak ve öncelikli mühendislik desteğine erişim sağlamak için bir lisans satın alın. Tam API referansı bu kılavuzda tartışılan her sınıf ve yöntemi belgeler.

Uygulama sırasında sorular veya sorunlar için, mühendislik destek ekibi yardım için hazırdır. Blazor Server veya MAUI hakkında platform özel notları için, her barındırma modeli için yapılandırma farklılıklarını kapsayan özel rehberler vardı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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez