IRONSOFTWAREHOME
VIDEOS

Cómo establecer y editar metadatos de PDF en C#

Curtis Chau
Curtis Chau
Updated: 19 de julio de 2026

La migración de SDK de GdPicture.NETa IronPDF ofrece a los desarrolladores .NET un enfoque centrado y racionalizado de la generación de PDF. Esta guía proporciona una ruta de migración completa y paso a paso que sustituye los complejos patrones de SDK de imágenes de documentos por API modernas y específicas de PDF diseñadas para el desarrollo .NET contemporáneo.

Por qué migrar de SDK de GdPicture.NETa IronPDF

Desafíos del SDK de GdPicture.NET

GdPicture.NET SDK (ahora rebautizado como Nutrient) es un completo SDK de creación de imágenes de documentos con varios retos para el desarrollo centrado en PDF:

  1. Exceso de recursos para proyectos que solo utilizan PDF: GdPicture .NET SDK es una suite completa de imágenes de documentos que incluye OCR, reconocimiento de códigos de barras, escaneo y procesamiento de imágenes. Si solo necesita la funcionalidad PDF, estará pagando por funciones que nunca utilizará.

  2. Licencias complejas: múltiples niveles de productos (GdPicture .NET 14, GdPicture.API, Ultimate, Professional) con combinaciones de SKU confusas y requisitos de suscripción anual.

  3. Precios empresariales: los costos de la licencia comienzan en $2999 solo para el complemento PDF y aumentan a $10 000+ para la edición Ultimate. Las licencias por desarrollador añaden una sobrecarga significativa para los equipos en crecimiento.

  4. Curva de aprendizaje pronunciada: la API está diseñada en torno a conceptos de imágenes de documentos, no en patrones .NET modernos. Métodos como LicenseManager.RegisterKEY(), GdPictureStatus, verificación de enumeraciones y páginas indexadas en 1 parecen anticuados en comparación con las convenciones contemporáneas de C#.

  5. Patrón de código de estado: cada operación devuelve una enumeración GdPictureStatus que debe verificarse (no se lanzan excepciones en caso de errores, lo que hace que el manejo de errores sea detallado y repetitivo).

  6. Gestión manual de recursos: requiere llamadas explícitas Dispose() o Release(). El SDK no sigue limpiamente los patrones de disposición estándar de .NET.

  7. Bloqueo de versión: el espacio de nombres GdPicture14 incluye el número de versión, lo que hace que las actualizaciones de versiones importantes requieran cambios de espacio de nombres en toda la base de código.

  8. Confusión sobre el cambio de marca: El reciente cambio de marca a "Nutrient" crea una fragmentación de la documentación entre gdpicture.com y nutrition.io, lo que complica el soporte y el aprendizaje.

Comparación entre SDK de GdPicture.NETe IronPDF

AspectoSDK de GdPicture.NETIronPDF
EnfoquePaquete de imágenes de documentos (exagerado para PDF)Biblioteca específica para PDF
Precios$2,999-$10,000+ nivel empresarialCompetitivo y adaptado a la empresa
Estilo APICódigos de estado, gestión manualExcepciones, IDisposable, .NET moderno
Curva de aprendizajeSteep (conceptos de SDK de imágenes)Sencillo (familiarizado con HTML/CSS)
Representación HTMLMotor interno básicoÚltima versión de Chromium con CSS3/JS
Indexación de páginas1 indexadoíndice 0 (.NET Standard)
Seguridad de los hilosSe requiere sincronización manualThread-safe por diseño
Espacio de nombresEspecífico de la versión (GdPicture14)Estable (IronPdf)

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDF proporciona una base preparada para el futuro que se alinea con los patrones y convenciones modernos de .NET.


Evaluación de la complejidad de la migración

Esfuerzo estimado por función

CaracterísticaComplejidad de la migración
HTML a PDFBajo
URL a PDFBajo
Fusionar PDFBajo
Dividir PDFBajo
Marcas de aguaBajo
Extracción de TextoBajo
Protección por contraseñaMedio
Campos de formularioMedio
Firmas digitalesMedio-alto
OCRAlta
Reconocimiento de códigos de barrasN/A

Matriz de decisiones de migración

Su situaciónRecomendación
Operaciones sólo en PDFMigración: simplificación significativa y ahorro de costes
Uso intensivo de OCRConsidere IronOCR como producto complementario
Código de barras/necesidades de escaneadoConserve SDK de GdPicture.NETpara esas funciones, utilice IronPDF para PDF
Imagen completa del documentoEvalúe si realmente utiliza todas las funciones

Antes de empezar

Prerrequisitos

  1. **Versión .NET :**IronPDFes compatible con .NET Framework 4.6.2+ y .NET Core 2.0+ / .NET 5/6/7/8/9+
  2. Clave de licencia: Obtenga su clave de licencia de IronPDFen IronPDF
  3. Copia de seguridad: crear una rama para el trabajo de migración

Identifique todo el uso del SDK de GdPicture.NET

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

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

Cambios en el paquete NuGet

# Remove SDK de GdPicture.NETpackages
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

Inicio rápido de la migración

Paso 1: Actualizar la configuración de la licencia

Antes (GdPicture.NET SDK):

// Must be called before any SDK de GdPicture.NEToperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

Después (IronPDF):

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

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

Paso 2: Actualizar las importaciones de espacios de nombres

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

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

Paso 3: Patrón básico de conversión

El cambio más significativo en la migración del SDK de GdPicture.NET es la eliminación del patrón verboso de comprobación de estado:

Antes (GdPicture.NET SDK):

using GdPicture14;

LicenseManager.RegisterKEY("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}");
    }
}

Después (IronPDF):

using IronPdf;

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

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

Diferencias Clave:

  • Sin comprobación de estado: excepciones en caso de error
  • No se requiere una disposición explícita para el renderizador
  • API moderna y fluida
  • Renderizado basado en Chromium para una mejor compatibilidad con HTML/CSS

Referencia completa de la API

Mapeo de espacios de nombres

SDK de GdPicture.NETIronPDF
GdPicture14IronPdf
GdPicture14.PDFIronPdf
GdPicture14.ImagingN/A (no necesario)

Mapeo de clases principales

SDK de GdPicture.NETIronPDFDescripción
GdPicturePDFPdfDocumentClase de documento PDF principal
GdPictureDocumentConverterChromePdfRendererConversión de HTML/URL a PDF
LicenseManagerIronPdf.LicenseGestión de licencias
GdPictureStatusExcepcionesTratamiento de errores

Métodos de carga de documentos

SDK de GdPicture.NETIronPDF
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)

Operaciones de página

SDK de GdPicture.NETIronPDF
pdf.GetPageCount()pdf.PageCount
pdf.SelectPage(pageNo)pdf.Pages[index]
pdf.GetPageWidth()pdf.Pages[i].Width
pdf.GetPageHeight()pdf.Pages[i].Height

Operaciones de fusión y división

SDK de GdPicture.NETIronPDF
pdf1.MergePages(pdf2)PdfDocument.Merge(pdf1, pdf2)
pdf.ExtractPages(start, end)pdf.CopyPages(indices)

Operaciones de marca de agua

SDK de GdPicture.NETIronPDF
pdf.DrawText(...) buclepdf.ApplyWatermark(html)
pdf.SetTextColor(color)Estilo CSS
pdf.SetTextSize(size)Estilo CSS

Ejemplos de migración de código

Ejemplo 1: Conversión de HTML a PDF

Antes (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");
            }
        }
    }
}

Despué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");
    }
}

ChromePdfRenderer de IronPDFutiliza un motor Chromium moderno para una representación precisa de HTML/CSS, eliminando la necesidad de verificar el código de estado. Para obtener más opciones de conversión de HTML, consulte la documentación HTML a PDF.

Ejemplo 2: Combinar varios PDF

Antes (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");
        }
    }
}

Despué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");
    }
}

