Saltar al pie de página
GUíAS DE MIGRACIóN

Cómo migrar de GdPicture.NET SDK a IronPDF en C#

Migrar de SDK de GdPicture.NETa IronPDF: Guía completa de migración a C

La migración de SDK de GdPicture.NETaIronPDFofrece 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. Overkill para proyectos en PDF: SDK de GdPicture.NETes una suite completa de tratamiento de imágenes de documentos que incluye OCR, reconocimiento de códigos de barras, escaneado 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 producto (GdPicture.NET 14, GdPicture.API, Ultimate, Professional) con confusas combinaciones de SKU y requisitos de suscripción anual.

  3. Precios para empresas: Los costes de licencia empiezan en 2.999 dólares solo para el plugin PDF, y ascienden a más de 10.000 dólares 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 tratamiento de imágenes de documentos, no a patrones .NET modernos. Métodos como LicenseManager.RegisterKEY(), <código>GdPictureStatus</códigoenum checking, and 1 indexadopages feel dated compared to contemporary C# conventions.

  5. Patrón de código Status: Cada operación devuelve un enum <código>GdPictureStatus</códigoque debe ser comprobado-no se lanzan excepciones en caso de error, lo que hace que la gestión de errores sea verbosa y repetitiva.

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

  7. Versión Lock-in: El espacio de nombres <código>GdPicture14</códigoincluye el número de versión, lo que hace que las actualizaciones de versión importantes requieran cambios de espacio de nombres en toda la base de código.

  8. Confusión de marca: El reciente cambio de marca a "Nutrient" crea una fragmentación de la documentación entre gdpicture.com y nutrient.io, lo que complica la asistencia 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 nombresVersión específica (GdPicture14)Estable (IronPdf)

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona 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ónNotas
HTML a PDFBajoAsignación directa de métodos
URLa PDFBajoAsignación directa de métodos
Fusionar PDFBajoPatrones de API similares
Dividir PDFBajoPatrones de API similares
Marcas de aguaBajoEnfoque diferente (basado en HTML)
Extracción de TextoBajoPropiedad vs método
Protección por contraseñaMedioEstructura de parámetros diferente
Campos de formularioMedioDiferencias entre API
Firmas digitalesMedio-altoGestión de certificados diferentes
OCRAltaIronOCR es un producto independiente
Reconocimiento de códigos de barrasN/ANo compatible con IronPDF

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, utiliceIronPDFpara PDF
Imagen completa del documentoEvalúe si realmente utiliza todas las funciones

Antes de empezar

Prerrequisitos

  1. .NET Version: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 deIronPDFen ironpdf.com
  3. Backup: 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" .
# 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
# 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");
// Must be called before any SDK de GdPicture.NEToperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Paso 2: Actualizar las importaciones de espacios de nombres

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

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (GdPicture.NET SDK)
using GdPicture14;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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}");
    }
}
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}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
using IronPdf;

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

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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
<código>GdPicture14</código<código>IronPDF</código
GdPicture14.PDF<código>IronPDF</código
<código>GdPicture14.Imaging</códigoN/A (no necesario)

Mapeo de clases principales

SDK de GdPicture.NETIronPDFDescripción
<código>GdPicturePDF</códigoDocumento PDFClase de documento PDF principal
<código>GdPictureDocumentConverter</código<código>ChromePdfRenderer</códigoConversión de HTML/URL a PDF
<código>LicenseManager</código<código>Licencia.IronPdf</códigoGestión de licencias
<código>GdPictureStatus</códigoExcepcionesTratamiento de errores

Métodos de carga de documentos

SDK de GdPicture.NETIronPDFNotas
pdf.LoadFromFile(path, loadInMemory)<código>PdfDocument.FromFile(path)</códigoCargar desde archivo
<código>pdf.LoadFromFile(ruta, contraseña, loadInMemory)</código<código>PdfDocument.FromFile(path, password)</códigoProtegido por contraseña
converter.LoadFromHTMLString(html)renderer.RenderHtmlAsPdf(html)Cadena HTML
<código>converter.LoadFromURL(url)</código<código>renderer.RenderUrlAsPdf(url)</códigoURL

Operaciones de página

SDK de GdPicture.NETIronPDFNotas
<código>pdf.GetPageCount()</código<código>pdf.PageCount</códigoObtener recuento de páginas
<código>pdf.SelectPage(pageNo)</códigopdf.Pages[index]Seleccionar página (1 indexado vs 0 indexado)
<código>pdf.GetPageWidth()</código<código>pdf.Pages[i].Width</códigoAncho de página
<código>pdf.GetPageHeight()</código<código>pdf.Pages[i].Height</códigoAltura de la página

Operaciones de fusión y división

SDK de GdPicture.NETIronPDFNotas
<código>pdf1.CombinarPáginas(pdf2)</códigoPdfDocument.Merge(pdf1, pdf2)Fusionar PDF
<código>pdf.ExtractPages(start, end)</código<código>pdf.CopyPages(índices)</códigoExtraer páginas

Operaciones de marca de agua

SDK de GdPicture.NETIronPDFNotas
<código>bucle pdf.DrawText(...)</código<código>pdf.ApplyWatermark(html)</códigoMarca de agua de texto
<código>pdf.SetTextColor(color)</códigoEstilo CSSDefinir el color del texto
<código>pdf.SetTextSize(size)</códigoEstilo CSSTamaño del texto

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");
            }
        }
    }
}
// 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");
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El <código>ChromePdfRenderer</códigodeIronPDFutiliza un moderno motor Chromium para una renderización precisa de HTML/CSS, eliminando la necesidad de comprobar 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");
        }
    }
}
// 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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El método estático Merge deIronPDFacepta 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");
        }
    }
}
// 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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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 deIronPDFutiliza estilos HTML/CSS, eliminando la necesidad de iteración manual de la página 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
            );
        }
    }
}
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
            );
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La propiedad SecuritySettings deIronPDFproporciona 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
}
// 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
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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}");
}
// 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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Conversión de unidades

GdPicture.NET SDK utiliza pulgadas para los márgenes;IronPDFutiliza 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;
// 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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Fórmula de conversión: milímetros = pulgadas × 25,4

Seguridad de los hilos

GdPicture.NET SDK requiere sincronización manual para operaciones concurrentes. El <código>ChromePdfRenderer</códigodeIronPDFestá diseñado a prueba de hilos, lo que simplifica la generación de PDF multihilo.


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;
}
// 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;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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
// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Lista de comprobación de la migración

Pre-Migración

  • [ ] Inventario de 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)
  • [Determine si se necesitan funciones de OCR/código de barras (considere IronOCR/IronBarcode)
  • [ ] Revisar las licencias actuales y compararlas 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 de GdPicture.NET SDK: dotnet remove paquete GdPicture.NET
  • [ ] Instalar el paquete NuGet IronPdf: dotnet add package IronPdf
  • [ ] Actualizar las importaciones de espacios de nombres (GdPicture14IronPdf)
  • [Reemplace LicenseManager.RegisterKEY() por 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)
  • [ ] Sustituir <código>GdPicturePDF</códigopor PdfDocument
  • [Reemplace <código>GdPictureDocumentConverter</códigopor ChromePdfRenderer
  • [ ] Convertir texto basado en coordenadas a estampado HTML
  • [ ] Actualizar las conversiones de unidades (pulgadas → milímetros)

Pruebas

  • [ ] Prueba unitaria de todas las rutas de generación de PDF
  • [ ] Verificar que la calidad de renderizado HTML sea igual o superior a
  • [ ] Probar todos los escenarios de seguridad/cifrado
  • [ ] Verificar la funcionalidad de rellenado de formularios
  • [ ] Probar operaciones de fusión/división
  • [ ] Validar el aspecto de la marca de agua
  • [ ] Rutas críticas de referencia de rendimiento

Posmigración

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

Conclusión

La migración de SDK de GdPicture.NETaIronPDFelimina la complejidad de un SDK completo de creación de imágenes de documentos cuando su objetivo es la generación de PDF. La migración sustituye los verborreicos patrones de comprobación de estado por una gestión de errores limpia y basada en excepciones, las páginas de 1 índice por colecciones estándar de 0 índices y el dibujo de texto basado en coordenadas por un estilo HTML/CSS intuitivo.

El enfoque centrado deIronPDFreduce los costes de licencia a la vez que proporciona un moderno renderizado HTML basado en Chromium, operaciones a prueba de hilos y un espacio de nombres estable que no cambiará con las actualizaciones de versión. Para los equipos con necesidades de OCRo códigos de barras, los productos complementarios IronOCR e IronBarcode ofrecen esas funciones sin la sobrecarga de un SDK monolítico.

Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración al SDK de GdPicture.NET.

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

Leer más