Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

Kaizen.io'dan IronPDF'e C# ile Nasıl Geçilir

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ı

Özellik Kaizen.io HTML-to-PDF IronPDF
Dağıtım Docker görüntü kaizenio.azurecr.io/html-to-pdf NuGet IronPdf
C# Entegrasyonu El 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 Girdisi Yol haritası RenderUrlAsPdf(url)
Başlıklar / Altbilgiler v1.x API'de yok; sabit konumlu CSS ile sahtekarlık yap TextHeader/Footer ve HtmlHeader/Footer
Sayfa Numaraları Desteklenmeyen {page}ve {total-pages}placeholders
Sayfa Boyutu / Yönlendirme HTML'de @page CSS'yi yerleştir RenderingOptions.PaperSize vb.
Lisanslama Tek seferlik lisans; filigranlı ücretsiz seviye Ticari (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

Özellik Göç Karmaşıklığı
Temel HTML'den PDF'e Çok Düşük
HTML Dosyasından PDF'e Çok Düşük
URL'yi PDF'ye çevir Düşük (Kaizen v1.x'in URL endpointi yok - kesin çözüm toptan değiştirilir)
Başlıklar/Altbilgiler Orta (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

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
# 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";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

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" .
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-pdf ChromePdfRenderer
JSON { "html": "..." }body RenderHtmlAsPdf(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 CSS RenderingOptions.PaperSize
Yönlendirme için satır içi @page CSS RenderingOptions.PaperOrientation
Satır içi @page { margin: ... } RenderingOptions.MarginTop/Bottom/Left/Right
Sabit konumlandırılmış
hack
RenderingOptions.TextHeader / HtmlHeader
Sabit konumlandırılmış RenderingOptions.TextFooter / HtmlFooter
HttpClient.PostAsync RenderHtmlAsPdfAsync
Konteyner ortam değişkeni KAIZEN_PDF_LICENSE IronPdf.License.LicenseKey
HTTP byte[] yanıt pdf.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 şey IronPDF 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);
    }
}
// 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);
    }
}
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Using http As New HttpClient()
            Dim payload = JsonSerializer.Serialize(New With {.html = "<html><body><h1>Hello World</h1></body></html>"})
            Dim content As New StringContent(payload, Encoding.UTF8, "application/json")
            Dim response = Await http.PostAsync("http://localhost:8080/html-to-pdf", content)
            response.EnsureSuccessStatusCode()
            Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
            File.WriteAllBytes("output.pdf", pdfBytes)
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System.IO

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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());
    }
}
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());
    }
}
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim body = File.ReadAllText("input.html")
        Dim html = "<style>@page { size: A4 portrait; }</style>" & body

        Using http As New HttpClient()
            Dim payload = JsonSerializer.Serialize(New With {Key .html = html})
            Dim 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())
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait
        Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
        pdf.SaveAs("document.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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());
    }
}
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());
    }
}
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Using http As New HttpClient()
            Dim page As String = Await http.GetStringAsync("https://example.com")
            Dim html As String = $"<!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>"

            Dim payload As String = JsonSerializer.Serialize(New With {Key .html = html})
            Dim response As HttpResponseMessage = 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())
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim 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
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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();
// 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();
' 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"
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

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
// 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
Imports System.IO

' Kaizen.io returns Byte() via HTTP
Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("output.pdf", pdfBytes)

' IronPDF returns PdfDocument
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")           ' Direct save
Dim bytes As Byte() = pdf.BinaryData ' Or get bytes if needed
$vbLabelText   $csharpLabel

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);
// 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);
$vbLabelText   $csharpLabel

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);
// 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);
Imports System.Net.Http
Imports IronPdf

' Kaizen.io: hand-rolled HTTP
Using http As New HttpClient()
    Dim response = Await http.PostAsync("http://localhost:8080/html-to-pdf", content)
End Using

' IronPDF: in-process renderer
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

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;
// 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;
' 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
$vbLabelText   $csharpLabel

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}"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "Page {page} of {total-pages}"
};
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .CenterText = "Page {page} of {total-pages}"
}
$vbLabelText   $csharpLabel

Ö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>");
// In Program.cs or Startup.cs:
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");
' In Program.vb or Startup.vb:
Call New ChromePdfRenderer().RenderHtmlAsPdf("<html></html>")
$vbLabelText   $csharpLabel

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ınKaizen.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ı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara