Skip to footer content
MIGRATION GUIDES

How to Migrate from Kaizen.io to IronPDF in C#

Migrating from Kaizen.io HTML-to-PDF to IronPDF transforms your .NET PDF workflow from a cloud-dependent service with network latency and data privacy concerns to a local in-process library that keeps your data within your infrastructure. This guide provides a comprehensive, step-by-step migration path that eliminates external API dependencies and per-request pricing for professional .NET developers.

Why Migrate from Kaizen.io to IronPDF

The Cloud-Based API Challenges

Kaizen.io HTML-to-PDF, like other cloud-based PDF services, introduces limitations that affect production applications:

  1. Cloud Dependency: Requires constant internet connection and external service availability. If the Kaizen.io service experiences downtime, your application's PDF generation stops working.

  2. Data Privacy Concerns: Sensitive HTML content—including customer data, financial reports, and confidential documents—must be transmitted to third-party servers for processing.

  3. Network Latency: Every PDF generation incurs network round-trip delays of 100-500ms or more, adding significant overhead to your application's response times.

  4. Per-Request Pricing: Costs scale directly with usage volume, making high-volume PDF generation increasingly expensive.

  5. Rate Limiting: API throttling during high-traffic periods can cause PDF generation failures or delays when you need them most.

  6. Vendor Lock-In: API changes or service discontinuation risk leaves your application vulnerable to external business decisions.

Kaizen.io vs IronPDF Comparison

FeatureKaizen.ioIronPDF
ProcessingCloud (external servers)Local (in-process)
Data PrivacyData transmitted externallyData never leaves your infrastructure
LatencyNetwork round-trip (100-500ms+)Local processing (50-200ms)
AvailabilityDepends on external service100% under your control
PricingPer-request or subscriptionOne-time or annual license
Offline ModeNot possibleFull functionality
Rate LimitsAPI throttlingNo limits
JavaScriptLimited supportFull Chromium execution

For teams planning .NET 10 and C# 14 adoption through 2025 and 2026, IronPDF provides a future-proof foundation with local processing that eliminates external service dependencies.


Migration Complexity Assessment

Estimated Effort by Feature

FeatureMigration ComplexityNotes
Basic HTML to PDFVery LowDirect method replacement
HTML File to PDFVery LowDirect method replacement
URL to PDFVery LowDirect method replacement
Headers/FootersLowPlaceholder syntax change
Page SettingsVery LowProperty mapping
API Key ManagementLowDelete entirely

Paradigm Shift

The fundamental shift in this Kaizen.io migration is from cloud API calls to local in-process rendering:

Kaizen.io:  HtmlToPdfConverter → Convert(html) → byte[] (via network)
IronPDF:    ChromePdfRenderer → RenderHtmlAsPdf(html) → PdfDocument (local)

Before You Start

Prerequisites

  1. .NET Environment: .NET Framework 4.6.2+ or .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Access: Ability to install NuGet packages
  3. IronPDF License: Obtain your license key from ironpdf.com

NuGet Package Changes

# Remove Kaizen.io package
dotnet remove package Kaizen.HtmlToPdf
dotnet remove package Kaizen.IO.HtmlToPdf

# Install IronPDF
dotnet add package IronPdf
# Remove Kaizen.io package
dotnet remove package Kaizen.HtmlToPdf
dotnet remove package Kaizen.IO.HtmlToPdf

# Install IronPDF
dotnet add package IronPdf
SHELL

License Configuration

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

Identify Kaizen.io Usage

# Find all Kaizen.io references
grep -r "using Kaizen\|HtmlToPdfConverter\|ConversionOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml\|Kaizen" --include="*.cs" .
# Find all Kaizen.io references
grep -r "using Kaizen\|HtmlToPdfConverter\|ConversionOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml\|Kaizen" --include="*.cs" .
SHELL

Complete API Reference

Class Mappings

Kaizen.io ClassIronPDF EquivalentNotes
HtmlToPdfConverterChromePdfRendererMain converter
ConversionOptionsChromePdfRenderOptionsVia RenderingOptions
HeaderOptionsHtmlHeaderFooter or TextHeaderFooterHTML/text headers
FooterOptionsHtmlHeaderFooter or TextHeaderFooterHTML/text footers
PageSizePdfPaperSizePaper size enum
OrientationPdfPaperOrientationOrientation enum

Method Mappings

Kaizen.io MethodIronPDF EquivalentNotes
converter.Convert(html)renderer.RenderHtmlAsPdf(html)Returns PdfDocument
converter.ConvertUrl(url)renderer.RenderUrlAsPdf(url)Direct URL support
File.WriteAllBytes(path, bytes)pdf.SaveAs(path)Direct save method

ConversionOptions Property Mappings

Kaizen.io PropertyIronPDF EquivalentNotes
PageSizeRenderingOptions.PaperSizeEnum value
OrientationRenderingOptions.PaperOrientationPortrait/Landscape
MarginTopRenderingOptions.MarginTopIn millimeters
MarginBottomRenderingOptions.MarginBottomIn millimeters
Header.HtmlContentRenderingOptions.HtmlHeader.HtmlFragmentHeader HTML
Footer.HtmlContentRenderingOptions.HtmlFooter.HtmlFragmentFooter HTML

Placeholder Mappings

Kaizen.io PlaceholderIronPDF PlaceholderNotes
{page}{page}Current page (same)
{total}{total-pages}Total pages (different!)
{date}{date}Current date (same)
{title}{html-title}Document title (different!)

Code Migration Examples

Example 1: Basic HTML to PDF

Before (Kaizen.io):

using Kaizen.IO;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdfBytes = converter.Convert(html);
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
using Kaizen.IO;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdfBytes = converter.Convert(html);
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
$vbLabelText   $csharpLabel

After (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");
    }
}
$vbLabelText   $csharpLabel

The Kaizen.io approach creates an HtmlToPdfConverter, calls Convert() to get a byte array, then manually writes the bytes to a file using File.WriteAllBytes(). This involves a network round-trip to the Kaizen.io cloud service.

IronPDF's ChromePdfRenderer processes everything locally. The RenderHtmlAsPdf() method returns a PdfDocument object with a convenient SaveAs() method—no manual byte array handling required, and no network latency. See the HTML to PDF documentation for additional rendering options.

Example 2: HTML File to PDF with Page Settings

Before (Kaizen.io):

using Kaizen.IO;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var htmlContent = File.ReadAllText("input.html");
        var options = new ConversionOptions
        {
            PageSize = PageSize.A4,
            Orientation = Orientation.Portrait
        };
        var pdfBytes = converter.Convert(htmlContent, options);
        File.WriteAllBytes("document.pdf", pdfBytes);
    }
}
using Kaizen.IO;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var htmlContent = File.ReadAllText("input.html");
        var options = new ConversionOptions
        {
            PageSize = PageSize.A4,
            Orientation = Orientation.Portrait
        };
        var pdfBytes = converter.Convert(htmlContent, options);
        File.WriteAllBytes("document.pdf", pdfBytes);
    }
}
$vbLabelText   $csharpLabel

After (IronPDF):

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

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;
using System;
using System.IO;

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

The Kaizen.io approach requires manually reading the HTML file content with File.ReadAllText(), creating a separate ConversionOptions object, passing both to the Convert() method, and then manually writing the result bytes to a file.

IronPDF provides a dedicated RenderHtmlFileAsPdf() method that reads the file directly—no manual file reading required. Configuration is set on the RenderingOptions property of the renderer, keeping all settings in one place. The PdfPaperSize.A4 and PdfPaperOrientation.Portrait enums map directly from Kaizen.io's equivalents.

Example 3: URL to PDF with Headers and Footers

Before (Kaizen.io):

using Kaizen.IO;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var options = new ConversionOptions
        {
            Header = new HeaderOptions { HtmlContent = "<div style='text-align:center'>Company Header</div>" },
            Footer = new FooterOptions { HtmlContent = "<div style='text-align:center'>Page {page} of {total}</div>" },
            MarginTop = 20,
            MarginBottom = 20
        };
        var pdfBytes = converter.ConvertUrl("https://example.com", options);
        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
using Kaizen.IO;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var options = new ConversionOptions
        {
            Header = new HeaderOptions { HtmlContent = "<div style='text-align:center'>Company Header</div>" },
            Footer = new FooterOptions { HtmlContent = "<div style='text-align:center'>Page {page} of {total}</div>" },
            MarginTop = 20,
            MarginBottom = 20
        };
        var pdfBytes = converter.ConvertUrl("https://example.com", options);
        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
$vbLabelText   $csharpLabel

After (IronPDF):

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

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;
using System;
using System.IO;

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

This example demonstrates several key migration differences. Kaizen.io requires nested HeaderOptions and FooterOptions objects within ConversionOptions, each with an HtmlContent property. IronPDF provides a cleaner TextHeader and TextFooter configuration with dedicated CenterText, LeftText, and RightText properties.

Critical Note: The placeholder syntax differs! Kaizen.io uses {total} for total page count, while IronPDF uses {total-pages}. This is the most common migration issue—search your codebase for {total} and replace with {total-pages}.

IronPDF's RenderUrlAsPdf() method directly renders any URL with full JavaScript execution via the Chromium engine—no workarounds required. Learn more about URL to PDF conversion and headers and footers.


Critical Migration Notes

Placeholder Syntax Change

The most important change when migrating headers and footers is the placeholder syntax:

// Kaizen.io placeholders:
"Page {page} of {total}"

// IronPDF placeholders:
"Page {page} of {total-pages}"
// Kaizen.io placeholders:
"Page {page} of {total}"

// IronPDF placeholders:
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Complete placeholder mapping:

  • {page}{page} (same)
  • {total}{total-pages} (DIFFERENT!)
  • {title}{html-title} (DIFFERENT!)
  • {date}{date} (same)
  • {time}{time} (same)

Return Type Change

Kaizen.io returns byte[] directly. IronPDF returns a PdfDocument object:

// Kaizen.io returns byte[]
byte[] pdfBytes = converter.Convert(html);
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[]
byte[] pdfBytes = converter.Convert(html);
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
$vbLabelText   $csharpLabel

Remove API Key Management

Kaizen.io requires per-request API key authentication. IronPDF uses a license key set once at application startup:

// DELETE this Kaizen.io pattern:
var converter = new HtmlToPdfConverter("YOUR_API_KEY");

// IronPDF: Set once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();  // No API key needed
// DELETE this Kaizen.io pattern:
var converter = new HtmlToPdfConverter("YOUR_API_KEY");

// IronPDF: Set once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();  // No API key needed
$vbLabelText   $csharpLabel

Delete Network Error Handling

Remove retry logic, rate limit handling, and network timeout code—IronPDF processes locally:

// DELETE this Kaizen.io pattern:
int retries = 3;
while (retries > 0)
{
    try
    {
        return converter.Convert(html);
    }
    catch (RateLimitException)
    {
        retries--;
        Thread.Sleep(1000);
    }
}

// IronPDF: Just call the method
return renderer.RenderHtmlAsPdf(html).BinaryData;
// DELETE this Kaizen.io pattern:
int retries = 3;
while (retries > 0)
{
    try
    {
        return converter.Convert(html);
    }
    catch (RateLimitException)
    {
        retries--;
        Thread.Sleep(1000);
    }
}

// IronPDF: Just call the method
return renderer.RenderHtmlAsPdf(html).BinaryData;
$vbLabelText   $csharpLabel

Troubleshooting

Issue 1: HtmlToPdfConverter Not Found

Problem: HtmlToPdfConverter class doesn't exist in IronPDF.

Solution: Replace with ChromePdfRenderer:

// Kaizen.io
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// Kaizen.io
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Issue 2: ConversionOptions Not Found

Problem: ConversionOptions class doesn't exist in IronPDF.

Solution: Use RenderingOptions on the renderer:

// Kaizen.io
var options = new ConversionOptions { PageSize = PageSize.A4 };
converter.Convert(html, options);

// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderHtmlAsPdf(html);
// Kaizen.io
var options = new ConversionOptions { PageSize = PageSize.A4 };
converter.Convert(html, options);

// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

Issue 3: Page Numbers Not Working

Problem: Footer shows literal {total} instead of page count.

Solution: Update placeholder syntax:

// Kaizen.io syntax (won't work)
"Page {page} of {total}"

// IronPDF syntax
"Page {page} of {total-pages}"
// Kaizen.io syntax (won't work)
"Page {page} of {total}"

// IronPDF syntax
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Issue 4: Convert Method Not Found

Problem: Convert() method doesn't exist on ChromePdfRenderer.

Solution: Use RenderHtmlAsPdf():

// Kaizen.io
var pdfBytes = converter.Convert(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var pdfBytes = pdf.BinaryData;
// Kaizen.io
var pdfBytes = converter.Convert(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var pdfBytes = pdf.BinaryData;
$vbLabelText   $csharpLabel

Issue 5: First Render Slow

Problem: First PDF generation takes 1-3 seconds.

Solution: IronPDF initializes Chromium on first use. Warm up at application startup:

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

Migration Checklist

Pre-Migration

  • Identify all Kaizen.io using statements
  • Document ConversionOptions settings used
  • Note header/footer templates and placeholders
  • List API key locations (to remove)
  • Check for retry/rate-limit logic (to delete)
  • Obtain IronPDF license key

Package Changes

  • Remove Kaizen.HtmlToPdf package
  • Install IronPdf NuGet package: dotnet add package IronPdf
  • Update namespace imports

Code Changes

  • Add license key configuration at startup
  • Replace HtmlToPdfConverter with ChromePdfRenderer
  • Convert ConversionOptions to RenderingOptions
  • Update Convert() to RenderHtmlAsPdf()
  • Update ConvertUrl() to RenderUrlAsPdf()
  • Update placeholder syntax ({total}{total-pages})
  • Replace File.WriteAllBytes() with pdf.SaveAs()
  • Remove API key configuration
  • Delete retry/rate-limit logic
  • Remove network error handling for API calls

Testing

  • Test all PDF generation paths
  • Verify header/footer rendering
  • Check placeholder rendering
  • Validate margins and page sizes
  • Test offline functionality (new capability!)
  • Benchmark performance improvement

Post-Migration

  • Remove Kaizen.io API key from configuration
  • Update environment variables
  • Remove rate limit configuration
  • Update monitoring/alerting

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...

Read More