El método estático Merge de IronPDFacepta una lista de documentos, lo que facilita la combinación de varios PDF en una sola operación. Más información sobre mezclar y dividir archivos PDF.

Ejemplo 3: Añadir marca de agua a todas las páginas

Antes (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");
        }
    }
}

Despué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 migración del SDK de GdPicture.NET del dibujo de texto basado en coordenadas a la marca de agua basada en HTML simplifica significativamente el código. El método ApplyWatermark de IronPDFutiliza estilos HTML/CSS, lo que elimina la necesidad de iteración manual de páginas y cálculos de coordenadas. Consulte la documentación completa de marcas de agua para obtener más opciones.

Ejemplo 4: Protección por contraseña y seguridad

Antes (GdPicture.NET SDK):

using GdPicture14;

class Program
{
    static void Main()
    {
        LicenseManager.RegisterKEY("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
            );
        }
    }
}

Despué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 propiedad SecuritySettings de IronPDF proporciona propiedades con nombre y autodocumentadas en lugar de parámetros booleanos posicionales.


Notas de migración críticas

Conversión de indexación de páginas

Uno de los cambios más importantes en esta migración del SDK de GdPicture.NET es la diferencia en la indexación de páginas:

// GdPicture.NET SDK: 1 indexadopages
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
}

Códigos de estado a excepciones

Sustituya la comprobación de estado verbosa por try-catch estándar:

// 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}");
}

Conversión de unidades

GdPicture.NET SDK utiliza pulgadas para los márgenes;IronPDF utiliza milímetros:

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

Fórmula de conversión: millimeters = inches × 25.4

Seguridad de los hilos

GdPicture.NET SDK requiere sincronización manual para operaciones concurrentes. El ChromePdfRenderer de IronPDFes seguro para subprocesos por diseño, lo que simplifica la generación de PDF multiproceso.


Consideraciones sobre el rendimiento

Reutilizar ChromePdfRenderer

Para un rendimiento óptimo, reutilice la instancia del renderizador:

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

Disposición adecuada de recursos

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

Lista de comprobación de la migración

Pre-Migración

  • Inventariar todo el uso del SDK de GdPicture .NET en el código base
  • Identificar qué funciones se utilizan realmente (PDF vs OCRvs código de barras)
  • Determinar si se necesitan funciones de OCR/código de barras (considerar IronOCR/ IronBarcode)
  • Revise las licencias actuales y compárelas con los precios de IronPDF
  • Obtener la clave de licencia de IronPDF
  • Crear rama de migración en el control de versiones

Migración de código

  • Eliminar paquetes NuGet del SDK .NET de GdPicture: dotnet remove package GdPicture.NET
  • Instalar el paquete NuGet de IronPDF: dotnet add package IronPdf
  • Actualizar las importaciones del espacio de nombres (GdPicture14IronPdf)
  • Reemplace LicenseManager.RegisterKEY() con IronPdf.License.LicenseKey
  • Convertir comprobaciones de código de estado en bloques try-catch
  • Actualizar la indexación de la página (1-indexado → 0-indexado)
  • Reemplace GdPicturePDF con PdfDocument
  • Reemplace GdPictureDocumentConverter con ChromePdfRenderer
  • Convertir texto basado en coordenadas a estampado HTML
  • Actualizar conversiones de unidades (pulgadas → milímetros)

Pruebas

  • Prueba unitaria de todas las rutas de generación de PDF
  • Verificar que la calidad de representación HTML coincida o supere
  • Probar todos los escenarios de seguridad/cifrado
  • Verificar la funcionalidad de llenado del formulario
  • Prueba de operaciones de fusión/división
  • Validar la apariencia de la marca de agua
  • Rutas críticas de referencia de rendimiento

Posmigración

  • Eliminar archivos/claves de licencia del SDK de GdPicture .NET
  • Actualización de la documentación
  • Capacitar al equipo en los patrones de la API de IronPDF
  • Supervisar la producción para detectar cualquier problema.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta