Altbilgi içeriğine atla
IRONPDF KULLANARAK

Aylık Hesap Ekstrelerini PDF Belgeleri olarak Oluşturma

Durağan ve Manuel Belge Teslimatının Sorunu

IronPDF ana sayfa Bir poliçe sahibi, geçerli beyanlar sayfasını sormak için aradığında veya bir banka müşterisi üç aylık bir özeti talep etmek için destek bileti oluşturduğunda, talep bir görevlinin masasının üzerine düşer. Bu kişi bir sistemi sorgular, bir belgeyi biçimlendirir ve tekrar e-posta ile gönderir, bazen aynı gün, bazen 48 saat sonra. Binlerce müşteri genelinde bu iş akışı ölçeklenmez ve ele aldığı her istek, bir self-servis portalının gereksiz hale getirmesi gereken bir durumdur.

Organizasyonların başvurdukları alternatifler genellikle bir sorunu bir diğeriyle değiştirir. Her gece bir programa göre her müşteri için PDF'ler önceden oluşturulması, belki de hiç indirilmeyecek bir belge dağı oluşturur ve her biri verilerin değiştiği anda eski hale gelir. Ödeme yöntemini güncelleyen veya kapsam katmanını değiştiren bir müşteri hesabını artık yansıtamayan bir PDF indirebilir ve yine de destek çağrısı yapabilir.

Üçüncü taraf belge oluşturma API'leri, isteğe bağlı işleme sunar ancak portal trafiği ile doğrudan ölçeklenen istek başına maliyetler ekler, ayrıca kullanıcıya yönelik bir eylemin kritik yolunda bir ağ bağımlılığı oluşturur. Ayda 200.000 bildirim indirmesi gönderen bir bankacılık portalı, bunu ölçülü bir API'de istemez.

Kullanıcının beklentisi basittir: doğru belgeyi hemen üreten bir "PDF indir" düğmesi. Bir sigorta poliçesi sahibinin beyanlar sayfasını indirmesi, bir hizmet müşterisinin son faturasını alması, bir SaaS yöneticisinin güncel bir abonelik raporu dışa aktarması, bir telekomünikasyon müşteri çağrı detay kaydını indirmesi, hepsi hemen bir sonuç beklemektedir, sıraya alınmış bir talep değil.

Çözüm: API Uç Noktasının İçinde İsteğe Bağlı İşleme

IronPDF, .NET web uygulamalarının bir kontrol cihazı eylemi veya minimal API uç noktasının içinde isteğe bağlı PDF dosyalarını oluşturmasına olanak tanır. Bir kullanıcı "PDF indir" düğmesine tıkladığında, sunucu veritabanından canlı verilerini alır, bir HTML şablonunu doldurur ve ChromePdfRenderer, PDF içeriğini bellekte işler. Yanıt, dosyayı doğrudan tarayıcıya bir indirme olarak aktarır, önceden oluşturma, bayat dosyalar veya destek sırası yoktur.

Belge, kullanıcının hesap verilerini talebin tam anında yansıtır. İşleme, var olan .NET uygulamasının içinde tek bir NuGet paketi olarak çalışır, harici işlemler yoktur, çağrılacak belge API'si yoktur, canlı tutmak için yan araba hizmeti yoktur ve izlenecek bir indirme başına maliyet yoktur.

Bir C# NuGet Kütüphanesi olarak çalıştığı için, IronPDF'yi kolayca NuGet Paket Yöneticisi aracılığıyla yükleyebilirsiniz. PDF oluşturmayı, yeni ve mevcut PDF dosyalarını düzenleme araçlarını, dijital imzalar ve şifreler gibi güvenlik uygulamalarını ve daha birçok kilit özelliği içerecek şekilde, IronPDF projelerinize eklemek için harika bir araçtır.

Pratikte Nasıl Çalışır?

1. Kullanıcı Portaldan "PDF Belgeyi İndir" Düğmesine Tıklar

Düğme, belge türünü ve kullanıcının seçtiği her türlü parametreleri, bildirim dönemi, poliçe numarası, tarih aralığını bir API uç noktasına getirir. Uç nokta, önceki kimliği ve talep edilen belgeye hak kazanmayı doğrulayan isteği öncelikle doğrular.

Yetkilendirme burada isteğe bağlı değildir. Kendi bildirimini talep eden bir müşteri kabul edilebilir; başka bir müşteri için bir belge talep eden müşteri kabul edilemez. Uç nokta, kimliği doğrulanmış kullanıcının istedikleri belge ID'sine veya parametrelere hak kazanıp kazanmadığını, veri sorulası yapılmadan önce doğrulamalıdır.

Örnek Portal Görünümü

PDF'imizi oluşturmak için örnek buton

2. Canlı Veriler HTML İçeriğini İçeren Şablonu Doldurur

Eylem metodu kullanıcı hesabı detayları, satır öğeleri, bakiyeler, poliçe şartları, kapsam seçimleri ve kullanım metrikleri gibi kullanıcıya ait mevcut verileri almak için veritabanını sorgular ve belge türüne özel bir HTML şablonuna doldurur. Şablon müşterinin adı ve hesap numarasını, belge tarihini, tüm ilişkili satır öğelerini, şirket markasını ve gereken yasal uyarı metnini alt bilgiye ekler.

Farklı bir HTML şablonu, her belge türünü ele alır: poliçe özeti, hesap dökümü, ödeme makbuzu, hepsi aynı kontrol cihazı ve üretim hattı üzerinden işlenir.

3. ChromePdfRenderer HTML'yi PDF'ye Dönüştürür ve Dosyayı Döndürür

using IronPdf;

[HttpGet("portal/documents/statement")]
[Authorize]
public IActionResult DownloadStatement([FromQuery] string period)
{
    var userId = User.GetUserId();
    var data = _accountService.GetStatementData(userId, period);

    string html = $@"
        <h1>Account Statement — {data.Period}</h1>
        <p><strong>Account:</strong> {data.AccountNumber}</p>
        <p><strong>Name:</strong> {data.CustomerName}</p>
        {data.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {data.ClosingBalance:C}</p>";

    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.MarginTop = 20;

    renderer.RenderingOptions.MarginBottom = 20;

    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf",
        $"Statement-{data.Period}-{data.AccountNumber}.pdf");

}
using IronPdf;

[HttpGet("portal/documents/statement")]
[Authorize]
public IActionResult DownloadStatement([FromQuery] string period)
{
    var userId = User.GetUserId();
    var data = _accountService.GetStatementData(userId, period);

    string html = $@"
        <h1>Account Statement — {data.Period}</h1>
        <p><strong>Account:</strong> {data.AccountNumber}</p>
        <p><strong>Name:</strong> {data.CustomerName}</p>
        {data.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {data.ClosingBalance:C}</p>";

    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.MarginTop = 20;

    renderer.RenderingOptions.MarginBottom = 20;

    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf",
        $"Statement-{data.Period}-{data.AccountNumber}.pdf");

}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

<HttpGet("portal/documents/statement")>
<Authorize>
Public Function DownloadStatement(<FromQuery> period As String) As IActionResult
    Dim userId = User.GetUserId()
    Dim data = _accountService.GetStatementData(userId, period)

    Dim html As String = $"
        <h1>Account Statement — {data.Period}</h1>
        <p><strong>Account:</strong> {data.AccountNumber}</p>
        <p><strong>Name:</strong> {data.CustomerName}</p>
        {data.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {data.ClosingBalance:C}</p>"

    Dim renderer As New ChromePdfRenderer()

    renderer.RenderingOptions.MarginTop = 20

    renderer.RenderingOptions.MarginBottom = 20

    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

    Return File(pdf.BinaryData, "application/pdf", $"Statement-{data.Period}-{data.AccountNumber}.pdf")
End Function
$vbLabelText   $csharpLabel

Örnek Çıkış PDF Dosyası

IronPDF örnek çıktısı Bir dosya adı ile File(), Tarayıcıyı dosyayı kaydetmesi için otomatik olarak yönlendirir. PDF asla diske yazılmaz, bellekte oluşturulur ve yanıt olarak doğrudan aktarılır.

4. Tekrarlanan İndirmeler için Opsiyonel Önbellekleme

Verilerin nadiren değiştiği belge türleri için, yenileme sırasında güncellenen bir poliçe beyanlar sayfası gibi, bir önbellekleme katmanı aynı PDF'yi birden fazla kez yeniden işlemekten kaçınabilir:

var dataHash = _accountService.GetStatementDataHash(userId, period);

string cacheKey = $"statement/{userId}/{period}/{dataHash}";

byte[] pdfBytes = await _cache.GetAsync(cacheKey);

if (pdfBytes == null)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    pdfBytes = pdf.BinaryData;

    await _cache.SetAsync(cacheKey, pdfBytes,
        new DistributedCacheEntryOptions
        {
            AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24)
        });
}

return File(pdfBytes, "application/pdf", $"Statement-{period}.pdf");
var dataHash = _accountService.GetStatementDataHash(userId, period);

string cacheKey = $"statement/{userId}/{period}/{dataHash}";

byte[] pdfBytes = await _cache.GetAsync(cacheKey);

if (pdfBytes == null)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    pdfBytes = pdf.BinaryData;

    await _cache.SetAsync(cacheKey, pdfBytes,
        new DistributedCacheEntryOptions
        {
            AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24)
        });
}

return File(pdfBytes, "application/pdf", $"Statement-{period}.pdf");
Imports System
Imports System.Threading.Tasks
Imports IronPdf

Dim dataHash = _accountService.GetStatementDataHash(userId, period)

Dim cacheKey As String = $"statement/{userId}/{period}/{dataHash}"

Dim pdfBytes As Byte() = Await _cache.GetAsync(cacheKey)

If pdfBytes Is Nothing Then
    Dim renderer As New ChromePdfRenderer()
    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

    pdfBytes = pdf.BinaryData

    Await _cache.SetAsync(cacheKey, pdfBytes, New DistributedCacheEntryOptions With {
        .AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24)
    })
End If

Return File(pdfBytes, "application/pdf", $"Statement-{period}.pdf")
$vbLabelText   $csharpLabel

Önbellek anahtarı yalnızca kullanıcı id'si ve dönemi değil alttan gelen verilerin hash'ini de içerir. Veriler değişirse, geç ödeme gönderilirse, bir kredi uygulanırsa, hash değişir, önbellek kaçırılır ve sonraki indirme mevcut verilerden yeniden işlenir. Müşteri asla bayat bir belge indirmez.

Gerçek Dünya Faydaları

Her zaman güncel. Belgeler taleplerin anında canlı verilerden oluşturulur. Veri değişiklikleri ve belge içeriği arasında herhangi bir senkron gecikme yoktur, müşteri hesap bilgilerini hemen güncelleyen bir müşteri, hemen yansıyan bir PDF indirir.

Sıfır destek yükü. Kendi poliçesini, bildirimini veya mektubunu indiren müşteriler, onları talep etmeleri için bilet oluşturmazlar. İndirme düğmesi, istek başına zaman alan bir destek iş akışının yerini alır.

Saklama şişkinliği yok. PDF'ler isteğe bağlı olarak oluşturulur ve tarayıcıya aktarılır. Her müşteri için her fatura döngüsünde belgelerin önceden oluşturulması ve saklanmasına gerek yoktur, saklama maliyetleri müşteri tabanıyla ölçeklenmez.

Hızlı yanıt süreleri. ChromePdfRenderer tipik bir portal belgesi üretir: tek sayfalık bildirim, poliçe özeti, ödeme makbuzu, milisaniyeler içinde. Kullanıcı neredeyse anında bir indirme deneyimi yaşarken bir ilerleme göstergesi yerine.

Marka tutarlılığı. Her belge türünün onaylanmış bir HTML ve CSS şablonu vardır. Her indirilen PDF, hangi uç noktanın isteği işlediğine veya ne zaman oluşturulduğuna bakılmaksızın aynı logoyu, tipografiyi, düzeni ve yasal uyarıları taşır.

Belge başına maliyet yok. İşleme, web uygulamasının içinde işlemiçi olarak gerçekleşir. Üçüncü taraf API ölçümü, kullanım tabanlı fiyatlandırma yok ve portal trafiği ile büyüyen altyapı faturasında bir satır öğesi yok.

Kapanış

İsteğe bağlı bir PDF indirme, orantısız etki yaratan küçük bir özelliktir. Tamamen destek istek sınıfını ortadan kaldırır, müşterilerin bayat belgelere dayalı hareket riskini azaltır ve manuel teslimat iş akışını birkaç yüz milisaniyeyi alan bir şeyle değiştirir.

Uygulama, tek bir kontrolör eylemine sığar, bir veritabanı sorgusu, bir HTML şablonu, bir işleme çağrısı ve bir dosya yanıtı. IronPDF, HTML şablonlarının işlenmesinden belgelerin kaydedilmesi, akıtılması ve işlenmesine ironpdf.com adresinde C#'ta tam PDF üretim döngüsünü idare eder. 30 günlük ücretsiz deneme, kendi portalınız ve verileriniz üzerinde isteğe bağlı indirme uç noktasını oluşturmak ve test etmek için yeterli zamanı verir.

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