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:
-
Ç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. -
No .NET SDK: Her C# çağrısı el ile
HttpClientPOST + JSON olarak oluşturulur. IntelliSense yok, istek şekli üzerinde derleme zamanı kontrolleri yok. -
Küçük v1.x API Yüzeyi: Belgelenen JSON gövdesi yalnızca bir
htmlalanı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@pageCSS ve mutlak konumlandırılmış div'ler aracılığıyla. -
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. -
HTTP Round-Trip Per PDF: Konteyner
localhostüzerinde çalışırken bile, her PDF JSON serileştirme ve bir soket sıçraması yapar. - Free Tier Üzerinde Filigran: Konteyner üzerinde
KAIZEN_PDF_LICENSEortam 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
- .NET Environment: .NET Framework 4.6.2+ or .NET Core 3.1+ / .NET 5+
- NuGet Erişimi: NuGet paketlerini yükleyebilme
- 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
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"
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" .
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ış |
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
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
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
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
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
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
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()
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
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);
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)
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
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}"
}
Ö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>")
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
@pageCSS'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_LICENSEkaldırın IronPdfNuGet paketini yükleyin (dotnet add package IronPdf)
Kod Değişiklikleri
Başlangıçta lisans anahtarı yapılandırmasını ekleyin
HttpClientPOST'uChromePdfRendererile değiştirin- Gömülü
@pageCSS'yiRenderingOptionsözelliklerine taşıyın - JSON POST'u
RenderHtmlAsPdf()/RenderHtmlFileAsPdf()/RenderUrlAsPdf()ile değiştirin - Sahte başlık/altlık div'leri
TextHeader/FooterveyaHtmlHeader/Footerile değiştirin - Yer tutucu sözdizimini güncelleyin (
{total}→{total-pages},{title}→{html-title}) byte[]HTTP gövdesinipdf.BinaryDataile değiştirinpdf.SaveAs()yerineFile.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

