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

Cómo migrar de GdPicture.NET SDK a IronPDF en 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. Exceso de recursos para proyectos que solo utilizan PDF: SDK de GdPicture.NETes 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(), <código>GdPictureStatus`enum checking, and 1 indexadopages feel dated compared to contemporary C# conventions.

  5. Patrón de código de estado: cada operación devuelve una enumeración <código>GdPictureStatusque 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 <código>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

Aspecto SDK de GdPicture.NET IronPDF
Enfoque Paquete de imágenes de documentos (exagerado para PDF) Biblioteca específica para PDF
Precios $2,999-$10,000+ nivel empresarial Competitivo y adaptado a la empresa
Estilo API Códigos de estado, gestión manual Excepciones, IDisposable, .NET moderno
Curva de aprendizaje Steep (conceptos de SDK de imágenes) Sencillo (familiarizado con HTML/CSS)
Representación HTML Motor interno básico Última versión de Chromium con CSS3/JS
Indexación de páginas 1 indexado índice 0 (.NET Standard)
Seguridad de los hilos Se requiere sincronización manual Thread-safe por diseño
Espacio de nombres Versió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ística Complejidad de la migración Notas
HTML a PDF Bajo Asignación directa de métodos
URLa PDF Bajo Asignación directa de métodos
Fusionar PDF Bajo Patrones de API similares
Dividir PDF Bajo Patrones de API similares
Marcas de agua Bajo Enfoque diferente (basado en HTML)
Extracción de Texto Bajo Propiedad vs método
Protección por contraseña Medio Estructura de parámetros diferente
Campos de formulario Medio Diferencias entre API
Firmas digitales Medio-alto Gestión de certificados diferentes
OCR Alta IronOCR es un producto independiente
Reconocimiento de códigos de barras N/A No compatible con IronPDF

Matriz de decisiones de migración

Su situación Recomendación
Operaciones sólo en PDF Migración: simplificación significativa y ahorro de costes
Uso intensivo de OCR Considere IronOCR como producto complementario
Código de barras/necesidades de escaneado Conserve SDK de GdPicture.NETpara esas funciones, utiliceIronPDFpara PDF
Imagen completa del documento Evalú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 deIronPDFen ironpdf.com
  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" .
# 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");
$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" }
$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;
$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}");
    }
}
$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");
$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.NET IronPDF
<código>GdPicture14` <código>IronPDF
GdPicture14.PDF <código>IronPDF`
<código>GdPicture14.Imaging N/A (no necesario)

Mapeo de clases principales

SDK de GdPicture.NET IronPDF Descripción
<código>GdPicturePDF Documento PDF Clase de documento PDF principal
<código>GdPictureDocumentConverter` <código>ChromePdfRenderer Conversión de HTML/URL a PDF
<código>LicenseManager <código>Licencia.IronPdf Gestión de licencias
<código>GdPictureStatus Excepciones Tratamiento de errores

Métodos de carga de documentos

SDK de GdPicture.NET IronPDF Notas
pdf.LoadFromFile(path, loadInMemory) <código>PdfDocument.FromFile(path)` Cargar desde archivo
<código>pdf.LoadFromFile(ruta, contraseña, loadInMemory) <código>PdfDocument.FromFile(path, password) Protegido por contraseña
converter.LoadFromHTMLString(html) renderer.RenderHtmlAsPdf(html) Cadena HTML
<código>converter.LoadFromURL(url)` <código>renderer.RenderUrlAsPdf(url) URL

Operaciones de página

SDK de GdPicture.NET IronPDF Notas
<código>pdf.GetPageCount() <código>pdf.PageCount Obtener recuento de páginas
<código>pdf.SelectPage(pageNo) pdf.Pages[index] Seleccionar página (1 indexado vs 0 indexado)
<código>pdf.GetPageWidth()` <código>pdf.Pages[i].Width Ancho de página
<código>pdf.GetPageHeight() <código>pdf.Pages[i].Height Altura de la página

Operaciones de fusión y división

SDK de GdPicture.NET IronPDF Notas
<código>pdf1.CombinarPáginas(pdf2) PdfDocument.Merge(pdf1, pdf2) Fusionar PDF
<código>pdf.ExtractPages(start, end)` <código>pdf.CopyPages(índices) Extraer páginas

Operaciones de marca de agua

SDK de GdPicture.NET IronPDF Notas
<código>bucle pdf.DrawText(...) <código>pdf.ApplyWatermark(html) Marca de agua de texto
<código>pdf.SetTextColor(color) Estilo CSS Definir el color del texto
<código>pdf.SetTextSize(size) Estilo CSS Tamañ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");
            }
        }
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

El <código>ChromePdfRenderer`deIronPDFutiliza 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");
        }
    }
}
$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");
    }
}
$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");
        }
    }
}
$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");
    }
}
$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
            );
        }
    }
}
$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");
    }
}
$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
}
$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}");
}
$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;
$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`deIronPDFestá 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;
}
$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
$vbLabelText   $csharpLabel

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 de GdPicture.NET: dotnet remove package GdPicture.NET
  • Instalar el paquete NuGet IronPdf: dotnet add package IronPdf
  • Actualizar las importaciones del espacio de nombres ( <código>GdPicture14`→ <código>IronPDF)
  • 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)
  • Reemplazar <código>GdPicturePDFconPdfDocument`
  • Reemplace <código>GdPictureDocumentConverterconChromePdfRenderer`
  • 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 ...

Leer más