Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von GrabzIt zu IronPDF in C#

Die Migration von GrabzItzuIronPDFverwandelt Ihren .NET-PDF-Workflow von einem cloudbasierten Screenshot-Erfassungsdienst mit komplexem Callback in eine prozessinterne Bibliothek, die echte Vektor-PDFs mit auswählbarem, durchsuchbarem Text erzeugt. Dieser Leitfaden bietet einen umfassenden, schrittweisen Migrationspfad, der externe Serverabhängigkeiten, Callback-Handler und Preise pro Aufnahme für professionelle .NET-Entwickler eliminiert.

Warum von GrabzItzuIronPDFmigrieren

Das GrabzIt-Architektur-Problem

GrabzIt ist ein cloudbasierter Screenshot- und PDF-Erfassungsdienst. Obwohl er für schnelle Integrationen geeignet ist, hat er grundlegende architektonische Einschränkungen:

  1. Bildbasierte PDFs: GrabzIterstellt Screenshot-basierte PDFs, bei denen der Text nicht auswählbar ist – im Wesentlichen Bilder im PDF-Format. Dies ist eine grundlegende Einschränkung für jeden Anwendungsfall, der Textmanipulation oder Barrierefreiheit erfordert.

  2. Externe Verarbeitung: Alle Inhalte werden zur Verarbeitung an die Server von GrabzItgesendet – dies wirft Bedenken hinsichtlich Datenschutz und Compliance bei sensiblen Daten auf. Ihr HTML-Inhalt verlässt Ihre Infrastruktur.

  3. Callback-Komplexität: GrabzItverwendet ein asynchrones Callback-Modell, das eine Webhook-Handling-Infrastruktur erfordert. Sie müssen Endpunkte einrichten, um die Ergebnisse zu erhalten, was die Komplexität der Architektur erhöht.

  4. Preisgestaltung pro Erfassung: Das Pay-per-Use-Modell kann bei großem Umfang teuer werden. Jede PDF-Erstellung ist mit Kosten verbunden.

  5. Keine Textsuche: Da PDFs bildbasiert sind, funktionieren Textsuche und -extraktion ohne OCR nicht – ein zusätzlicher Arbeitsschritt und Kostenfaktor.

  6. Größere Dateigrößen: Bildbasierte PDFs sind wesentlich größer als vektorbasierte PDFs, oft 5- bis 10-mal so groß.

  7. Netzwerkabhängigkeit: Ohne Internetverbindung können keine PDFs generiert werden, wodurch Offline-Szenarien unmöglich sind.

  8. Latenz: Jede PDF-Generierung erfordert einen Netzwerk-Roundtrip zu externen Servern, was eine Latenz von 500 ms bis 5 s zur Folge hat.

GrabzItvsIronPDFVergleich

Aspekt GrabzIt IronPDF
PDF-Typ Bildbasiert (Bildschirmfoto) Echtes Vektor-PDF
Textauswahl Nicht möglich Auswahl des Volltextes
Text-Suche Benötigt OCR Nativ durchsuchbar
Ort der Bearbeitung Externe Server Lokal/Prozess
Datenschutz Extern gesendete Daten Daten bleiben lokal
Latenzzeit Netzwerk-Roundtrip (500ms-5s) Lokale Verarbeitung (~100ms)
Preismodell Pro-Erfassung Pro-Entwickler-Lizenz
Offline-Fähigkeit Nein Ja
Dateigröße Groß (Bilddaten) Klein (Vektordaten)
Rückruf erforderlich Ja (asynchron) Nein (sync/async)
CSS/JS-Unterstützung Beschränkt Vollständige Chromium-Engine

Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietetIronPDFeine zukunftssichere Grundlage mit lokaler Verarbeitung, die sich nativ in moderne .NET-Muster integriert.


Migrationskomplexitätsbewertung

Geschätzter Aufwand nach Merkmalen

Feature Komplexität der Migration Notizen
HTML zu PDF Sehr niedrig Direkte Methodenersetzung
URL zu PDF Sehr niedrig Direkte Methodenersetzung
HTML zu Bild Niedrig PDF rendern und konvertieren
Seitengröße/Randabstände Niedrig Eigenschaften-Zuordnung
Callback-Handler Niedrig Sie vollständig löschen
Wasserzeichen Niedrig HTML-basierter Ansatz
Kopf-/Fußzeilen Medium Konvertierung von Vorlagen in HTML
Authentifizierungs-Schlüssel Sehr niedrig GrabzIt-Schlüssel entfernen

Paradigmen-Verschiebung

Der grundlegende Wandel bei dieser GrabzIt-Migration besteht in der Umstellung von asynchroner, auf Rückruffunktionen basierender Cloud-Verarbeitung auf synchrone In-Process-Generierung:

GrabzIt:   Senden von HTML → Warten auf Rückruf → Abrufen des Ergebnisses vom Server
IronPDF:   HTML rendern → PDF sofort erhalten

Bevor Sie beginnen

Voraussetzungen

  1. .NET-Version:IronPDFunterstützt .NET Framework 4.6.2+ und .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel erhalten Sie auf ironpdf.com.
  3. Infrastrukturentfernung planen: Callback-Handler und Webhook-Endpunkte für die Stilllegung dokumentieren

Die gesamte GrabzIt-Nutzung identifizieren

# Find GrabzItclient usage
grep -r "GrabzItClient\|GrabzIt\." --include="*.cs" .

# Find callback handlers
grep -r "GrabzIt\|grabzit" --include="*.ashx" --include="*.aspx" --include="*.cs" .

# Find configuration
grep -r "APPLICATION_KEY\|APPLICATION_SECRET\|grabzit" --include="*.config" --include="*.json" .
# Find GrabzItclient usage
grep -r "GrabzItClient\|GrabzIt\." --include="*.cs" .

# Find callback handlers
grep -r "GrabzIt\|grabzit" --include="*.ashx" --include="*.aspx" --include="*.cs" .

# Find configuration
grep -r "APPLICATION_KEY\|APPLICATION_SECRET\|grabzit" --include="*.config" --include="*.json" .
SHELL

NuGet-Paketänderungen

# Remove GrabzIt
dotnet remove package GrabzIt

# Install IronPDF
dotnet add package IronPdf
# Remove GrabzIt
dotnet remove package GrabzIt

# Install IronPDF
dotnet add package IronPdf
SHELL

Schnellstart Migration

Schritt 1: Lizenzkonfiguration aktualisieren

Vor (GrabzIt):

GrabzIt erfordert für jede Client-Instanziierung einen Anwendungsschlüssel und ein Geheimnis:

var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

// Then create renderer without credentials
var renderer = new ChromePdfRenderer();
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Then create renderer without credentials
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Schritt 2: Aktualisieren der Namensraum-Importe

// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;

// After (IronPDF)
using IronPdf;
// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;

// After (IronPDF)
using IronPdf;
$vbLabelText   $csharpLabel

Komplette API-Referenz

GrabzItClient-zu-IronPDF-Zuordnung

GrabzIt-Methode IronPDF-Äquivalent Notizen
new GrabzItClient(Schlüssel, Geheimnis) new ChromePdfRenderer() Keine Authentifizierung erforderlich
HTMLToPDF(html) renderer.RenderHtmlAsPdf(html) Gibt PDF direkt zurück
URLToPDF(url) renderer.RenderUrlAsPdf(url) Gibt PDF direkt zurück
HTMLToImage(html) pdf.ToBitmap() Rendern und konvertieren
Speichern(callbackUrl) pdf.SaveAs(Pfad) Unmittelbares Ergebnis
SaveTo(filePath) pdf.SaveAs(filePath) Gleiche Funktionalität
GetResult(id) Nicht anwendbar Keine Rückrufe erforderlich
GetStatus(id) Nicht anwendbar Synchroner Betrieb

Zuordnung von PDFOptions zu RenderingOptions

GrabzItPDFOptionen IronPDFEigenschaft Notizen
Seitengröße (A4, Letter) RenderingOptions.PaperSize Verwenden Sie PdfPaperSize enum
BenutzerdefinierteId Nicht anwendbar Nicht erforderlich
MarginTop RenderingOptions.MarginTop Gleiche Einheit (mm)
MarginBottom RenderingOptions.MarginBottom Gleiche Einheit (mm)

Zuordnung von ImageOptions zu IronPDF

GrabzItImageOptions IronPDF-Äquivalent Notizen
Format (png, jpg) bitmap.Save(Pfad, ImageFormat.Png) Nach ToBitmap()
Breite RenderingOptions.ViewPortWidth Breite des Ansichtsfensters
Höhe RenderingOptions.ViewPortHeight Höhe des Ansichtsfensters

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (GrabzIt):

// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;

class Program
{
    static void Main()
    {
        var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
        var options = new PDFOptions();
        options.CustomId = "my-pdf";

        grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options);
        grabzIt.SaveTo("output.pdf");
    }
}
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;

class Program
{
    static void Main()
    {
        var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
        var options = new PDFOptions();
        options.CustomId = "my-pdf";

        grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options);
        grabzIt.SaveTo("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Der Unterschied ist erheblich: GrabzIterfordert API-Anmeldeinformationen (YOUR_APPLICATION_KEY, YOUR_APPLICATION_SECRET), erstellt ein PDFOptions-Objekt mit einer benutzerdefinierten ID und das Ergebnis ist ein bildbasiertes PDF, das über externe Server gesendet wird. Der ChromePdfRenderer vonIronPDFerzeugt lokal ein echtes Vektor-PDF mit auswählbarem Text - ohne Anmeldeinformationen, ohne Netzwerkaufrufe, ohne Rückrufe. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vor (GrabzIt):

// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;

class Program
{
    static void Main()
    {
        var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
        var options = new PDFOptions();
        options.PageSize = PageSize.A4;

        grabzIt.URLToPDF("https://www.example.com", options);
        grabzIt.SaveTo("webpage.pdf");
    }
}
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;

class Program
{
    static void Main()
    {
        var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
        var options = new PDFOptions();
        options.PageSize = PageSize.A4;

        grabzIt.URLToPDF("https://www.example.com", options);
        grabzIt.SaveTo("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

GrabzIt erfordert die Konfiguration von PageSize.A4 über das Optionsobjekt und die Authentifizierung bei externen Servern. Die Methode RenderUrlAsPdf() vonIronPDFnimmt die URL direkt entgegen und rendert sie lokal mit einer vollständigen Chromium-Engine mit vollständiger CSS- und JavaScript-Unterstützung. Erfahren Sie mehr über die URL in PDF Konvertierung.

Beispiel 3: Konvertierung von HTML in Bilder

Vor (GrabzIt):

// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;

class Program
{
    static void Main()
    {
        var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
        var options = new ImageOptions();
        options.Format = ImageFormat.png;
        options.Width = 800;
        options.Height = 600;

        grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options);
        grabzIt.SaveTo("output.png");
    }
}
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;

class Program
{
    static void Main()
    {
        var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
        var options = new ImageOptions();
        options.Format = ImageFormat.png;
        options.Width = 800;
        options.Height = 600;

        grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options);
        grabzIt.SaveTo("output.png");
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        var images = pdf.ToBitmap();
        images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        var images = pdf.ToBitmap();
        images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
    }
}
$vbLabelText   $csharpLabel

GrabzIt bietet eine eigene HTMLToImage()-Methode mit ImageOptions für die Konfiguration von Format, Breite und Höhe.IronPDFerzielt das gleiche Ergebnis, indem es zunächst HTML mit RenderHtmlAsPdf() in PDF rendert und dann mit ToBitmap() in Bitmap konvertiert. Bei diesem Ansatz erhalten Sie sowohl die PDF- als auch die Bildausgabe in einem einzigen Rendervorgang.


Kritische Hinweise zur Migration

Keine Rückrufe erforderlich

Die wichtigste architektonische Änderung ist die vollständige Abschaffung der Callback-Handler:

// GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options);
grabzIt.Save("https://myserver.com/grabzit-callback");  // Wait for callback...

// Callback handler (separate endpoint)
public class GrabzItHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string id = context.Request.QueryString["id"];
        GrabzItClient grabzIt = new GrabzItClient("APP_KEY", "APP_SECRET");
        GrabzItFile file = grabzIt.GetResult(id);
        file.Save("output.pdf");
    }
}

// IronPDF: Synchronous - result immediately available
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");  // Done!Neincallback needed.
// GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options);
grabzIt.Save("https://myserver.com/grabzit-callback");  // Wait for callback...

// Callback handler (separate endpoint)
public class GrabzItHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string id = context.Request.QueryString["id"];
        GrabzItClient grabzIt = new GrabzItClient("APP_KEY", "APP_SECRET");
        GrabzItFile file = grabzIt.GetResult(id);
        file.Save("output.pdf");
    }
}

// IronPDF: Synchronous - result immediately available
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");  // Done!Neincallback needed.
$vbLabelText   $csharpLabel

Löschen Sie alle GrabzItCallback Handler (.ashx Dateien, Handler Endpunkte, Webhook Konfiguration) nach der Migration.

Echte Vektor-PDFs

GrabzIt erstellt bildbasierte PDFs, bei denen der Text nicht auswählbar ist.IronPDFerzeugt echte Vektor-PDFs:

// With IronPDF, text extraction works natively
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();  // Works without OCR!
// With IronPDF, text extraction works natively
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();  // Works without OCR!
$vbLabelText   $csharpLabel

Weitere Informationen finden Sie in der Textextraktionsdokumentation.

Kleine Dateigrößen

Vektorbasierte PDFs sind in der Regel 5-10x kleiner als die bildbasierten PDFs von GrabzIt. Dies verbessert die Speicherkosten, die Downloadzeiten und die Durchführbarkeit von E-Mail-Anhängen.

API-Zugangsdaten entfernen

GrabzIt benötigt für jeden Vorgang API-Anmeldedaten:

// Remove these from configuration
// YOUR_APPLICATION_KEY
// YOUR_APPLICATION_SECRET
// Remove these from configuration
// YOUR_APPLICATION_KEY
// YOUR_APPLICATION_SECRET
$vbLabelText   $csharpLabel

IronPDF verwendet einen einzigen Lizenzschlüssel, der einmalig beim Start der Anwendung festgelegt wird - keine Authentifizierung pro Anfrage.


Fehlerbehebung

Ausgabe 1: GrabzItClient nicht gefunden

Problem: Nach der Entfernung von GrabzItverursachen die Verweise GrabzItClient Kompilierungsfehler.

Lösung: Ersetzen Sie dies durch ChromePdfRenderer :

// Remove:
// var grabzIt = new GrabzItClient("KEY", "SECRET");

// Replace with:
var renderer = new ChromePdfRenderer();
// Remove:
// var grabzIt = new GrabzItClient("KEY", "SECRET");

// Replace with:
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Ausgabe 2: PDFOptions Not Found

Problem: Die Klasse PDFOptions existiert inIronPDFnicht.

Lösung: Verwenden Sie RenderingOptions Eigenschaft:

// GrabzIt
var options = new PDFOptions();
options.PageSize = PageSize.A4;

// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// GrabzIt
var options = new PDFOptions();
options.PageSize = PageSize.A4;

// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
$vbLabelText   $csharpLabel

Ausgabe 3: Callback-Handler werden immer noch referenziert

Problem: Die Anwendung erwartet Callback-Endpunkte.

Lösung: Die Callback-Infrastruktur vollständig entfernen.IronPDFliefert die Ergebnisse synchron - es werden keine Webhooks benötigt.

Ausgabe 4: ImageOptions Not Found

Problem: Die Klasse ImageOptions existiert inIronPDFnicht.

Lösung: Zuerst als PDF rendern, dann konvertieren:

// GrabzIt
var options = new ImageOptions();
options.Format = ImageFormat.png;
grabzIt.HTMLToImage(html, options);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
// GrabzIt
var options = new ImageOptions();
options.Format = ImageFormat.png;
grabzIt.HTMLToImage(html, options);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Inventarisierung aller GrabzIt-API-Aufrufe im Quellcode
  • Callback-Handler und Webhook-Endpunkte identifizieren
  • Dokumentation der aktuellen GrabzIt-Optionen und -Vorlagen
  • IronPDF-Lizenzschlüssel erhalten
  • Plan-Rückrufbearbeiter außer Betrieb nehmen

Code-Migration

  • Installieren Sie das IronPdf NuGet-Paket: dotnet add package IronPdf
  • Entfernen Sie das GrabzItNuGet-Paket: dotnet remove package GrabzIt
  • GrabzItClient durch ChromePdfRenderer ersetzen
  • Konvertiere HTMLToPDF() in RenderHtmlAsPdf()
  • URLToPDF() in RenderUrlAsPdf() konvertieren
  • Ersetzen Sie Save(callback) durch SaveAs(path)
  • Aktualisierungsoptionen von PDFOptions zu RenderingOptions

Infrastruktur-Migration

  • Löschen von Callback-Handler-Dateien ( .ashx , etc.)
  • GrabzIt-API-Schlüssel aus der Konfiguration entfernen
  • Webhook-URL-Konfiguration entfernen
  • Fügen Sie den IronPDF-Lizenzschlüssel zur Konfiguration hinzu
  • Code für Abfrage/Statusprüfung entfernen

Testen

  • Test der Konvertierung von HTML in PDF
  • Test der URL-zu-PDF-Konvertierung
  • Überprüfen, ob der Text in den ausgegebenen PDFs auswählbar ist
  • Test der Textextraktion funktioniert (ohne OCR)
  • Überprüfen Sie, ob die Dateigrößen kleiner sind.
  • Leistungstest ohne Netzwerklatenz

Nach der Migration

  • GrabzIt-Abonnement kündigen
  • Archiv-Callback-Handler-Code
  • Dokumentation aktualisieren
  • Auf etwaige GrabzIt-bezogene Fehler achten

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