IRONSOFTWAREHOME
VIDEOLAR

Blazor Sunucusu Kullanarak C# ile Razor'u PDF'ye Nasıl Dönüştürürüz

Curtis Chau
Curtis Chau
Updated: 19 Temmuz 2026

Kaizen.io HTML-to-PDF'den IronPDF'e geçiş, HTTP üzerinden erişilen bir Docker kabını, işlem içi bir .NET kütüphanesi ile değiştirir.Kaizen.io HTML-to-PDFyalnızca Docker görüntüsü kaizenio.azurecr.io/html-to-pdf olarak gönderilir ve 8080 portunda tek bir REST uç noktası POST /html-to-pdf sunar — resmi bir .NET SDK veya NuGet paketi yoktur, bu yüzden her C# çağrısı çalışan konteynere karşı el ile HttpClient oluşturulmalıdır. Bu kılavuz, o deseni IronPDF'nin ChromePdfRenderer ile değiştirmeyi anlatır.

Kaizen.io'dan IronPDF'e Neden Geçilmeli

Konteynır-API Zorlukları

Kaizen.io HTML-to-PDF, kasıtlı olarak küçük bir v1.x API'ye sahip bir Docker konteyneridir ve C# entegrasyonu hikayesi, kendi başınıza üstüne inşa ettiğiniz HttpClient üzerindedir. Bu yapı, üretim ortamında gerçek sınırları karşılar:

  1. Çalıştırılacak Konteyner: Uygulamanızın ulaşabileceği bir yerde - yerel Docker, yan uygulama veya ayrı bir host - kaizenio.azurecr.io/html-to-pdf:latest çalıştırın, izleyin ve güncelleyin.

  2. No .NET SDK: Her C# çağrısı el ile HttpClient POST + JSON olarak oluşturulur. IntelliSense yok, istek şekli üzerinde derleme zamanı kontrolleri yok.

  3. Küçük v1.x API Yüzeyi: Belgelenen JSON gövdesi yalnızca bir html alanını kabul eder. URL-TO-PDF, özel stil sayfaları, başlıklar/altlıklar, sayfa boyutu, yönlendirme ve kenar boşlukları, yol haritası öğeleri olarak listelenmiştir; gönderilen özellikler değil - HTML dizisi dışında bir şeyi oluşturmak için HTML'nin içinde ifade edilmelidir, genellikle @page CSS ve mutlak konumlandırılmış div'ler aracılığıyla.

  4. No Page-Number Support: API, {page}/ {total}yer tutucularına sahip değildir, bu yüzden "Page X of Y" altlıkları sunucu tarafında üretilemez.

  5. HTTP Round-Trip Per PDF: Konteyner localhost üzerinde çalışırken bile, her PDF JSON serileştirme ve bir soket sıçraması yapar.

  6. Free Tier Üzerinde Filigran: Konteyner üzerinde KAIZEN_PDF_LICENSE ortam değişkeni ayarlanmadan, çıktı filigranlanır.

Kaizen.io vs IronPDF Karşılaştırması

ÖzellikKaizen.io HTML-to-PDFIronPDF
DağıtımDocker görüntü kaizenio.azurecr.io/html-to-pdfNuGet IronPdf
C# EntegrasyonuEl yapımı HttpClient POST (SDK yok)Güçlü şekilde tipli ChromePdfRenderer API
Süreç Modeliİşlem dışı konteynırİşlem içi
Endpoint Yüzeyi (v1.x)POST /html-to-pdf ile { "html": ... }HTML, dosya, URL için yöntemler
URL GirdisiYol haritasıRenderUrlAsPdf(url)
Başlıklar / Altbilgilerv1.x API'de yok; sabit konumlu CSS ile sahtekarlık yapTextHeader/Footer ve HtmlHeader/Footer
Sayfa NumaralarıDesteklenmeyen{page}ve {total-pages}placeholders
Sayfa Boyutu / YönlendirmeHTML'de @page CSS'yi yerleştirRenderingOptions.PaperSize vb.
LisanslamaTek seferlik lisans; filigranlı ücretsiz seviyeTicari (yıllık veya süresiz)

Modern .NET üzerine standartlaşan ekipler için,IronPDF yan araba konteynırını ve HTTP dolanmasını istek yolundan çıkarırken güçlü bir yapılandırma yüzeyi sunar.


Göç Karmaşıklığı Değerlendirmesi

Özelliklere Göre Tahmini Çaba

ÖzellikGöç Karmaşıklığı
Temel HTML'den PDF'eÇok Düşük
HTML Dosyasından PDF'eÇok Düşük
URL'yi PDF'ye çevirDüşük (Kaizen v1.x'in URL endpointi yok - kesin çözüm toptan değiştirilir)
Başlıklar/AltbilgilerOrta (sahte CSS divleri gerçek başlık bölgeleri ile değiştirildi)
Sayfa NumaralarıYeni yetenek (Kaizen v1.x'de mevcut değil)
Sayfa AyarlarıDüşük (@page CSS, RenderingOptions'a taşınıyor)

Paradigma Değişimi

Temel değişim, işlem dışı HTTP çağrılarından bir Docker konteynırına işlem içi rendera geçiştir:

Kaizen.io:  HttpClient.PostAsync("http://.../html-to-pdf", { html }) → byte[]
IronPDF:    ChromePdfRenderer → RenderHtmlAsPdf(html) → PdfDocument
Text

Başlamadan Önce

Ön Koşullar

  1. .NET Environment: .NET Framework 4.6.2+ or .NET Core 3.1+ / .NET 5+
  2. NuGet Erişimi: NuGet paketlerini yükleyebilme
  3. IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin

Paket Değişiklikleri

Kaldıracak kaizen NuGet paketi yok — Kaizen sadece bir Docker görüntüsü olarak gelir. Konteynırı durdurun ve IronPDF paketini ekleyin:

# Stop and remove the running Kaizen container (if any)
docker stop kaizen-pdf
docker rm kaizen-pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

Lisans Yapılandırması

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Kaizen.io Kullanımını Belirleyin

Çünkü Kaizen'in SDK'sı yok, çağrılar generic HttpClient POST'ler gibi görünür. Namespace yerine, endpoint, görüntü adı ve lisans çevre değişkeni arayın:

grep -r "html-to-pdf\|KAIZEN_PDF_LICENSE\|kaizenio.azurecr.io\|localhost:8080" \
  --include="*.cs" --include="*.json" --include="*.yml" .
SHELL

Tam API Referansı

Kavram Eşleşmeleri

Haritaya eklenen kaizen .NET sınıfı yok — yalnızca JSON istek şekli ve onun etrafında inşa ettiğiniz gelenekler var.

Kaizen.io KavramıIronPDF Eşdeğeri
HttpClient + POST /html-to-pdfChromePdfRenderer
JSON { "html": "..." }bodyRenderHtmlAsPdf(string html)
(No URL field in v1.x)RenderUrlAsPdf(string url)
(No file field in v1.x)RenderHtmlFileAsPdf(string path)
Boyut için satır içi @page CSSRenderingOptions.PaperSize
Yönlendirme için satır içi @page CSSRenderingOptions.PaperOrientation
Satır içi @page { margin: ... }RenderingOptions.MarginTop/Bottom/Left/Right
Sabit konumlandırılmış <div class='header'> hackRenderingOptions.TextHeader / HtmlHeader
Sabit konumlandırılmış <div class='footer'> hackRenderingOptions.TextFooter / HtmlFooter
HttpClient.PostAsyncRenderHtmlAsPdfAsync
Konteyner ortam değişkeni KAIZEN_PDF_LICENSEIronPdf.License.LicenseKey
HTTP byte[] yanıtpdf.BinaryData / pdf.SaveAs(path)

Yer Tutucu Haritaları

Kaizen v1.x'in sunucu tarafı yer tutucuları yok. Daha önce POST etmeden önce HTML'e elle stringler koyduysanız, IronPDF'in render zamanı yer tutucularına geçin:

Daha önce yaptığınız şeyIronPDF Yer Tutucu
html.Replace("{page}", currentPage.ToString()){page}
html.Replace("{total}", total.ToString()){total-pages}
html.Replace("{date}", DateTime.Now.ToShortDateString()){date}
html.Replace("{title}", docTitle){html-title}

Kod Göç Örnekleri

Örnek 1: Temel HTML'den PDF'ye

Önce (Kaizen.io — JSON'u kapsayıcıya POST etmek):

// Container must be running:
//   docker run -d -p 8080:8080 -e KAIZEN_PDF_LICENSE=... \
//     kaizenio.azurecr.io/html-to-pdf:latest
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var http = new HttpClient();
        var payload = JsonSerializer.Serialize(new { html = "<html><body><h1>Hello World</h1></body></html>" });
        var content = new StringContent(payload, Encoding.UTF8, "application/json");
        var response = await http.PostAsync("http://localhost:8080/html-to-pdf", content);
        response.EnsureSuccessStatusCode();
        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

Kaizen.io yaklaşımı JSON'ları seri hale getirir, onları konteynırın REST endpointine gönderir, durumu kontrol eder, yanıtı byte olarak okur ve bu byte'ları diske yazar. IronPDF'nin ChromePdfRenderer işlemi içinde çalışır - RenderHtmlAsPdf() bir PdfDocument ve bir SaveAs() metodu döndürür, bu yüzden round-trip ve manuel byte işlemi ortadan kalkar. HTML'den PDF'ye belgelemeyi ek işleme seçenekleri için inceleyin.

Örnek 2: Sayfa Ayarları ile HTML Dosyası PDF'e

Kaizen v1.x'in dosya uç noktası ve sayfa düzeni alanları yoktur - dosyayı kendiniz okuyun ve sayfa boyutu/yönlendirme @page CSS içinde yerleştirin.

Önce (Kaizen.io):

using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var body = File.ReadAllText("input.html");
        var html = "<style>@page { size: A4 portrait; }</style>" + body;

        using var http = new HttpClient();
        var payload = JsonSerializer.Serialize(new { html });
        var response = await http.PostAsync(
            "http://localhost:8080/html-to-pdf",
            new StringContent(payload, Encoding.UTF8, "application/json"));
        response.EnsureSuccessStatusCode();
        File.WriteAllBytes("document.pdf", await response.Content.ReadAsByteArrayAsync());
    }
}

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("document.pdf");
    }
}

RenderHtmlFileAsPdf() dosyayı doğrudan okur ve sayfa boyutu ve yönlendirme satır içi @page CSS'den RenderingOptions özelliklerine taşınır.

Örnek 3: Başlıklar ve Alt Bilgilerle URL'den PDF'e

Kaizen v1.x'in ConvertUrl, başlık/altlık alanları ve sayfa numarası yer tutucuları yoktur. Çözüm, sayfayı kendinizin alması ve başlık/altlık taklit etmek için sabit konumlu div'lerle @page CSS sarmasıdır - sayfa numaralarının oluşturulması mümkün değildir.

Önce (Kaizen.io):

using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var http = new HttpClient();
        var page = await http.GetStringAsync("https://example.com");
        var html = $@"<!doctype html><html><head><style>
            @page {{margin: 20mm;}}
            .h {{position: fixed; top: -15mm; left: 0; right: 0; text-align: center;}}
            .f {{position: fixed; bottom: -15mm; left: 0; right: 0; text-align: center;}}
        </style></head><body>
            <div class='h'>Company Header</div>
            <div class='f'>Footer (page numbers unsupported in Kaizen v1.x)</div>
            {page}
        </body></html>";

        var payload = JsonSerializer.Serialize(new { html });
        var response = await http.PostAsync(
            "http://localhost:8080/html-to-pdf",
            new StringContent(payload, Encoding.UTF8, "application/json"));
        response.EnsureSuccessStatusCode();
        File.WriteAllBytes("webpage.pdf", await response.Content.ReadAsByteArrayAsync());
    }
}
C#

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader.CenterText = "Company Header";
        renderer.RenderingOptions.TextFooter.CenterText = "Page {page} of {total-pages}";
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

RenderUrlAsPdf() URL'yi doğrudan alır ve işler - istemci tarafında sayfa alma yoktur - ve taklit sabit konumlu div'ler TextHeader / TextFooter bölgeleri ile yer değiştirir. Sayfa numaraları, Kaizen v1.x'in sağlamadığı {page}ve {total-pages}yer tutucuları aracılığıyla üretilir. URL'den PDF'ye dönüştürme ve başlıklar ve altlıklar hakkında daha fazla bilgi edinin.


Kritik Taşıma Notları

Lisans Kodda Yaşar, Konteynırda Değil

Kaizen lisansı, Docker konteynerindeki KAIZEN_PDF_LICENSE ortam değişkeniyle yapılandırılır. IronPDF'in lisansı, uygulama başlamasında bir kez ayarlanan statik bir özelliktir:

// DELETE the Kaizen container env var:
//   docker run ... -e KAIZEN_PDF_LICENSE=... kaizenio.azurecr.io/html-to-pdf

// IronPDF: set once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();

Yer Tutucu Sözdizimi

Daha önce POST etmeden önce HTML'e elle stringler koyduysanız, IronPDF'in render zamanı yer tutucularına geçin:

  • {page}(değişmeden)
  • {total}{total-pages}
  • {title}{html-title}
  • {date}{date}(değişmeden)

Dönüş Türü Değişikliği

Kaizen, HTTP üzerinden ham baytlar döndürür. IronPDF, bir PdfDocument geri döndürür:

// Kaizen.io returns byte[] via HTTP
byte[] pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("output.pdf", pdfBytes);

//IronPDF returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");           // Direct save
byte[] bytes = pdf.BinaryData;      // Or get bytes if needed
C#

HTTP Tesisatını Sil

Bir kez renderer işlem içindeyken, destekleyen kod ortadan kaybolur:

// DELETE all of:
// - HttpClient lifetime management
// - JSON serialization of { html }
// - response.EnsureSuccessStatusCode() / status-code branches
// - "container unreachable" retry/backoff
// - ReadAsByteArrayAsync()

// Replaced with a single in-process call:
var pdf = renderer.RenderHtmlAsPdf(html);

Hata Ayıklama

Sorun 1: HtmlToPdfConverter Sınıfı Yok

Problem: Değiştirilmesi gereken bir HtmlToPdfConverter sınıfı yok - Kaizen'in hiç .NET SDK'sı yok.

Çözüm: Geçiş, konteynere karşı HttpClient POST'lardan ChromePdfRenderer'e yapılır:

// Kaizen.io: hand-rolled HTTP
using var http = new HttpClient();
var response = await http.PostAsync("http://localhost:8080/html-to-pdf", content);

// IronPDF: in-process renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

Sorun 2: Seçenekler Nesnesi Nereye Gitti?

Problem: Kaizen v1.x'in hiçbir ConversionOptions yok - sayfa düzeni satır içi @page CSS'di, başlıklar/altlıklar sabit konumlu div'lerdi.

Çözüm: Bu yapılandırmayı renderer üzerindeki RenderingOptions'e taşıyın:

// Before: <style>@page { size: A4 portrait; margin: 20mm; }</style>
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;

Sorun 3: Sayfa Numaraları Gösterilmiyor

Problem: Kaizen v1.x'in {page}/ {total}yer tutucu desteği yok, bu yüzden önceden geçiş öncesi "Page X of Y" altlığı ya eksikti ya da statik metin.

Çözüm: IronPDF'in başlık/altbilgi yer tutucularını kullanın:

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "Page {page} of {total-pages}"
};

Önceki kodunuzda POST etmeden önce el ile {total}yerine koyduysanız, bu değiştirmeyi kaldırın — IronPDF, {total-pages}render zamanında çözümler.

Sorun 4: Konteynır Bağlantı Hataları

Sorun: 'konteynır ulaşılamaz' / port-8080 hatalarını işleyen yol kodları.

**Çözüm:**IronPDF işlem içi çalışır — bağlanılacak hiçbir endpoint yok. Bağlantı hatası işleme kodunu silin.

Sorun 5: İlk Render Yavaş

Problem: İlk PDF üretimi 1-3 saniye sürüyor.

Çözüm: IronPDF, ilk kullanımda Chromium'u başlatır. Uygulama başlatıldığında ısıtın:

// In Program.cs or Startup.cs:
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");

Geçiş Kontrol Listesi

Öncesi-Geçiş

  • Her Kaizen çağrı sitesini bulun (ara html-to-pdf, KAIZEN_PDF_LICENSE, kaizenio.azurecr.io, localhost:8080)
  • Boyut, yönlendirme, kenar boşlukları için kullanılan satır içi @page CSS'yi belgelyin
  • Sahte başlık/altbilgi divlerini (sabit pozisyonlu ve negatif girdilerle) belgeleyin
  • İstemci tarafı yer tutucu değiştirme (html.Replace("{page}", ...) vb.) listesini yapın
  • Konteynırın yaşam döngüsünü not edin: çekme, çalıştırma, yeniden başlatma, lisans çevre değişkeni -IronPDF lisans anahtarını edinin

Konteynır Sökme

  • Çalışan Kaizen konteynerini durdurun ve kaldırın (docker stop kaizen-pdf && docker rm kaizen-pdf)
  • CI/CD'den Kaizen çekme/çalıştırma adımlarını kaldırın
  • Gizli verilerden/ortamdan KAIZEN_PDF_LICENSE kaldırın
  • IronPdf NuGet paketini yükleyin (dotnet add package IronPdf)

Kod Değişiklikleri

Başlangıçta lisans anahtarı yapılandırmasını ekleyin

  • HttpClient POST'u ChromePdfRenderer ile değiştirin
  • Gömülü @page CSS'yi RenderingOptions özelliklerine taşıyın
  • JSON POST'u RenderHtmlAsPdf() / RenderHtmlFileAsPdf() / RenderUrlAsPdf() ile değiştirin
  • Sahte başlık/altlık div'leri TextHeader/Footer veya HtmlHeader/Footer ile değiştirin
  • Yer tutucu sözdizimini güncelleyin ({total}{total-pages}, {title}{html-title})
  • byte[] HTTP gövdesini pdf.BinaryData ile değiştirin
  • pdf.SaveAs() yerine File.WriteAllBytes() kullanın
  • Konteynır erişilebilirliği hataları işleme ve geri almak/gecikme adımlarını silin

Test Etme

Tüm PDF oluşturma yollarını test edin

  • Başlık/altbilgi gönderimini ve sayfa numaralarını doğrulayın (yeni işlev)
  • Kenar boşluklarını, sayfa boyutunu ve yönlendirmeyi doğrulayın
  • Çevrimdışı çalışma modunu test edin (konteynır gerekmeden)

Geçiş Sonrası

  • Kaizen konteynır altyapısını sökün
  • Çevre değişkenlerini / sırları güncelleyin
  • İzleme/uyarma sistemlerinden konteynır sağlık kontrollerini kaldırın
  • Yeni türlendirilmiş hata modelleme kalıplarını belgeleyin

Lütfen dikkate alın: Kaizen.io, ilgili sahibinin tescilli markasıdır. Bu site, Kaizen.io ile ilişkili değildir, onaylanmamış veya sponsorluk almamıştır. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadı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