IRONSOFTWAREHOME
VIDÉOS

Comment définir et éditer les métadonnées PDF en C#

Curtis Chau
Curtis Chau
Updated: 19 juillet 2026

La migration du SDK GdPicture.NET vers IronPDF offre aux développeurs .NET une approche ciblée et rationalisée de la génération de PDF. Ce guide fournit un chemin de migration complet, étape par étape, qui remplace les modèles SDK complexes d'imagerie documentaire par des API modernes, spécifiques au PDF et conçues pour le développement .NET contemporain.

Pourquoi migrer de GdPicture.NET SDKvers IronPDF

Les défis du SDK GdPicture.NET

GdPicture.NET SDK (aujourd'hui rebaptisé Nutrient) est un SDK d'imagerie documentaire complet qui présente plusieurs défis pour le développement axé sur le PDF :

  1. Surdimensionné pour les projets utilisant uniquement des PDF : le SDK GdPicture .NET est une Suite complète d'imagerie de documents comprenant la reconnaissance optique de caractères (OCR), la reconnaissance de codes-barres, la numérisation et le traitement d'images. Si vous n'avez besoin que de la fonctionnalité PDF, vous payez pour des fonctions que vous n'utiliserez jamais.

  2. Licences complexes : Plusieurs niveaux de produits (GdPicture .NET 14, GdPicture.API, Ultimate, Professional) avec des combinaisons de références complexes et des exigences d'abonnement annuel.

  3. Tarification Enterprise : Les coûts de licence commencent à 2 999 $ pour le plugin PDF seul, et peuvent atteindre plus de 10 000 $ pour l'édition Ultimate. Les licences par développeur ajoutent des frais généraux importants pour les équipes en pleine croissance.

  4. Courbe d'apprentissage abrupte : l'API est conçue autour de concepts d'imagerie de documents, et non de modèles .NET modernes. Les méthodes comme LicenseManager.RegisterKEY(), la vérification d'enum GdPictureStatus, et les pages avec indexation à partir de 1 semblent datées par rapport aux conventions modernes de C#.

  5. Modèle de code de statut : Chaque opération renvoie une énumération GdPictureStatus qui doit être vérifiée—aucune exception n'est lancée en cas d'erreur, rendant la gestion des erreurs verbeuse et répétitive.

  6. Gestion manuelle des ressources : Nécessite des appels explicites Dispose() ou Release(). Le SDK ne suit pas proprement les modèles d'élimination standard de .NET.

  7. Verrouillage de la version : L'espace de noms GdPicture14 inclut le numéro de version, rendant les mises à jour majeures de version nécessitant des changements d'espaces de noms dans l'ensemble de votre base de code.

  8. Confusion liée au changement de marque : Le récent changement de marque en " Nutrient " crée une fragmentation de la documentation entre gdpicture.com et nutrient.io, ce qui complique le support et l'apprentissage.

Comparaison GdPicture.NET SDKvs IronPDF

AspectGdPicture.NET SDKIronPDF
ObjectifSuite d'imagerie documentaire (trop pour le PDF)Bibliothèque spécifique aux PDF
Tarifs2 999 $ - 10 000 $ et plus pour les entreprisesCompétitif, évolutif par rapport à l'entreprise
Style APICodes d'état, gestion manuelleExceptions, IDisposable, modern .NET
Courbe d'apprentissageSteep (concepts SDK d'imagerie)Simple (familier avec HTML/CSS)
Rendu HTMLMoteur interne de baseDernière version de Chromium avec CSS3/JS
Indexation des pages1-indexé0-indexé (standard .NET)
Sécurité des filsSynchronisation manuelle requiseSécurité des threads dès la conception
Espace de nomsSpécifique à une version (GdPicture14)Stable (IronPdf)

IronPDF s'aligne sur les modèles et conventions modernes .NET, le rendant adapté pour les équipes sur les versions actuelles de .NET.


Évaluation de la complexité de la migration

Estimation de l'effort par fonctionnalité

FonctionComplexité de la migration
HTML vers PDFFaible
URL vers PDFFaible
Fusionner des PDFFaible
Diviser les PDFFaible
FiligranesFaible
Extraction de texteFaible
Protection par mot de passeMoyen
Champs de formulaireMoyen
Signatures numériquesMoyenne-élevée
OCRHaut
Reconnaissance des codes-barresN/A

Matrice de décision de migration

Votre situationRecommandation
Opérations au format PDF uniquementMigration - simplification et économies significatives
Utilisation intensive de l'OCRConsidérer IronOCR comme un produit compagnon
Besoins en matière de BarCode/scanningConservez GdPicture.NET SDKpour ces fonctionnalités, utilisezIronPdf.NET pour les PDF
Imagerie documentaire complèteÉvaluez si vous utilisez réellement toutes les fonctionnalités

Avant de commencer

Prérequis

  1. **Version .NET :**IronPDF prend en charge .NET Framework 4.6.2+ et .NET Core 2.0+ / .NET 5+
  2. Clé de licence : Obtenez votre clé de licence IronPDF sur IronPDF
  3. Sauvegarde : Créer une branche pour les travaux de migration

Identifier toutes les utilisations du SDK GdPicture.NET

# Find all GdPicture.NET SDKreferences in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .

# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
SHELL

Modifications du paquet NuGet

# Remove GdPicture.NET SDKpackages
dotnet remove package GdPicture.NET.14
dotnet remove package GdPicture.NET.14.API
dotnet remove package GdPicture
dotnet remove package GdPicture.API

# Install IronPDF
dotnet add package IronPdf
SHELL

Migration rapide

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

Avant (GdPicture.NET SDK):

// Must be called before any GdPicture.NET SDKoperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

Après (IronPDF):

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

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }

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

// Before (GdPicture.NET SDK)
using GdPicture14;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;

Étape 3 : Modèle de conversion de base

Le changement le plus important dans la migration du SDK GdPicture.NET est l'élimination du modèle de vérification d'état verbeux :

Avant (GdPicture.NET SDK):

using GdPicture14;

LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
    GdPictureStatus status = converter.LoadFromHTMLString("<h1>Hello World</h1>");

    if (status == GdPictureStatus.OK)
    {
        status = converter.SaveAsPDF("output.pdf");

        if (status != GdPictureStatus.OK)
        {
            Console.WriteLine($"Error: {status}");
        }
    }
    else
    {
        Console.WriteLine($"Load error: {status}");
    }
}

Après (IronPDF):

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

Différences Clés :

  • Pas de vérification d'état - exceptions en cas d'erreurs
  • Aucune disposition explicite n'est requise pour le moteur de rendu
  • API moderne et fluide
  • Rendu basé sur Chromium pour une meilleure prise en charge HTML/CSS

Référence API complète

Cartographie des espaces de noms

GdPicture.NET SDKIronPDF
GdPicture14IronPdf
GdPicture14.PDFIronPdf
GdPicture14.ImagingN/A (pas nécessaire)

Mappage des classes de base

GdPicture.NET SDKIronPDFDescription du projet
GdPicturePDFPdfDocumentClasse du document PDF principal
GdPictureDocumentConverterChromePdfRendererConversion HTML/URL en PDF
LicenseManagerIronPdf.LicenseGestion des licences
GdPictureStatusExceptionsGestion des erreurs

Méthodes de chargement des documents

GdPicture.NET SDKIronPDF
pdf.LoadFromFile(path, loadInMemory)PdfDocument.FromFile(path)
pdf.LoadFromFile(path, password, loadInMemory)PdfDocument.FromFile(path, password)
converter.LoadFromHTMLString(html)renderer.RenderHtmlAsPdf(html)
converter.LoadFromURL(url)renderer.RenderUrlAsPdf(url)

Opérations de la page

GdPicture.NET SDKIronPDF
pdf.GetPageCount()pdf.PageCount
pdf.SelectPage(pageNo)pdf.Pages[index]
pdf.GetPageWidth()pdf.Pages[i].Width
pdf.GetPageHeight()pdf.Pages[i].Height

Opérations de fusion et de division

GdPicture.NET SDKIronPDF
pdf1.MergePages(pdf2)PdfDocument.Merge(pdf1, pdf2)
pdf.ExtractPages(start, end)pdf.CopyPages(indices)

Opérations de filigrane

GdPicture.NET SDKIronPDF
Boucle pdf.DrawText(...)pdf.ApplyWatermark(html)
pdf.SetTextColor(color)Style CSS
pdf.SetTextSize(size)Style CSS

Exemples de migration de code

Exemple 1 : Conversion HTML vers PDF

Avant (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
        {
            string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
            GdPictureStatus status = converter.LoadFromHTMLString(htmlContent);
            
            if (status == GdPictureStatus.OK)
            {
                converter.SaveAsPDF("output.pdf");
            }
        }
    }
}

Après (IronPDF):

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

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

L'ChromePdfRenderer d'IronPDF utilise un moteur Chromium moderne pour un rendu HTML/CSS précis, éliminant le besoin de vérifier les codes de statut. Pour plus d'options de rendu HTML, consultez la documentation HTML vers PDF.

Exemple 2 : fusionner plusieurs PDF

Avant (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf1 = new GdPicturePDF())
        using (GdPicturePDF pdf2 = new GdPicturePDF())
        {
            pdf1.LoadFromFile("document1.pdf", false);
            pdf2.LoadFromFile("document2.pdf", false);
            
            pdf1.MergePages(pdf2);
            pdf1.SaveToFile("merged.pdf");
        }
    }
}

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        
        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");
    }
}

La méthode statique Merge d'IronPDF accepte une liste de documents, facilitant la combinaison de plusieurs PDF en une seule opération. En savoir plus sur la fusion et la division de PDF.

Exemple 3 : Ajouter un filigrane à toutes les pages

Avant (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            pdf.LoadFromFile("input.pdf", false);
            
            for (int i = 1; i <= pdf.GetPageCount(); i++)
            {
                pdf.SelectPage(i);
                pdf.SetTextColor(Color.Red);
                pdf.SetTextSize(48);
                pdf.DrawText("CONFIDENTIAL", 200, 400);
            }
            
            pdf.SaveToFile("watermarked.pdf");
        }
    }
}

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        
        pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center);
        
        pdf.SaveAs("watermarked.pdf");
    }
}

La migration du SDK GdPicture.NET du dessin de texte basé sur les coordonnées vers le filigrane basé sur HTML simplifie considérablement le code. La méthode ApplyWatermark d'IronPDF utilise la mise en forme HTML/CSS, éliminant le besoin d'itération manuelle des pages et de calculs de coordonnées. Consultez la documentation complète watermarking pour des options supplémentaires.

Exemple 4 : Protection par mot de passe et sécurité

Avant (GdPicture.NET SDK):

using GdPicture14;

class Program
{
    static void Main()
    {
        LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            GdPictureStatus status = pdf.LoadFromFile("document.pdf", false);

            if (status != GdPictureStatus.OK) return;

            // Save with encryption - many boolean parameters
            status = pdf.SaveToFile(
                "protected.pdf",
                PdfEncryption.PdfEncryption256BitAES,
                "user123",      // User password
                "owner456",     // Owner password
                true,           // Can print
                false,          // Cannot copy
                false,          // Cannot modify
                false,          // Cannot add notes
                true,           // Can fill forms
                false,          // Cannot extract
                false,          // Cannot assemble
                true            // Can print high quality
            );
        }
    }
}

Après (IronPDF):

using IronPdf;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        // Configure security settings with clear property names
        pdf.SecuritySettings.OwnerPassword = "owner456";
        pdf.SecuritySettings.UserPassword = "user123";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
        pdf.SecuritySettings.AllowUserAnnotations = false;
        pdf.SecuritySettings.AllowUserFormData = true;

        pdf.SaveAs("protected.pdf");
    }
}

La propriété SecuritySettings d'IronPDF fournit des propriétés nommées, auto-documentées au lieu de paramètres booléens positionnels.


Notes de migration essentielles

Conversion de l'indexation des pages

L'un des changements les plus importants dans cette migration du SDK GdPicture.NET est la différence d'indexation des pages :

// GdPicture.NET SDK: 1-indexépages
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
    pdf.SelectPage(i);
    // process page
}

// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < pdf.PageCount; i++)
{
    var page = pdf.Pages[i];
    // process page
}

Codes d'état pour les exceptions

Remplacer le contrôle d'état verbeux par le try-catch standard :

// GdPicture.NET SDK
GdPictureStatus status = converter.LoadFromHTMLString(html);
if (status != GdPictureStatus.OK)
{
    Console.WriteLine($"Error: {status}");
    return;
}

// IronPDF
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}

Conversion d'unités

GdPicture.NET SDK utilise les pouces pour les marges ;IronPDF utilise des millimètres :

// GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5f, 0.5f, 0.5f, 0.5f);

// IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;

Formule de conversion : millimeters = inches × 25.4

Sécurité des threads

GdPicture.NET SDK nécessite une synchronisation manuelle pour les opérations simultanées. L'ChromePdfRenderer d'IronPDF est sûr pour les threads par conception, simplifiant la génération de PDF multi-thread.


Considérations de Performance

Réutiliser ChromePdfRenderer

Pour des performances optimales, réutilisez l'instance du moteur de rendu :

// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}

// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Wasteful
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

Élimination correcte des ressources

// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically

Liste de contrôle de la migration

Pré-migration

  • Inventaire de toute utilisation du SDK .NET de GdPicture dans le code source
  • Identifier les fonctionnalités réellement utilisées (PDF vs OCRvs code-barres)
  • Déterminer si les fonctionnalités OCR/code-barres sont nécessaires (envisager IronOCR/IronBarcode)
  • Examinez votre licence actuelle et comparez-la aux tarifs IronPDF.
  • Obtenir une clé de licence IronPDF
  • Créer une branche de migration dans le système de contrôle de version

Migration de code

  • Supprimer les packages NuGet du SDK GdPicture.NET : dotnet remove package GdPicture.NET
  • Installer le package NuGet IronPDF: dotnet add package IronPdf
  • Mettre à jour les imports d'espaces de noms (GdPicture14IronPdf)
  • Remplacer LicenseManager.RegisterKEY() par IronPdf.License.LicenseKey
  • Convertir les vérifications de code d'état en blocs try-catch
  • Mise à jour de l'indexation des pages (indexation à partir de 1 → indexation à partir de 0)
  • Remplacer GdPicturePDF par PdfDocument
  • Remplacer GdPictureDocumentConverter par ChromePdfRenderer
  • Convertir du texte basé sur des coordonnées en horodatage HTML
  • Mise à jour des conversions d'unités (pouces → millimètres)

Essai

  • Tester unitairement tous les chemins de génération de PDF
  • Vérifier que la qualité du rendu HTML est égale ou supérieure à
  • Tester tous les scénarios de sécurité/cryptage
  • Vérifier la fonctionnalité de remplissage des formulaires
  • Opérations de fusion/séparation de tests
  • Valider l'apparence du filigrane
  • Chemins critiques de référence des performances

Après la migration

  • Supprimer les fichiers/clés de licence du SDK .NET de GdPicture
  • Mise à jour de la documentation
  • Former l'équipe aux modèles de l'API IronPDF
  • Surveiller la production pour détecter tout problème.

Veuillez noter: GdPicture.NET et Nutrient sont des marques déposées de leurs propriétaires respectifs. Ce site n'est pas affilié à, approuvé par, ou parrainé par Nutrient, ORPALIS, ou PSPDFKit. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.
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 et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise