Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Wie man von Api2pdf zu IronPDF in C# migriert

Migrieren Sie von Api2pdfzu IronPDF: Vollständiger C#-Migrationsleitfaden

Api2pdf bietet einen bequemen Cloud-basierten PDF-Generierungsdienst an, aber der Versand sensibler Dokumente an Server von Drittanbietern führt zu Sicherheitsrisiken, Herausforderungen bei der Einhaltung von Vorschriften und laufenden Kosten, die sich auf unbestimmte Zeit summieren. Dieser umfassende Leitfaden bietet einen schrittweisen Migrationspfad von Api2pdfzuIronPDF- einer nativen .NET-PDF-Bibliothek, die Dokumente vollständig in Ihrer eigenen Infrastruktur verarbeitet, wodurch Probleme bei der Datenübertragung beseitigt werden und die Kosten pro Konvertierung in eine einmalige Investition umgewandelt werden.

Warum von Api2pdfabwandern?

Obwohl Api2pdfeine bequeme Cloud-basierte PDF-Generierung anbietet, gibt es mehrere Faktoren, die Entwicklerteams dazu veranlassen, für ihre PDF-Generierungsanforderungen nach Alternativen vor Ort zu suchen.

Sicherheits- und Compliance-Risiken

Api2pdf arbeitet als Cloud-basierter Dienst, bei dem Ihr sensibles HTML und Ihre Dokumente zur Verarbeitung an Server von Drittanbietern gesendet werden. Dies ist für Unternehmen, die mit regulierten Daten arbeiten, von großer Bedeutung.

Risiko Api2pdf IronPDF
Datenübertragung Alle Inhalte werden an externe Server gesendet Lokale Prozesse in Ihrer Infrastruktur
GDPR-Konformität Daten sind länderübergreifend Daten verlassen nie Ihre Umgebung
HIPAA-Konformität Extern übermittelte PHI PHI bleibt innerhalb Ihrer Systeme
SOC 2 Abhängigkeit von Drittanbietern Volle Kontrolle über die Datenverarbeitung
PCI DSS Potenziell offengelegte Kartendaten Keine externe Übertragung

Kostenakkumulation im Laufe der Zeit

Api2pdf berechnet ca. $0,005 pro Konvertierung auf unbestimmte Zeit, währendIronPDFeine einmalige unbefristete Lizenz anbietet. Bei Anwendungen, die ein erhebliches PDF-Volumen generieren, wird der Kostenunterschied beträchtlich:

Band Api2pdf(jährlich) IronPDF(einmalig)
10.000 PDFs/Monat ~$600/Jahr 749 $ (Lite)
50.000 PDFs/Monat ~$3.000/Jahr 749 $ (Lite)
100.000 PDFs/Monat ~$6.000/Jahr 1.499 € (Plus)

IronPDF macht sich für die meisten Produktionsanwendungen innerhalb weniger Monate bezahlt.

Leistung und Verfügbarkeit

Api2pdf erfordert Netzwerk-Roundtrips, die bei jeder PDF-Generierungsanforderung eine zusätzliche Latenz von 2-5 Sekunden verursachen.IronPDFverarbeitet lokal in 100-500 Millisekunden. Darüber hinaus funktioniertIronPDFvollständig offline und in abgeschotteten Umgebungen - wichtig für Anwendungen, die nicht von der Verfügbarkeit externer Dienste abhängig sind.

Api2pdfvs. IronPDF: Hauptunterschiede

Aspekt Api2pdf IronPDF
Datenverarbeitung Übermittlung an Cloud-Server von Drittanbietern Lokale Verarbeitung in Ihrer Infrastruktur
Preisgestaltung Bezahlung pro Konvertierung (~$0,005/PDF) Einmalige unbefristete Lizenz
Latenzzeit 2-5 Sekunden (Netzwerk-Roundtrip) 100-500ms (lokale Verarbeitung)
Offline Nicht verfügbar Arbeitet vollständig offline
Installation API-Schlüssel + HTTP-Client Einfaches NuGet-Paket
Konformität GDPR/HIPAA-Bedenken (Daten verlassen das Netzwerk) Vollständige Kontrolle der Konformität

Schritt-für-Schritt-Migrationsprozess

Schritt 1: NuGet-Pakete aktualisieren

Entfernen Sie das Api2pdf-Paket und installieren Sie IronPDF:

# Remove Api2pdf
dotnet remove package Api2Pdf

# Install IronPDF
dotnet add package IronPdf
# Remove Api2pdf
dotnet remove package Api2Pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

Oder über die Paketmanager-Konsole:

Uninstall-Package Api2Pdf
Install-Package IronPdf

Schritt 2: Namensraumreferenzen aktualisieren

Ersetzen Sie die Api2pdf-Namensräume durch IronPDF:

// Remove these
using Api2Pdf;
using Api2Pdf.DotNet;

// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using Api2Pdf;
using Api2Pdf.DotNet;

// Add these
using IronPdf;
using IronPdf.Rendering;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Schritt 3: Konfigurieren des Lizenzschlüssels

Legen Sie den IronPDF-Lizenzschlüssel beim Starten der Anwendung fest:

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or configure via appsettings.json:
// { "IronPdf.LicenseKey": "YOUR-IRONPDF-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or configure via appsettings.json:
// { "IronPdf.LicenseKey": "YOUR-IRONPDF-LICENSE-KEY" }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Schritt 4: Entfernen der API-Schlüsselkonfiguration

IronPDF läuft lokal und benötigt keine API-Schlüssel:

// Remove this Api2pdfpattern
var client = new Api2PdfClient("API_KEY");

// Just create the renderer directly
var renderer = new ChromePdfRenderer();
// Remove this Api2pdfpattern
var client = new Api2PdfClient("API_KEY");

// Just create the renderer directly
var renderer = new ChromePdfRenderer();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Komplette API-Migrationsreferenz

Kernklassen-Zuordnung

Api2pdf-Klasse IronPDF-Äquivalent Notizen
Api2PdfClient ChromePdfRenderer Haupt-Rendering-Klasse
Api2PdfResult PdfDocument Stellt die PDF-Datei dar
HeadlessChromeOptions ChromePdfRenderOptions Rendering-Konfiguration

Methoden-Mapping

Api2pdf-Methode IronPDF-Methode Notizen
client.HeadlessChrome.FromHtmlAsync(html) renderer.RenderHtmlAsPdf(html) HTML zu PDF
client.HeadlessChrome.FromUrlAsync(url) renderer.RenderUrlAsPdf(url) URL zu PDF
Antwort.Pdf (URL) pdf.SaveAs(Pfad) In Datei speichern
Antwort.Pdf (herunterladen) pdf.BinaryData Als Byte-Array erhalten
client.PdfSharp.MergePdfsAsync(urls) PdfDocument.Merge(pdfs) PDFs zusammenführen
client.PdfSharp.SetPasswordAsync(url, pwd) pdf.SecuritySettings.OwnerPassword Passwortschutz

Zuordnung der Rendering-Optionen

Api2pdfOption IronPDF-Option Notizen
Landscape = true RenderingOptions.PaperOrientation = Querformat Ausrichtung der Seite
Seitengröße = "A4" RenderingOptions.PaperSize = PdfPaperSize.A4 Papierformat
PrintBackground = true RenderingOptions.PrintHtmlBackgrounds = true Hintergrundfarben
MarginTop, etc. RenderingOptions.MarginTop, usw. Ränder in mm
Verzögerung = 5000 RenderingOptions.WaitFor.RenderDelay(5000) Vor dem Rendern warten

Beispiele für die Code-Migration

HTML-zu-PDF-Konvertierung

Die häufigste Api2pdf-Operation demonstriert den grundlegenden Paradigmenwechsel - von Cloud-API-Aufrufen zur lokalen Verarbeitung.

Api2pdf-Einführung:

// NuGet: Install-Package Api2Pdf.DotNet
using System;
using System.Threading.Tasks;
using Api2Pdf.DotNet;

class Program
{
    static async Task Main(string[] args)
    {
        var a2pClient = new Api2PdfClient("your-api-key");
        var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Hello World</h1>");
        Console.WriteLine(apiResponse.Pdf);
    }
}
// NuGet: Install-Package Api2Pdf.DotNet
using System;
using System.Threading.Tasks;
using Api2Pdf.DotNet;

class Program
{
    static async Task Main(string[] args)
    {
        var a2pClient = new Api2PdfClient("your-api-key");
        var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Hello World</h1>");
        Console.WriteLine(apiResponse.Pdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF eliminiert den Netzwerk-Roundtrip, die API-Schlüsselverwaltung und den separaten Download-Schritt, der durch das URL-basierte Antwortmuster von Api2pdferforderlich ist.

URL zu PDF-Konvertierung

Api2pdf-Einführung:

// NuGet: Install-Package Api2Pdf.DotNet
using System;
using System.Threading.Tasks;
using Api2Pdf.DotNet;

class Program
{
    static async Task Main(string[] args)
    {
        var a2pClient = new Api2PdfClient("your-api-key");
        var apiResponse = await a2pClient.HeadlessChrome.FromUrlAsync("https://www.example.com");
        Console.WriteLine(apiResponse.Pdf);
    }
}
// NuGet: Install-Package Api2Pdf.DotNet
using System;
using System.Threading.Tasks;
using Api2Pdf.DotNet;

class Program
{
    static async Task Main(string[] args)
    {
        var a2pClient = new Api2PdfClient("your-api-key");
        var apiResponse = await a2pClient.HeadlessChrome.FromUrlAsync("https://www.example.com");
        Console.WriteLine(apiResponse.Pdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF created from URL successfully");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF created from URL successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HTML-Datei in PDF mit Optionen

Api2pdf-Einführung:

// NuGet: Install-Package Api2Pdf.DotNet
using System;
using System.IO;
using System.Threading.Tasks;
using Api2Pdf.DotNet;

class Program
{
    static async Task Main(string[] args)
    {
        var a2pClient = new Api2PdfClient("your-api-key");
        string html = File.ReadAllText("input.html");
        var options = new HeadlessChromeOptions
        {
            Landscape = true,
            PrintBackground = true
        };
        var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options);
        Console.WriteLine(apiResponse.Pdf);
    }
}
// NuGet: Install-Package Api2Pdf.DotNet
using System;
using System.IO;
using System.Threading.Tasks;
using Api2Pdf.DotNet;

class Program
{
    static async Task Main(string[] args)
    {
        var a2pClient = new Api2PdfClient("your-api-key");
        string html = File.ReadAllText("input.html");
        var options = new HeadlessChromeOptions
        {
            Landscape = true,
            PrintBackground = true
        };
        var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options);
        Console.WriteLine(apiResponse.Pdf);
    }
}
no response after 91 seconds
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
        string html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created with options successfully");
    }
}
// NuGet: Install-Package IronPdf
using System;
using System.IO;
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
        string html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created with options successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF konfiguriert die Rendering-Optionen direkt am Renderer-Objekt, anstatt sie als separate Optionsparameter an jeden API-Aufruf zu übergeben.

Mehrere PDFs zusammenführen

Api2pdf-Einführung:

using Api2Pdf.DotNet;

var a2pClient = new Api2PdfClient("YOUR_API_KEY");

var pdfUrls = new List<string>
{
    "https://example.com/pdf1.pdf",
    "https://example.com/pdf2.pdf",
    "https://example.com/pdf3.pdf"
};

var request = new PdfMergeRequest { Urls = pdfUrls };
var response = await a2pClient.PdfSharp.MergePdfsAsync(request);

if (response.Success)
{
    // Download merged PDF from response.Pdf URL
}
using Api2Pdf.DotNet;

var a2pClient = new Api2PdfClient("YOUR_API_KEY");

var pdfUrls = new List<string>
{
    "https://example.com/pdf1.pdf",
    "https://example.com/pdf2.pdf",
    "https://example.com/pdf3.pdf"
};

var request = new PdfMergeRequest { Urls = pdfUrls };
var response = await a2pClient.PdfSharp.MergePdfsAsync(request);

if (response.Success)
{
    // Download merged PDF from response.Pdf URL
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

// Load PDFs from files
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var pdf3 = PdfDocument.FromFile("document3.pdf");

// Merge all PDFs
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("merged.pdf");
using IronPdf;

// Load PDFs from files
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var pdf3 = PdfDocument.FromFile("document3.pdf");

// Merge all PDFs
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("merged.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die statische Merge-Methode vonIronPDFakzeptiert mehrere Dokumente direkt, so dass der URL-basierte Workflow entfällt.

Passwort-geschützte PDFs

Api2pdf-Einführung:

using Api2Pdf.DotNet;

var a2pClient = new Api2PdfClient("YOUR_API_KEY");

// Generate PDF first
var pdfResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Confidential</h1>");

// Then add password protection in separate call
var protectedResponse = await a2pClient.PdfSharp.SetPasswordAsync(
    pdfResponse.Pdf,
    "secretpassword"
);
using Api2Pdf.DotNet;

var a2pClient = new Api2PdfClient("YOUR_API_KEY");

// Generate PDF first
var pdfResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Confidential</h1>");

// Then add password protection in separate call
var protectedResponse = await a2pClient.PdfSharp.SetPasswordAsync(
    pdfResponse.Pdf,
    "secretpassword"
);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security in one step
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security in one step
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF bietet über die SecuritySettings-Eigenschaft eine granulare Kontrolle über PDF-Berechtigungen.

Kopf- und Fußzeilen

Api2pdf-Einführung:

using Api2Pdf.DotNet;

var a2pClient = new Api2PdfClient("YOUR_API_KEY");

var options = new HeadlessChromeOptions
{
    HeaderHtml = "<div style='font-size:10px'>Company Header</div>",
    FooterHtml = "<div style='font-size:10px'>Page <span class='pageNumber'></span></div>"
};

var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options);
using Api2Pdf.DotNet;

var a2pClient = new Api2PdfClient("YOUR_API_KEY");

var options = new HeadlessChromeOptions
{
    HeaderHtml = "<div style='font-size:10px'>Company Header</div>",
    FooterHtml = "<div style='font-size:10px'>Page <span class='pageNumber'></span></div>"
};

var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

var renderer = new ChromePdfRenderer();

// HTML headers and footers with full styling
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='font-size:10px; text-align:center;'>Company Header</div>",
    DrawDividerLine = true
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='font-size:10px; text-align:center;'>Page {page} of {total-pages}</div>",
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("with-headers.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// HTML headers and footers with full styling
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='font-size:10px; text-align:center;'>Company Header</div>",
    DrawDividerLine = true
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='font-size:10px; text-align:center;'>Page {page} of {total-pages}</div>",
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("with-headers.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF unterstützt Platzhalter-Token wie {page} und {total-pages} für die dynamische Seitennummerierung. Weitere Optionen finden Sie in der Kopf- und Fußzeilen-Dokumentation.

ASP.NET Core Integration

Das asynchrone HTTP-Muster von Api2pdfunterscheidet sich deutlich von der direkten PDF-Erzeugung von IronPDF.

Api2pdf-Muster:

[ApiController]
public class PdfController : ControllerBase
{
    private readonly Api2PdfClient _client;

    public PdfController()
    {
        _client = new Api2PdfClient("YOUR_API_KEY");
    }

    [HttpGet("generate")]
    public async Task<IActionResult> GeneratePdf()
    {
        var response = await _client.HeadlessChrome.FromHtmlAsync("<h1>Report</h1>");

        if (!response.Success)
            return BadRequest(response.Error);

        // Redirect to download URL
        return Redirect(response.Pdf);
    }
}
[ApiController]
public class PdfController : ControllerBase
{
    private readonly Api2PdfClient _client;

    public PdfController()
    {
        _client = new Api2PdfClient("YOUR_API_KEY");
    }

    [HttpGet("generate")]
    public async Task<IActionResult> GeneratePdf()
    {
        var response = await _client.HeadlessChrome.FromHtmlAsync("<h1>Report</h1>");

        if (!response.Success)
            return BadRequest(response.Error);

        // Redirect to download URL
        return Redirect(response.Pdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Muster:

[ApiController]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        // Return PDF directly - no download step needed
        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
[ApiController]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        // Return PDF directly - no download step needed
        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF gibt die PDF-Datei direkt über BinaryData oder Stream zurück, so dass das Muster "Redirect-to-Download" entfällt.

Dependency Injection Konfiguration

// Program.cs or Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IPdfService, IronPdfService>();
}

// IPdfService.cs
public interface IPdfService
{
    PdfDocument GenerateFromHtml(string html);
    Task<PdfDocument> GenerateFromHtmlAsync(string html);
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}
// Program.cs or Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IPdfService, IronPdfService>();
}

// IPdfService.cs
public interface IPdfService
{
    PdfDocument GenerateFromHtml(string html);
    Task<PdfDocument> GenerateFromHtmlAsync(string html);
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Migration der Fehlerbehandlung

Api2pdf verwendet Antwortobjektprüfungen.IronPDFverwendet die Standardausnahmen von .NET.

Api2pdf-Muster:

var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html);

if (!response.Success)
{
    Console.WriteLine($"Error: {response.Error}");
    return;
}
var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html);

if (!response.Success)
{
    Console.WriteLine($"Error: {response.Error}");
    return;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Muster:

try
{
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.IronPdfLicenseException ex)
{
    Console.WriteLine($"License error: {ex.Message}");
}
catch (IronPdf.Exceptions.IronPdfRenderingException ex)
{
    Console.WriteLine($"Rendering error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
try
{
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.IronPdfLicenseException ex)
{
    Console.WriteLine($"License error: {ex.Message}");
}
catch (IronPdf.Exceptions.IronPdfRenderingException ex)
{
    Console.WriteLine($"Rendering error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Leistungsvergleich

Metrik Api2pdf IronPDF
Einfaches HTML 2-5 Sekunden (Netzwerk) 100-500ms (lokal)
Komplexe Seite 5-10 Sekunden 500ms-2s
Batch von 100 Minuten (Tarifgrenzen) Sekunden (parallel)
Offline Nicht verfügbar Arbeitet vollständig
Kaltstart Keine ~2s (erstes Rendern)

Tipps zur Optimierung der Leistung

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

public PdfDocument GeneratePdf(string html)
{
    return SharedRenderer.RenderHtmlAsPdf(html);
}

// 2. Parallel generation
var tasks = htmlDocs.Select(html =>
    Task.Run(() => SharedRenderer.RenderHtmlAsPdf(html)));
var results = await Task.WhenAll(tasks);

// 3. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

public PdfDocument GeneratePdf(string html)
{
    return SharedRenderer.RenderHtmlAsPdf(html);
}

// 2. Parallel generation
var tasks = htmlDocs.Select(html =>
    Task.Run(() => SharedRenderer.RenderHtmlAsPdf(html)));
var results = await Task.WhenAll(tasks);

// 3. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Fehlerbehebung bei allgemeinen Migrationsproblemen

Ausgabe: PDF sieht anders aus als die Api2pdf-Ausgabe

Anpassung an die Headless Chrome-Einstellungen von Api2pdf:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1000);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1000);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem: Externe Ressourcen werden nicht geladen

Konfigurieren Sie Zeitüberschreitungen beim Laden von Ressourcen:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.AllFontsLoaded(timeout: 10000);
renderer.RenderingOptions.WaitFor.NetworkIdle(timeout: 10000);

// Or use base URL for relative paths
var pdf = renderer.RenderHtmlAsPdf(html, baseUrl: "https://example.com/");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.AllFontsLoaded(timeout: 10000);
renderer.RenderingOptions.WaitFor.NetworkIdle(timeout: 10000);

// Or use base URL for relative paths
var pdf = renderer.RenderHtmlAsPdf(html, baseUrl: "https://example.com/");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem: Große PDF-Dateigrößen

Komprimieren Sie Bilder nach der Erstellung:

renderer.RenderingOptions.ImageQuality = 80;

// Or compress after generation
pdf.CompressImages(quality: 75);
pdf.SaveAs("compressed.pdf");
renderer.RenderingOptions.ImageQuality = 80;

// Or compress after generation
pdf.CompressImages(quality: 75);
pdf.SaveAs("compressed.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Post-Migrations-Checkliste

Überprüfen Sie nach Abschluss der Codemigration Folgendes:

  • [Überprüfen, ob die Qualität der PDF-Ausgabe den Erwartungen entspricht
  • [Testen Sie alle Randfälle (große Dokumente, Sonderzeichen)
  • [Validierung von Leistungsmetriken (sollte eine deutliche Verbesserung aufweisen)
  • [Aktualisieren von Docker-Konfigurationen (falls zutreffend)
  • [Api2pdf-Portal-Konto und API-Schlüssel entfernen
  • [Update-Überwachung (keine Verfolgung der API-Latenz mehr erforderlich)
  • [Dokumentieren Sie neue Muster für Ihr Team
  • [CI/CD-Pipelines aktualisieren

Zukunftssicherheit für Ihre PDF-Infrastruktur

Da sich .NET 10 nähert und C# 14 neue Sprachfunktionen einführt, gewährleistet die Wahl einer nativen .NET-PDF-Bibliothek die Kompatibilität mit den sich entwickelnden Laufzeitfunktionen. IronPDFs Engagement für die Unterstützung der neuesten .NET-Versionen bedeutet, dass sich Ihre Migrationsinvestition auszahlt, wenn Projekte bis ins Jahr 2025 und 2026 reichen - ohne dass laufende Kosten pro Konvertierung anfallen.

Zusätzliche Ressourcen


Durch die Migration von Api2pdfzuIronPDFwird Ihre PDF-Erstellung von einem Cloud-abhängigen Kostenmodell pro Konvertierung zu einer lokalen, einmaligen Investition. Ihre sensiblen Dokumente verbleiben in Ihrer Infrastruktur, die Latenzzeit sinkt von Sekunden auf Millisekunden, und Sie sind bei dieser wichtigen Anwendungsfunktion nicht mehr vom Hersteller abhängig.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen