Altbilgi içeriğine atla
IRONPDF KULLANARAK

IronPDF ile Azure'da PDF Generatorı Oluşturma (.NET 10 Rehberi)

[## Yalnızca Bilet Sisteminde Yaşayan Vaka Kayıtlarının Sorunu]

IronPDF ana sayfa [Bir düzenleyici soruşturması ulaştığında veya bir müşteri anlaşmazlığı hukuka yükseldiğinde, ilk istenilen şey, tam iletişim kaydıdır.] [Gerçekte var olan ise bir bilet sistemi oturum açmayı gerektiren bir web kullanıcı arayüzü, onlarca sayfaya yayılan bir ileti dizisi ve müşteri odaklı yanıtlarla karışık iç notlardır.] [Bunların hiçbiri bir düzenleyiciye sunulabilir veya bir anlaşmazlıkta delil olabilir.]

[Manuel çözümler, yavaş oldukları kadar hata yapmaya müsaittir.] [Bir destek yöneticisi zincirin her sayfasının ekran görüntüsünü alır ve bunları bir Word belgesine toplar.] [Bir temsilci, mesajları kronolojik sırayla bir e-postaya kopyalar ve yapıştırır.] [Bir geliştirici ham JSON'u bilet sisteminden dışa aktarır ve bir avukata verir ki avukat bunu yorumlayamaz.] [Altı aylık fatura anlaşmazlığı, üç görevli arasında yirmi mesaj alışverişiyle bir garanti talebi gibi uzun süren vakalar, tamamen elle yeniden düzenlenmesi neredeyse imkansızdır, girdilerin yanlış sıralanması veya eklerin düşürülmesi olmadan.]

[Uyumluluk boyutu, riskleri gerçek yapar.] [Bir düzenleyici soruşturmasına yanıt veren bir finansal hizmetler firması her müşteri iletişimini sırasıyla, zaman damgasıyla ve değiştirilemez şekilde alması gerekir.] [Bir sözleşme çekişmesinde bir SaaS şirketinin neyin söylendiğini ve ne zaman olduğunu göstermesi gerekir.] [Denetim altında bir sağlık hizmeti yardım masası, denetçilerin bir sistem yürüyüşüne gerek kalmadan okuyabileceği bir biçimde hasta etkileşim günlüklerine ihtiyaç duyar.] [Bir GDPR veri süjesi erişim talebini yerine getiren bir e-ticaret platformu, bu müşteri için tüm destek konuşmalarını dışa aktarmalıdır, sadece biri hatırladığı her şeyi değil.]

[Bilet sisteminin web kullanıcı arayüzü, arşiv biçimi değildir.] [Biri olmak zorundadır.]

[## Çözüm: Tam Konudan Oluşturulan Biçimlendirilmiş Vaka Transkripti]

[IronPDF, .NET uygulamalarının bir destek vaka geçmişini tamamen işleyerek yani her mesajı, iç notu, durum değişikliğini ve zaman damgasını biçimlendirilmiş, kendi içinde tam bir PDF transkriptine dönüştürmesine olanak tanır.] [Uygulama tam vaka dizisini almak için bilet veritabanını sorgular, yeni veya mevcut bir HTML dosya şablonunu doldurur, konuşmayı kronolojik sırayla, net gönderici etiketleri ve zaman damgaları ile sunar ve ChromePdfRenderer PDF'yi üretir.]

Sonuç, avukat, denetçi veya müşterinin bilet sistemine erişim sağlamadan veya veri yapısının açıklamasına ihtiyaç duymadan yorumlayabileceği, basılı bir konuşma günlüğü gibi okunan bir belge olur. Ekran görüntüleri yok, kopyala-yapıştır yok, ham veri dökümleri yok. Render işlemi, harici işlemler olmadan tek bir NuGet paketi olarak mevcut .NET uygulaması içinde çalışır.

Pratikte Nasıl Çalışır?

1. Başlatıcı, İhracatı Başlatır

İhracat üç şekilde başlatılabilir. Bir hukuk ekibi üyesi, belirli bir vaka ID'sine referans vererek, dahili bir bir yönetim aracında 'Davayı PDF formatında Dışa Aktar' seçeneğine tıklar. Bir uyumluluk iş akışı, yapılandırılmış bir saklama süresi sonrasında kapalı vakaları otomatik olarak arşivler. Veri öznesi erişim talebi, belirli bir müşteri hesabına bağlı tüm vakaların toplu dışa aktarımını tetikler.

Üç yol da aynı üretim mantığını tetikler, tetikleme mekanizması yalnızca hangi vaka Kimliklerinin buna beslendiğini belirler.

2. Veritabanından Sorgulanan Tam Dava Kaydı

Uygulama, dava Kimliği, konu, öncelik, durum geçmişi, oluşturulma ve çözüm tarihleri ve tamamıyla mesaj dizisini içeren eksiksiz dava kaydı için sorgu yapar. Mesaj dizisi, zaman damgalarına göre kronolojik olarak sıralanmış müşteri mesajlarını, ajan yanıtlarını, dahili notları ve durum geçişleri için sistem tarafından oluşturulan girişleri içerir.

Harici ihracatlar (müşteri GDPR istekleri, düzenleyici başvurular) için dahili notlar, herhangi bir render öncesinde sorgu düzeyinde hariç tutulur. Yasal keşifler ve dahili incelemeler için dahili notlar, müşteriyle yüz yüze içeriği belirgin bir şekilde ayıran görsel bir etiketle birlikte yer alır.

3. ChromePdfRenderer ile HTML'yi PDF'ye Dönüştürme

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

var messageHtml = string.Concat(caseRecord.Messages.Select(m => $@"
    <div class='message {m.SenderRole.ToLower()}' style='
        background:{(m.SenderRole == "Agent" ? "#f0f4ff" : m.SenderRole == "Internal" ? "#fff8e1" : "#fff")};
        border-left: 4px solid {(m.SenderRole == "Internal" ? "#f59e0b" : "#3b82f6")};
        margin-bottom:12px; padding:10px;'>
        <p style='margin:0; font-size:11px; color:#555;'>
            <strong>{m.SenderName}</strong> ({m.SenderRole}) — {m.SentAt:f}
        </p>
        <p style='margin-top:6px;'>{m.Body}</p>
    </div>"));

string html = $@"
    <h1 style='font-size:16px;'>Case #{caseRecord.CaseId}: {caseRecord.Subject}</h1>
    <p>Status: {caseRecord.Status} &nbsp;|&nbsp; Priority: {caseRecord.Priority}</p>
    <p>Opened: {caseRecord.CreatedAt:f} &nbsp;|&nbsp; Resolved: {caseRecord.ResolvedAt:f}</p>
    <hr/>
    {messageHtml}";

PdfDocument transcript = renderer.RenderHtmlAsPdf(html);

transcript.SaveAs($"transcripts/case-{caseRecord.CaseId}.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

var messageHtml = string.Concat(caseRecord.Messages.Select(m => $@"
    <div class='message {m.SenderRole.ToLower()}' style='
        background:{(m.SenderRole == "Agent" ? "#f0f4ff" : m.SenderRole == "Internal" ? "#fff8e1" : "#fff")};
        border-left: 4px solid {(m.SenderRole == "Internal" ? "#f59e0b" : "#3b82f6")};
        margin-bottom:12px; padding:10px;'>
        <p style='margin:0; font-size:11px; color:#555;'>
            <strong>{m.SenderName}</strong> ({m.SenderRole}) — {m.SentAt:f}
        </p>
        <p style='margin-top:6px;'>{m.Body}</p>
    </div>"));

string html = $@"
    <h1 style='font-size:16px;'>Case #{caseRecord.CaseId}: {caseRecord.Subject}</h1>
    <p>Status: {caseRecord.Status} &nbsp;|&nbsp; Priority: {caseRecord.Priority}</p>
    <p>Opened: {caseRecord.CreatedAt:f} &nbsp;|&nbsp; Resolved: {caseRecord.ResolvedAt:f}</p>
    <hr/>
    {messageHtml}";

PdfDocument transcript = renderer.RenderHtmlAsPdf(html);

transcript.SaveAs($"transcripts/case-{caseRecord.CaseId}.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25

Dim messageHtml = String.Concat(caseRecord.Messages.Select(Function(m) $"
    <div class='message {m.SenderRole.ToLower()}' style='
        background:{If(m.SenderRole = ""Agent"", ""#f0f4ff"", If(m.SenderRole = ""Internal"", ""#fff8e1"", ""#fff""))};
        border-left: 4px solid {If(m.SenderRole = ""Internal"", ""#f59e0b"", ""#3b82f6"")};
        margin-bottom:12px; padding:10px;'>
        <p style='margin:0; font-size:11px; color:#555;'>
            <strong>{m.SenderName}</strong> ({m.SenderRole}) — {m.SentAt:f}
        </p>
        <p style='margin-top:6px;'>{m.Body}</p>
    </div>"))

Dim html As String = $"
    <h1 style='font-size:16px;'>Case #{caseRecord.CaseId}: {caseRecord.Subject}</h1>
    <p>Status: {caseRecord.Status} &nbsp;|&nbsp; Priority: {caseRecord.Priority}</p>
    <p>Opened: {caseRecord.CreatedAt:f} &nbsp;|&nbsp; Resolved: {caseRecord.ResolvedAt:f}</p>
    <hr/>
    {messageHtml}"

Dim transcript As PdfDocument = renderer.RenderHtmlAsPdf(html)

transcript.SaveAs($"transcripts/case-{caseRecord.CaseId}.pdf")
$vbLabelText   $csharpLabel

IronPDF Örnek Çıkış PDF Belgesi

IronPDF örnek çıktısı Birçok mesaj içeren uzun davalar, çoklu sayfalar arasında doğal olarak akışkan bir şekilde ilerler, sayfa sınırı yoktur, düzeni bozan mesaj sayısı eşiği yoktur.

4. Başlık ve Altbilgi Her Sayfada Kaynağı Kurar

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <div style='font-size:9px; color:#555; width:100%; border-bottom:1px solid #ddd; padding-bottom:4px;'>
            Case #{caseRecord.CaseId} — Exported: {DateTime.UtcNow:u} UTC
        </div>",
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='font-size:9px; color:#555; text-align:center; width:100%;'>
            CONFIDENTIAL — Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <div style='font-size:9px; color:#555; width:100%; border-bottom:1px solid #ddd; padding-bottom:4px;'>
            Case #{caseRecord.CaseId} — Exported: {DateTime.UtcNow:u} UTC
        </div>",
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='font-size:9px; color:#555; text-align:center; width:100%;'>
            CONFIDENTIAL — Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true
};
HTML

Başlıklı ve Altbilgili Çıkış PDF Belgesi

Başlık/altbilgili PDF dosyası Her sayfadaki başlık dava Kimliğini ve ihracat zaman damgasını tanımlar, bu da tek bir sayfa geri kalandan ayrılırsa bile kaynağının açık ve net olmasını sağlar. Alt bilginin sayfa sayısı, bir belge bir incelemeciye teslim edildiğinde tamam olup olmadığını netleştirir.

Bir GDPR veri konusu isteği altındaki toplu ihracatlar için aynı üretim döngüsü her dava için çalışır ve PdfDocument.Merge() o müşteri için tüm davaları tek bir belgede birleştirir veya taleplerin işlem gereksinimine göre tekil dosyalar halinde bir zip içinde tutar.

Gerçek Dünya Faydaları

Yasal hazırlık. Tam bir vaka transkripti saniyeler içinde üretilir. Yasal veya bir düzenleyici iletişim kayıtları istediğinde, yanıt bir belge olur, ekran görüntülerini derleyip mesajları Word'e yapıştırmak için günü gününe bir çaba değil.

Değişmez kayıt. Üretilen PDF belgesi, ihracatta mevcut olan davanın bir zaman dilimi anlık görüntüsüdür. Üretimden sonra değiştirilemez, bu da onu bir keşif veya uyum denetimi belgesi olarak uygun hale getirir.

Okunabilir format. Biçimlendirilmiş bir konuşma günlüğü açıklama gerektirmez. Avukatlar, denetçiler ve müşteriler bunu, bir bilet sistemi kullanımı veya ham veri yorumu gerektirmeden gönderici, zaman damgası, mesaj gibi yazdırılmış bir e-posta dizisini okudukları şekilde okurlar.

Redaksiyon kontrolü. Dahili notlar HTML inşa edilmeden önce sorgu düzeyinde dahil edilir veya hariç tutulur. Aynı ihracat hattı hem yasal keşiflere (dahili notlar dahil tam kayıt) hem de müşteri görünürlüğü GDPR ihracatlarına (yalnızca müşteri görünür mesajlar) hizmet eder, şablon tekrarı yoktur.

Toplu ihracat. Veri konusu erişim talepleri programlı olarak işlenir, bir müşteri için tüm vakalar sorgulanır, oluşturulur ve tek bir partide teslim edilir. Manuel vaka bazında ihracat yoktur, bir vakayı kaçırma riski yoktur ve vaka sayısına bağlı geliştirici çabası yoktur.

İhracat başına maliyet yok. Rendering işlem sırasında çalışır. Üçüncü taraf ihracat API'lerinin ölçülmesi, belgesi başına ücret, büyük bir keşif talebini orantısız olarak pahalı hale getiren bir fiyatlandırma modeli yoktur.

Kapanış

Yalnızca bir biletleme UI'sında var olan bir destek vaka geçmişi, yasal, uyum veya bir müşteri bunun için talepte bulunduğunda bir yükümlülük haline gelir. Talep anında — veya vaka kapanışında otomatik olarak — biçimlendirilmiş bir PDF transkripti oluşturmak, bu yükümlülüğü organizasyonun gerçekten üretebileceği ve savunabileceği bir belgeye dönüştürür.

Hattın işleyişi basittir: tam diziyi sorgular, okunabilir bir HTML düzeni olarak oluşturur, kaynağı için başlık ve alt bilgi ekler ve dosyayı döndürür. IronPDF, PDF oluşturmanın C#'da full yaşam döngüsünü ironpdf.com adresinde, HTML şablonlarını render etmekten, belgeleri kaydetmeye, yayınlamaya ve işleme almaya kadar ele alır. Bir vaka ihracat özelliği oluşturuyorsanız veya mevcut birini güçlendiriyorsanız, ücretsiz 30 günlük denemenize başlayın ve çıktıyı bir sonraki yasal talebinizden önce kendi biletleme verilerinize karşı doğrulayın.

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