Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von CraftMyPDF zu IronPDF in C#

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

CraftMyPDF ist eine Cloud-basierte PDF-Generierungs-API, die einen proprietären Drag-and-Drop-Vorlageneditor und REST-Endpunkte zur Erstellung von Dokumenten verwendet. Während dieser Ansatz für einfache Anwendungsfälle bequem ist, führt die reine Cloud-Architektur zu Bedenken hinsichtlich des Datenschutzes, der Netzwerklatenz, der Pro-PDF-Kosten und der Vorlagenbindung, die im großen Maßstab problematisch werden. Dieser umfassende Leitfaden bietet einen schrittweisen Migrationspfad von CraftMyPDFzuIronPDF- einer lokalen .NET-PDF-Bibliothek, die HTTP-Abhängigkeiten eliminiert, offline läuft und pixelgenaues Chromium-Rendering mit einer einmaligen unbefristeten Lizenz bietet.

Warum von CraftMyPDFzuIronPDFmigrieren?

Cloud-basierte PDF-APIs wie CraftMyPDFbringen grundlegende Probleme mit sich, die sie für viele Produktionsumgebungen ungeeignet machen.

Das Problem mit Cloud-basierten PDF-APIs

  1. Ihre Daten verlassen Ihr System: Alle HTML-Vorlagen und JSON-Daten werden an die Server von CraftMyPDFübertragen. Bei Rechnungen, Verträgen, Krankenakten oder anderen sensiblen Geschäftsdaten entstehen dadurch Risiken für die Einhaltung von HIPAA, GDPR und SOC2.

  2. Netzwerk-Latenz: Die eigene Dokumentation von CraftMyPDFgibt 1,5-30 Sekunden pro PDF an.IronPDFgeneriert lokal in Millisekunden.

  3. Per-PDF-Kosten summieren sich: 10.000 PDFs/Monat zu Abonnementpreisen verursachen erhebliche wiederkehrende Kosten im Vergleich zu einer einmaligen unbefristeten Lizenz.

  4. Druckoptimierte Ausgabe: Cloud-APIs optimieren oft für den Druck, indem sie Hintergründe verkleinern und Farben vereinfachen, um "Tinte" zu sparen Das Ergebnis sieht auf dem Bildschirm nie wie Ihr HTML aus.

  5. Template Lock-In: CraftMyPDFbenötigt einen eigenen Drag-and-Drop-Editor. Sie können kein Standard-HTML/CSS frei verwenden.

Architektur-Vergleich

Aspekt CraftMyPDF IronPDF
Datenstandort Cloud (Ihre Daten verlassen Ihr System) Vor-Ort (Daten verlassen nie das Unternehmen)
Latenzzeit 1.5-30 Sekunden pro PDF Millisekunden
Preisgestaltung Pro-PDF-Abonnement Einmalige unbefristete Lizenz
Vorlagensystem Nur proprietäres Drag-and-Drop Jedes HTML/CSS/JavaScript
Ausgangsqualität Druckoptimiert Pixelgenaues Bildschirm-Rendering
Arbeitet offline Nein (Internet erforderlich) Ja
Konformität Datenblätter Organisation SOC2/HIPAA-freundlich

Funktionsvergleich

Feature CraftMyPDF IronPDF
HTML zu PDF Über API-Vorlagen ✅Nativ
URL zu PDF Über API ✅Nativ
Benutzerdefinierte Vorlagen Nur Proprietärer Editor ✅Beliebiges HTML
CSS3-Unterstützung Beschränkt ✅Vollständig
JavaScript-Rendering Beschränkt ✅Vollständig
PDFs zusammenführen/teilen Über API ✅Nativ
Wasserzeichen Über API ✅Nativ
Arbeitet offline
Selbst gehostet

Vorbereitung auf die Migration

Voraussetzungen

Stellen Sie sicher, dass Ihre Umgebung diese Anforderungen erfüllt:

  • .NET Framework 4.6.2+ oder .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ oder VS Code mit C#-Erweiterung
  • NuGet Package Manager Zugang
  • IronPDF-Lizenzschlüssel (kostenlose Testversion erhältlich unter ironpdf.com)

CraftMyPDF-Nutzung prüfen

Führen Sie diese Befehle in Ihrem Lösungsverzeichnis aus, um alle CraftMyPDF-Referenzen zu identifizieren:

# Find all CraftMyPDFusages in your codebase
grep -r "CraftMyPdf\|craftmypdf\|api.craftmypdf.com" --include="*.cs" .
grep -r "X-API-KEY" --include="*.cs" .

# Find API key references
grep -r "your-api-key\|template-id\|template_id" --include="*.cs" .

# Find NuGet package references
grep -r "CraftMyPdf\|RestSharp" --include="*.csproj" .
# Find all CraftMyPDFusages in your codebase
grep -r "CraftMyPdf\|craftmypdf\|api.craftmypdf.com" --include="*.cs" .
grep -r "X-API-KEY" --include="*.cs" .

# Find API key references
grep -r "your-api-key\|template-id\|template_id" --include="*.cs" .

# Find NuGet package references
grep -r "CraftMyPdf\|RestSharp" --include="*.csproj" .
SHELL

Bahnbrechende Änderungen, die zu erwarten sind

Ändern Sie CraftMyPDF IronPDF Auswirkungen
Architektur Cloud REST API Lokale .NET-Bibliothek HTTP-Aufrufe entfernen
Vorlagen Proprietärer Editor Standard-HTML Vorlagen in HTML konvertieren
API-Schlüssel Für jeden Aufruf erforderlich Lizenz beim Start Handhabung von API-Schlüsseln entfernen
Async-Muster Erforderlich (HTTP) Optional Falls gewünscht, entfernen Sie await
Fehlerbehandlung HTTP-Statuscodes Ausnahmen Try/Catch-Muster ändern
Datenbindung JSON-Vorlagen String-Interpolation Vereinfachen Sie die Datenbindung

Schritt-für-Schritt-Migrationsprozess

Schritt 1: NuGet-Pakete aktualisieren

Entfernen Sie die HTTP-Client-Bibliothek und installieren Sie IronPDF:

# Remove RestSharp HTTP client
dotnet remove package RestSharp

# Install IronPDF
dotnet add package IronPdf
# Remove RestSharp HTTP client
dotnet remove package RestSharp

# Install IronPDF
dotnet add package IronPdf
SHELL

Schritt 2: Namensraumreferenzen aktualisieren

Ersetzen Sie HTTP-Client-Namespaces durch IronPDF:

// Remove these
using RestSharp;
using System.IO;

// Add this
using IronPdf;
// Remove these
using RestSharp;
using System.IO;

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

Schritt 3: Lizenz konfigurieren (einmalig beim Starten)

Ersetzen Sie die API-Schlüssel-Header für jede Anfrage durch eine einzige Lizenzkonfiguration:

// Add at application startup (Program.cs or Global.asax)
// This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
// This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Komplette API-Migrationsreferenz

API-Endpunkt-Zuordnung

CraftMyPDF IronPDF Notizen
POST /v1/create renderer.RenderHtmlAsPdf(html) Kein API-Aufruf erforderlich
X-API-KEY Kopfzeile License.LicenseKey = "..." Einmal beim Start einstellen
Vorlage_id Standard-HTML-Zeichenfolge Verwenden Sie beliebiges HTML
{%name%} Platzhalter $"{Name}" C#-Interpolation Standard .NET
POST /v1/merge PdfDocument.Merge(pdfs) Lokal, sofort
POST /v1/add-watermark pdf.ApplyWatermark(html) HTML-basiert
Webhook-Rückrufe Nicht erforderlich Die Ergebnisse sind synchron
Tarifbegrenzung Nicht zutreffend Keine Grenzen

Konfigurations-Mapping

CraftMyPDF-Option IronPDF-Äquivalent Notizen
Vorlage_id HTML-Zeichenkette Verwenden Sie Ihr eigenes HTML
Daten JSON C# Interpolation $"Hallo {Name}"
page_size: "A4" PaperSize = PdfPaperSize.A4
Orientierung: "landscape" PaperOrientation = Querformat
margin_top: 20 MarginTop = 20 In Millimetern
Kopfzeile HtmlKopfzeile Volle HTML-Unterstützung
Fußzeile HtmlFooter Volle HTML-Unterstützung

Beispiele für die Code-Migration

HTML-zu-PDF-Konvertierung

Der häufigste Vorgang demonstriert den grundlegenden Architekturwechsel von der Cloud-API zum lokalen Rendering.

CraftMyPDF-Einführung:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
            }
        });

        var response = client.Execute(request);
        File.WriteAllBytes("output.pdf", response.RawBytes);
    }
}
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
            }
        });

        var response = client.Execute(request);
        File.WriteAllBytes("output.pdf", response.RawBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF eliminiert die RestClient-Einrichtung, API-Schlüssel-Header, Vorlagen-IDs und die HTTP-Antwortbearbeitung und reduziert einen 15-zeiligen Cloud-Vorgang auf 4 Zeilen lokalen Code. Weitere Optionen finden Sie in der HTML zu PDF Dokumentation.

URL zu PDF-Konvertierung

CraftMyPDF-Einführung:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                url = "https://example.com"
            },
            export_type = "pdf"
        });

        var response = client.Execute(request);
        File.WriteAllBytes("webpage.pdf", response.RawBytes);
    }
}
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                url = "https://example.com"
            },
            export_type = "pdf"
        });

        var response = client.Execute(request);
        File.WriteAllBytes("webpage.pdf", response.RawBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die Methode RenderUrlAsPdf vonIronPDFerfasst die komplette Webseite einschließlich des mit JavaScript gerenderten Inhalts. Weitere Optionen finden Sie in der URL zur PDF-Dokumentation.

Kopf- und Fußzeilen

CraftMyPDF-Einführung:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Document Content</h1>",
                header = "<div>Page Header</div>",
                footer = "<div>Page {page} of {total_pages}</div>"
            }
        });

        var response = client.Execute(request);
        File.WriteAllBytes("document.pdf", response.RawBytes);
    }
}
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Document Content</h1>",
                header = "<div>Page Header</div>",
                footer = "<div>Page {page} of {total_pages}</div>"
            }
        });

        var response = client.Execute(request);
        File.WriteAllBytes("document.pdf", response.RawBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header"
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}"
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
        pdf.SaveAs("document.pdf");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header"
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}"
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
        pdf.SaveAs("document.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.

Vorlagenvariablen-Konvertierung

CraftMyPDF verwendet proprietäre Vorlagenplatzhalter, die in C#-String-Interpolation umgewandelt werden müssen:

CraftMyPDF-Muster:

// CraftMyPDFtemplate variables
request.AddJsonBody(new
{
    template_id = "invoice-template",
    data = new
    {
        customer = "John Doe",
        amount = "$1,000",
        items = invoiceItems
    }
});
// CraftMyPDFtemplate variables
request.AddJsonBody(new
{
    template_id = "invoice-template",
    data = new
    {
        customer = "John Doe",
        amount = "$1,000",
        items = invoiceItems
    }
});
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Muster:

// C# string interpolation
var html = $@"
<html>
<body>
    <h1>Invoice</h1>
    <p>Customer: {customerName}</p>
    <p>Amount: {amount}</p>
    {GenerateItemsTable(invoiceItems)}
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);
// C# string interpolation
var html = $@"
<html>
<body>
    <h1>Invoice</h1>
    <p>Customer: {customerName}</p>
    <p>Amount: {amount}</p>
    {GenerateItemsTable(invoiceItems)}
</body>
</html>";

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

Kritische Hinweise zur Migration

Allen HTTP-Code entfernen

Die wichtigste Änderung ist die Beseitigung von Netzwerkabhängigkeiten.IronPDFwird lokal ausgeführt - kein RestClient, keine API-Aufrufe, keine Antwortverarbeitung:

// CraftMyPDF- HTTP required
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
var response = await client.ExecuteAsync(request);

//IronPDF- no HTTP
var pdf = renderer.RenderHtmlAsPdf(html);
// CraftMyPDF- HTTP required
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
var response = await client.ExecuteAsync(request);

//IronPDF- no HTTP
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Entferne Code zur Ratenbegrenzung

CraftMyPDF setzt API-Ratenlimits fest, die eine Wiederholungslogik erfordern.IronPDFhat keine Grenzen:

// CraftMyPDF- needed to avoid 429 errors
await Task.Delay(100);
if (response.StatusCode == TooManyRequests) { /* retry */ }

//IronPDF- no limits, just generate
var pdf = renderer.RenderHtmlAsPdf(html);
// Remove all rate limit code!
// CraftMyPDF- needed to avoid 429 errors
await Task.Delay(100);
if (response.StatusCode == TooManyRequests) { /* retry */ }

//IronPDF- no limits, just generate
var pdf = renderer.RenderHtmlAsPdf(html);
// Remove all rate limit code!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Webhook-Handler entfernen

CraftMyPDF verwendet asynchrone Webhooks für die PDF-Vervollständigung.IronPDFist synchron, d. h. die PDF-Datei ist sofort fertig:

// CraftMyPDF- webhook callback required
// POST with webhook_url, wait for callback

//IronPDF- PDF ready immediately
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No callback needed!
// CraftMyPDF- webhook callback required
// POST with webhook_url, wait for callback

//IronPDF- PDF ready immediately
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No callback needed!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Sync standardmäßig

Entfernen Sie async/await-Muster, wenn sie nur für HTTP-Aufrufe benötigt werden:

// CraftMyPDF- async required
var response = await client.ExecuteAsync(request);

//IronPDF- sync by default (async available if needed)
var pdf = renderer.RenderHtmlAsPdf(html);
// CraftMyPDF- async required
var response = await client.ExecuteAsync(request);

//IronPDF- sync by default (async available if needed)
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Post-Migrations-Checkliste

Überprüfen Sie nach Abschluss der Codemigration Folgendes:

  • [Führen Sie alle Tests zur PDF-Erzeugung durch
  • [Vergleichen Sie die Ausgabequalität (die Chromium-Engine vonIronPDFrendert pixelgenau)
  • [Messung der Leistungsverbesserung (Millisekunden vs. Sekunden)
  • [Überprüfen Sie, ob alle Vorlagen korrekt konvertiert wurden
  • [Stapelverarbeitung ohne Ratenbegrenzung testen
  • [Testen in allen Zielumgebungen
  • [CI/CD-Pipelines aktualisieren
  • [ ] CraftMyPDF-Abonnement kündigen
  • [API-Schlüssel aus secrets/config entfernen

Zukunftssicherheit für Ihre PDF-Infrastruktur

Mit .NET 10 am Horizont und C# 14, das neue Sprachfunktionen einführt, werden durch die Wahl einer lokalen PDF-Bibliothek die Risiken der Veraltung von Cloud-APIs und Bedenken hinsichtlich der Versionskompatibilität vermieden. Das unbefristete Lizenzierungsmodell vonIronPDFbedeutet, dass sich Ihre Migrationsinvestition auf unbestimmte Zeit auszahlt, da sich die Projekte bis ins Jahr 2025 und 2026 erstrecken, ohne dass wiederkehrende Abonnementkosten anfallen oder Daten Ihre Infrastruktur verlassen.

Zusätzliche Ressourcen


Durch die Migration von CraftMyPDFzuIronPDFwerden Cloud-Abhängigkeiten, Netzwerklatenz, Kosten pro PDF und die Bindung an Vorlagen eliminiert, während gleichzeitig ein pixelgenaues Chromium-Rendering bereitgestellt wird, das offline läuft. Der Übergang von REST-API-Aufrufen zu lokalen Methodenaufrufen vereinfacht Ihre Codebasis und sorgt dafür, dass sensible Dokumentdaten in Ihrer Infrastruktur bleiben.

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