Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de GrabzIt à IronPDF en C#

La migration de GrabzItversIronPDFtransforme votre flux de travail PDF .NET d'un service de capture d'écran basé sur le cloud avec une complexité de rappel à une bibliothèque en cours de processus qui génère de véritables PDF vectoriels avec du texte sélectionnable et consultable. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine les dépendances de serveurs externes, les gestionnaires de rappel et la tarification par capture pour les développeurs .NET professionnels.

Pourquoi migrer de GrabzItà IronPDF

Le problème de l'architecture de GrabzIt

GrabzIt est un service de capture d'écran et de PDF basé sur le cloud. Bien qu'il soit pratique pour les intégrations rapides, il présente des limites architecturales fondamentales :

  1. PDF basés sur des images : GrabzItcrée des PDF basés sur des captures d'écran où le texte n'est pas sélectionnable — essentiellement des images enveloppées au format PDF. Il s'agit d'une limite fondamentale pour tout cas d'utilisation nécessitant la manipulation de texte ou l'accessibilité.

  2. Traitement externe : Tout le contenu est envoyé aux serveurs de GrabzItpour traitement, ce qui soulève des problèmes de confidentialité et de conformité pour les données sensibles. Votre contenu HTML quitte votre infrastructure.

  3. Complexité des rappels : GrabzItutilise un modèle de rappel asynchrone qui nécessite une infrastructure de gestion des webhooks. Vous devez mettre en place des points de terminaison pour recevoir les résultats, ce qui ajoute à la complexité de l'architecture.

  4. Tarification par capture : Le modèle de paiement à l'utilisation peut devenir coûteux à grande échelle. Chaque génération de PDF a un coût.

  5. Pas de recherche de texte : les fichiers PDF étant basés sur des images, la recherche et l'extraction de texte ne fonctionnent pas sans OCR, ce qui représente une étape et un coût supplémentaires.

  6. Taille des fichiers plus importante : les PDF basés sur des images sont nettement plus volumineux que les PDF basés sur des vecteurs, souvent 5 à 10 fois plus volumineux.

  7. Dépendance au réseau : Impossible de générer des PDF sans connexion Internet, ce qui rend les scénarios hors ligne impossibles.

  8. Latence : Chaque génération de PDF nécessite un aller-retour réseau vers des serveurs externes, ajoutant une latence de 500 ms à 5 s.

Comparaison GrabzItvs IronPDF

Aspect GrabzIt IronPDF
Type de PDF Basée sur l'image (capture d'écran) True vector PDF
Sélection du texte Pas possible Sélection du texte intégral
Recherche de texte Nécessite une OCR Recherche native
Lieu de traitement Serveurs externes Local/processus
Confidentialité Données envoyées à l'extérieur Les données restent locales
Temps de latence Trajet aller-retour sur le réseau (500ms-5s) Traitement local (~100ms)
Modèle de tarification Par capture Licence par développeur
Capacité hors ligne Non Oui
Taille du fichier Grand (données d'image) Petit (données vectorielles)
Rappel obligatoire Oui (asynchrone) Non (sync/async)
Support CSS/JS Limité Moteur Chromium complet

Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 jusqu'en 2025 et 2026,IronPDFconstitue une base à l'épreuve du temps avec un traitement local qui s'intègre nativement aux modèles .NET modernes.


Évaluation de la complexité de la migration

Estimation de l'effort par fonctionnalité

Fonction Complexité de la migration Notes
HTML vers PDF Très faible Remplacement direct de la méthode
URL vers PDF Très faible Remplacement direct de la méthode
HTML vers image Faible Rendre le PDF puis le convertir
Taille de la page/marges Faible Cartographie des propriétés
Manipulateurs de rappel Faible Les supprimer entièrement
Filigranes Faible Approche HTML
En-têtes/Pieds de page Moyen Conversion de modèles en HTML
Clés d'authentification Très faible Supprimer les clés GrabzIt

Changement de paradigme

Le changement fondamental de cette migration GrabzItréside dans le passage d'un traitement cloud asynchrone basé sur des rappels à une génération synchrone en interne :

GrabzIt :   Envoyer du HTML → Attendre le rappel → Récupérer le résultat du serveur
IronPDF :   Rendre HTML → Obtenir le PDF immédiatement

Avant de commencer

Prérequis

  1. Version .NET :IronPDFprend en charge .NET Framework 4.6.2+ et .NET Core 3.1+ / .NET 5/6/7/8/9+.
  2. Clé de licence : Obtenez votre clé de licenceIronPDFsur ironpdf.com
  3. Planifier la mise hors service de l'infrastructure : documenter les gestionnaires de rappel et les points de terminaison webhook pour la mise hors service

Identifier toutes les utilisations de GrabzIt

# 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

Modifications du paquet NuGet

# 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

Migration rapide

Étape 1 : Mise à jour de la configuration de la licence

Avant (GrabzIt):

GrabzIt requiert une clé et un secret d'application pour chaque instanciation du client :

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

Après (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

Étape 2 : mise à jour des importations de l'espace de noms

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

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

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

Référence API complète

Mappage de GrabzItClient vers IronPDF

Méthode GrabzIt Équivalent d'IronPDF Notes
new GrabzItClient(key, secret) new ChromePdfRenderer() Pas d'authentification nécessaire
HTMLToPDF(html) renderer.RenderHtmlAsPdf(html) Renvoie directement le PDF
URLToPDF(url) renderer.RenderUrlAsPdf(url) Renvoie directement le PDF
HTMLToImage(html) pdf.ToBitmap() Rendre puis convertir
Save(callbackUrl) pdf.SaveAs(path) Résultat immédiat
SaveTo(filePath) pdf.SaveAs(filePath) Même fonctionnalité
GetResult(id) N/A Aucun rappel n'est nécessaire
GetStatus(id) N/A Fonctionnement synchrone

Mappage des options PDF aux options de rendu

GrabzItPDFOptions Propriété d'IronPDF Notes
Taille de la page (A4, Lettre) RenderingOptions.PaperSize Utiliser l'énumération PdfPaperSize
CustomId N/A Pas nécessaire
MarginTop RenderingOptions.MarginTop Même unité (mm)
MarginBottom RenderingOptions.MarginBottom Même unité (mm)

ImageOptions versIronPDFMapping

GrabzItImageOptions Équivalent d'IronPDF Notes
Format (png, jpg) bitmap.Save(path, ImageFormat.Png) Après ToBitmap()
Largeur RenderingOptions.ViewPortWidth Largeur de l'écran
Hauteur RenderingOptions.ViewPortHeight Hauteur de la fenêtre de visualisation

Exemples de migration de code

Exemple 1 : Conversion HTML vers PDF

Avant (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

Après (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

La différence est substantielle : GrabzItrequiert des informations d'identification API (Votre_CLÉ_APPLICATION, Votre_SECRET_APPLICATION), crée un objet PDFOptions avec un ID personnalisé, et le résultat est un PDF basé sur l'image envoyé via des serveurs externes. Le ChromePdfRenderer d'IronPDF génère localement un véritable PDF vectoriel avec du texte sélectionnable - pas d'identifiants, pas d'appels réseau, pas de rappels. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.

Exemple 2 : Conversion d'une URL en PDF

Avant (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

Après (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 nécessite la configuration de PageSize.A4 à travers l'objet options et l'authentification avec des serveurs externes. La méthode RenderUrlAsPdf() d'IronPDF accepte directement l'URL et la rend localement à l'aide d'un moteur Chromium complet avec un support CSS et JavaScript complet. En savoir plus sur la conversion d'URL en PDF.

Exemple 3 : Conversion de HTML en image

Avant (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

Après (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 fournit une méthode HTMLToImage() dédiée avec ImageOptions pour la configuration du format, de la largeur et de la hauteur.IronPDFparvient au même résultat en commençant par rendre HTML en PDF à l'aide de RenderHtmlAsPdf(), puis en convertissant en bitmap avec ToBitmap(). Cette approche permet d'obtenir le PDF et l'image à partir d'une seule opération de rendu.


Notesde migration essentielles

Aucun rappel n'est nécessaire

Le changement architectural le plus important est l'élimination totale des gestionnaires de rappel :

// 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! Non callback 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! Non callback needed.
$vbLabelText   $csharpLabel

Supprimer tous les gestionnaires de rappel GrabzIt (fichiers .ashx, points d'extrémité des gestionnaires, configuration des webhooks) après la migration.

Vrais PDF vectoriels

GrabzIt crée des PDF à base d'images où le texte n'est pas sélectionnable.IronPDFgénère de véritables PDF vectoriels :

// 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

Voir la documentation sur l'extraction de texte pour plus de détails.

Taille des fichiers réduite

Les PDF vectoriels sont généralement 5 à 10 fois plus petits que les PDF à base d'images de GrabzIt. Cela permet d'améliorer les coûts de stockage, les temps de téléchargement et la possibilité d'envoyer des pièces jointes par courrier électronique.

Supprimer les informations d'identification de l'API

GrabzIt nécessite des identifiants API pour chaque opération :

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

IronPDF utilise une clé de licence unique définie une seule fois au démarrage de l'application - pas d'authentification par demande.


Dépannage

Édition 1 : GrabzItClient introuvable

Problème : après la suppression de GrabzIt, les références GrabzItClient provoquent des erreurs de compilation.

Solution : Remplacer par 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

Édition 2 : PDFOptions introuvables

Problème : la classe PDFOptions n'existe pas dans IronPDF.

Solution : Utilisez la propriété RenderingOptions :

// 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

Sujet 3 : Les gestionnaires de rappel sont toujours référencés

Problème : L'application attend des points de terminaison de rappel.

Solution : Supprimer entièrement l'infrastructure de rappel.IronPDFrenvoie les résultats de manière synchrone - aucun webhook n'est nécessaire.

Edition 4 : ImageOptions Not Found

Problème : la classe ImageOptions n'existe pas dans IronPDF.

Solution : Générer d'abord un PDF, puis convertir :

// 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

Liste de contrôle de la migration

Pré-migration

  • Inventorier tous les appels à l'API GrabzItdans le code source
  • Identifier les gestionnaires de rappel et les points de terminaison webhook
  • Documenter les options et modèles actuels de GrabzIt
  • Obtenir une clé de licence IronPDF
  • Mise hors service du gestionnaire de rappel du plan

Migration de code

  • Installez le package NuGet IronPdf : dotnet add package IronPdf
  • Supprimer le package NuGet GrabzIt : dotnet remove package GrabzIt
  • Remplacez GrabzItClient par ChromePdfRenderer
  • Convertir HTMLToPDF() en RenderHtmlAsPdf()
  • Convertir URLToPDF() en RenderUrlAsPdf()
  • Remplacez Save(callback) par SaveAs(path)
  • Mettre à jour les options de PDFOptions vers RenderingOptions

Migration des infrastructures

  • Supprimer les fichiers de gestionnaire de rappel ( .ashx , etc. )
  • Supprimez les clés API GrabzItde la configuration
  • Supprimer la configuration de l'URL du webhook
  • Ajouter la clé de licenceIronPDFà la configuration
  • Supprimer le code d'interrogation/de vérification d'état

Essai

  • Tester la conversion de HTML en PDF
  • Test de conversion d'URL en PDF
  • Vérifier que le texte est sélectionnable dans les fichiers PDF de sortie
  • L'extraction de texte de test fonctionne (sans OCR)
  • Vérifiez que la taille des fichiers est plus petite
  • Test de performance sans latence réseau

Après la migration

  • Annuler l'abonnement GrabzIt
  • Code du gestionnaire de rappel d'archive
  • Mise à jour de la documentation
  • Surveiller les erreurs liées à GrabzIt

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite