Altbilgi içeriğine atla
IRONPDF KULLANARAK

Yönetici Panoları için Tek Tıklama ile PDF Dışa Aktarımı C#

Gösterge Tablolarını Dışa Aktarma Problemi

IronPDF anasayfası İç gösterge panoları, bir web tarayıcısında görüntülenmek üzere oluşturulmuştur. Biri bunu dışa paylaşmak istediği anda: bir yönetim kurulu toplantı destesi, liderlik ekibi için haftalık bir KPI anlık görüntüsü veya bir uyumluluk denetim raporu, işler çabucak dağılır.

Tarayıcıdan PDF'ye yazdırma insanların denediği ilk ve başarısız olan ilk şeydir. Sayfalar grafiklerin ve kenar çubuklarının üzerinde kırılır, hareket çubukları tasarıma sızar ve sonuçtaki PDF, canlı panel görünümüyle hiçbir şekilde benzerlik göstermez. Ekran görüntüleri daha kötüdür: çözünürlük A4'e ölçeklendiğinde bozulur, metin aranabilir değildir ve çok bölümlü bir KPI görünümü, verilere yarısının kaybolmadan tek bir görüntüde nadiren sığabilir.

Daha derin problem JavaScript ile oluşturulan grafikleri içerir. Chart.js, ApexCharts ve Highcharts, HTML öğesine eş zamanlı olarak çizer, yerel HTML'den PDF anlık resmi genellikle boş bir tuvali yakalar. HTML içeriği DOM'da vardır ancak görselleştirme yoktur. İşte IronPDF bu noktada devreye girer.

Sonuç olarak, bir geliştirici her Pazartesi manuel olarak bir raporu çekip formatlaması istenen bir mesaj ikonu alır. Bu, ölçeklenebilir bir iş akışı değildir. Bugün, IronPDF örneğine bakarak HTML içeriğinden nasıl PDF belgeleri oluşturabileceğini göreceğiz.

Çözüm: IronPDF ile Sunucu Taraflı Gösterge Panosu Rendesi

IronPDF, gösterge panelinizi güçlendiren aynı HTML'yi piksel mükemmeliğinde bir PDF belgeye dönüştürür. Kullanıcı "PDF'ye Aktar" düğmesine tıklar (belki mavi çemberde bir anahtarla işaretlenmiş veya çemberde mavi anahtar), API uç noktası HTML dönüştürme mantığını işler ve tarayıcı PDF içeriğini indirir.

Yayımlanacak herhangi bir Puppeteer yedek aracı, yönetilecek wkhtmltopdf ikili dosyası ve ücretli izlenmesi gereken üçüncü taraf dışa aktarma API'sı bulunmaz. IronPDF, mevcut ASP.NET uygulamanız içinde PDF görevleri için bir C# NuGet kütüphanesi olarak çalışır. Chromium motorunu JavaScript'i gerçek bir tarayıcı gibi çalıştıracak şekilde içerir, bu da Chart.js ve ApexCharts'ın sayfa yakalanmadan önce doğru şekilde render edildiği anlamına gelir.

Dışa aktarma düğmesi herhangi bir iş kullanıcısının, geliştiriciyi döngüye dahil etmeden çalıştırabileceği bir kendi hizmeti özelliği olur.

Nasıl Çalışır: Uygulamada

1. Kullanıcı "PDF'ye Aktar" Düğmesine Tıklar

Gösterge paneli sayfasında standart bir JavaScript fetch çağrısı, kullanıcının aktif filtrelerini ve tarih aralığını bir API uç noktasına gönderir, bir PDF belge oluşturulmasına yardım eder:

document.getElementById('export-btn').addEventListener('click', async () => {
    const params = new URLSearchParams({ from: dateFrom, to: dateTo, region: selectedRegion });
    const response = await fetch(`/api/reports/export?${params}`);
    const blob = await response.blob();
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'dashboard-report.pdf';
    a.click();
});
document.getElementById('export-btn').addEventListener('click', async () => {
    const params = new URLSearchParams({ from: dateFrom, to: dateTo, region: selectedRegion });
    const response = await fetch(`/api/reports/export?${params}`);
    const blob = await response.blob();
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'dashboard-report.pdf';
    a.click();
});
JAVASCRIPT

JavaScript Kodumuzla Düğme

JavaScript kodumuzu kullanan buton Sayfa yeniden yüklenmez, yeniden yönlendirme olmaz, sadece mevcut gösterge paneli görünümünden tetiklenen bir dosya indirme.

2. Sunucu Gösterge Pano HTML İçeriğini Oluşturur

Denetleyici veya hizmet katmanı, kullanıcının ekranda gördüğü aynı verileri sorgular ve bir HTML şablonu — ya bir rendere edilmiş Razor görünümü ya da bir HTML dizesi — KPI kartları, veri tabloları ve Chart.js veya ApexCharts'ın çalıştıracağı grafik yapılandırması JSON ile doldurur.

HTML, markanızın stil dosyasına referans verebilir, IronSoftware logosunu dahil edebilir veya Iron Software müşterisinin logolarını kullanabilir. @media print CSS kurallarını, gezinme unsurlarını bastırmak ve sayfa aralarını kontrol etmek için içerebilir.

Örnek Denetleyici Dosya

Örnek controller dosyası

3. ChromePdfRenderer HTML Dosyasını veya İçeriğini JavaScript Etkinleştirilmiş Olarak Render Eder

IronPDF'nin işin zor kısmını hallettiği yer burasıdır. EnableJavaScript = true, renderleyicinin yakalamadan önce scriptleri çalıştırmasını söyler. WaitFor.NetworkIdle0(), fetch kullanarak yüklenen grafik verilerini de içeren tüm eşzamanlı kaynaklar yerleşene kadar anlık görüntüyü bekletir.

C# PDF DLL'i vasıtasıyla IronPDF'yi kurduğunuzda, aşağıdaki kodu kullanabilirsiniz:

using IronPdf;
using IronPdf.Rendering;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.EnableJavaScript = true;

renderer.RenderingOptions.WaitFor.NetworkIdle0();

renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

var pdf = renderer.RenderHtmlAsPdf(dashboardHtml);
using IronPdf;
using IronPdf.Rendering;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.EnableJavaScript = true;

renderer.RenderingOptions.WaitFor.NetworkIdle0();

renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

var pdf = renderer.RenderHtmlAsPdf(dashboardHtml);
Imports IronPdf
Imports IronPdf.Rendering

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.EnableJavaScript = True

renderer.RenderingOptions.WaitFor.NetworkIdle0()

renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print

renderer.RenderingOptions.MarginTop = 15

renderer.RenderingOptions.MarginBottom = 15

Dim pdf = renderer.RenderHtmlAsPdf(dashboardHtml)
$vbLabelText   $csharpLabel

Grafiklerin ağ isteğinden ziyade bir zamanlayıcı ile başladığı panellerde, NetworkIdle0() yerine WaitFor.JavaScript() ile değiştirip grafik onComplete geri çağrısında hazır sinyali verebilirsiniz. Her iki strateji de C# PDF kütüphanesinin, grafik tamamlanıp çizildikten sonra değil öncesinde yakalanmasını sağlar.

İpuçlarıSet CssMediaType to Print to apply your @media print stylesheet rules. Bu, yan çıtalar, gezinme çubukları ve aksiyon düğmelerini canlı gösterge panelinin HTML'sini değiştirmeden dışa aktarılmış PDF'den gizlemenizi sağlar.

4. Denetleyici PDF Belgesini Bir Dosya İndirme Olarak Döndürür

API uç noktası PDF içeriğini bir FileContentResult içine sarar. PDF derneği üyesi veya bir AWS partner ağı kullanıcısı olsanız da, teslimat sorunsuzdur:

[HttpGet("api/reports/export")]

public IActionResult ExportDashboard([FromQuery] ReportFilters filters)

{

    var dashboardHtml = _reportService.BuildDashboardHtml(filters);

    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.EnableJavaScript = true;

    renderer.RenderingOptions.WaitFor.NetworkIdle0();

    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

    PdfDocument report = renderer.RenderHtmlAsPdf(dashboardHtml);

    return File(

        report.BinaryData,

        "application/pdf",

        $"KPI-Report-{filters.From:yyyyMMdd}.pdf"

    );

}
[HttpGet("api/reports/export")]

public IActionResult ExportDashboard([FromQuery] ReportFilters filters)

{

    var dashboardHtml = _reportService.BuildDashboardHtml(filters);

    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.EnableJavaScript = true;

    renderer.RenderingOptions.WaitFor.NetworkIdle0();

    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

    PdfDocument report = renderer.RenderHtmlAsPdf(dashboardHtml);

    return File(

        report.BinaryData,

        "application/pdf",

        $"KPI-Report-{filters.From:yyyyMMdd}.pdf"

    );

}
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf

<HttpGet("api/reports/export")>
Public Function ExportDashboard(<FromQuery> filters As ReportFilters) As IActionResult

    Dim dashboardHtml = _reportService.BuildDashboardHtml(filters)

    Dim renderer = New ChromePdfRenderer()

    renderer.RenderingOptions.EnableJavaScript = True

    renderer.RenderingOptions.WaitFor.NetworkIdle0()

    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print

    Dim report As PdfDocument = renderer.RenderHtmlAsPdf(dashboardHtml)

    Return File(report.BinaryData, "application/pdf", $"KPI-Report-{filters.From:yyyyMMdd}.pdf")

End Function
$vbLabelText   $csharpLabel

Content-Disposition: attachment, dosya() tarafından bir dosya adıyla otomatik olarak ayarlanır, böylece tarayıcı, yeni bir sekmede PDF'yi açmak yerine indirimi başlatır.

İndirilen PDF Dosyası

IronPDF örnek kodu ile oluşturulan PDF raporu

5. İsteğe Bağlı: Zamanlanmış Rapor Dağıtımı

Aynı rendering çağrısı, arka plan işinde, bir Hangfire tekrar eden görevde veya bir barındırılan IHostedService'de çalışabilir, bu da her Pazartesi sabahı haftalık KPI PDF'sini oluşturur ve liderlik dağıtım listesine e-posta olarak gönderir. Kullanıcı etkileşimi gerektirmez.

Gerçek Dünya Faydaları

İş kullanıcıları için kendi hizmeti. İhraç düğmesi canlı olduğunda, "benim için bir rapor çekebilir misiniz?" Slack mesajları durur. Gösterge paneline erişimi olan herhangi bir kullanıcı, bir istek dosyalamadan kendi PDF'sini indirebilir.

Grafik sadakati. Chromium, JavaScript'i IronPDF içinde çalıştırdığından, PDF'deki Chart.js, ApexCharts ve Highcharts grafikleri ekranda göründükleri gibi - renkler, statik etiketler olarak işlenmiş araç ipuçları ve duyarlı boyutlandırma dahil - render edilirler.

Marka tutarlılığı. İhraç edilen her rapor, şirket logosu, renk paleti ve gösterge panelinin stil dosyasında tanımlandığı tipografi taşır. Dışa aktarma ve dağıtım arasında yeniden biçimlendirme adımı yoktur.

Zamanlanmış üretim. Rendering çağrısını bir arka plan işine bağlayarak haftalık veya aylık PDF'leri otomatik olarak paydaşlara e-posta ile gönderin. Liderlik hiç kimsenin manuel olarak üretmediği, düzgün bir rapor alır.

Harici bağımlılıklar yok. IronPDF, süreç içinde çalışır. Canlı tutulan bir Puppeteer Node.js süreci yok, platform başına paketlenecek bir wkhtmltopdf ikili dosyası yok ve hız sınırlamaları veya doküman başına fiyatlandırma ile bir SaaS dışa aktarma API'si yok.

Yazdırmaya optimize edilmiş düzen. CssMediaType.Print, render zamanında @media print kurallarınızı uygular ve CSS'de temiz bir, yalnızca ihraç için özel düzen tanımlamanızı sağlar, ayrı bir HTML şablonunu korumadan.

Kapatış

Yönetim paneline bir "PDF'ye Dışa Aktar" düğmesi eklemek küçük bir özellik gibi geliyor. Uygulamada, tekrarlayan bir manuel görevi ortadan kaldırır, teknik olmayan kullanıcılara yıllardır çözdükleri bir yetenek sağlar ve verilerin gerçekten nasıl göründüğünü yansıtan bir belge üretir, basılı diyaloğu bozuk tahmin yerine.

IronPDF, JavaScript çalıştırma, CSS medya türleri, grafik yakalama gibi karmaşıklığı ele alır, böylece sizin tarafınızdan yapılması gereken, bir denetleyici işlemi ve bir HTML şablonudur. Kendi panelinize karşı test etmek isterseniz, ironpdf.com adresinde 30 günlük ücretsiz bir deneme tüm özelliklerle ve filigran olmadan mevcuttur.

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