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:
-
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á.
-
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.
-
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.
-
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#. -
Patrón de código de estado: cada operación devuelve una enumeración
GdPictureStatusque debe verificarse (no se lanzan excepciones en caso de errores, lo que hace que el manejo de errores sea detallado y repetitivo). -
Gestión manual de recursos: requiere llamadas explícitas
Dispose()oRelease(). El SDK no sigue limpiamente los patrones de disposición estándar de .NET. -
Bloqueo de versión: el espacio de nombres
GdPicture14incluye 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. - 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 | Especí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,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 |
|---|---|
| HTML a PDF | Bajo |
| URL a PDF | Bajo |
| Fusionar PDF | Bajo |
| Dividir PDF | Bajo |
| Marcas de agua | Bajo |
| Extracción de Texto | Bajo |
| Protección por contraseña | Medio |
| Campos de formulario | Medio |
| Firmas digitales | Medio-alto |
| OCR | Alta |
| Reconocimiento de códigos de barras | N/A |
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
- Versión .NET :IronPDFes compatible con .NET Framework 4.6.2+ y .NET Core 2.0+ / .NET 5/6/7/8/9+
- Clave de licencia: Obtenga su clave de licencia deIronPDFen IronPDF
- 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" .
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
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");
' Must be called before any SDK de GdPicture.NET operations
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" }
// 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" }
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;
Imports IronPdf
Imports 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}");
}
}
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}");
}
}
Imports GdPicture14
LicenseManager.RegisterKEY("LICENSE-KEY")
Using converter As New GdPictureDocumentConverter()
Dim status As GdPictureStatus = converter.LoadFromHTMLString("<h1>Hello World</h1>")
If status = GdPictureStatus.OK Then
status = converter.SaveAsPDF("output.pdf")
If status <> GdPictureStatus.OK Then
Console.WriteLine($"Error: {status}")
End If
Else
Console.WriteLine($"Load error: {status}")
End If
End Using
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");
Imports IronPdf
IronPdf.License.LicenseKey = "LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim 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.NET | IronPDF |
|---|---|
GdPicture14 |
IronPdf |
GdPicture14.PDF |
IronPdf |
GdPicture14.Imaging |
N/A (no necesario) |
Mapeo de clases principales
| SDK de GdPicture.NET | IronPDF | Descripción |
|---|---|---|
GdPicturePDF |
PdfDocument |
Clase de documento PDF principal |
GdPictureDocumentConverter |
ChromePdfRenderer |
Conversión de HTML/URL a PDF |
LicenseManager |
IronPdf.License |
Gestión de licencias |
GdPictureStatus |
Excepciones | Tratamiento de errores |
Métodos de carga de documentos
| SDK de GdPicture.NET | IronPDF |
|---|---|
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.NET | IronPDF |
|---|---|
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.NET | IronPDF |
|---|---|
pdf1.MergePages(pdf2) |
PdfDocument.Merge(pdf1, pdf2) |
pdf.ExtractPages(start, end) |
pdf.CopyPages(indices) |
Operaciones de marca de agua
| SDK de GdPicture.NET | IronPDF |
|---|---|
pdf.DrawText(...) bucle |
pdf.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");
}
}
}
}
// 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");
}
}
}
}
Imports GdPicture14
Imports System
Class Program
Shared Sub Main()
Using converter As New GdPictureDocumentConverter()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim status As GdPictureStatus = converter.LoadFromHTMLString(htmlContent)
If status = GdPictureStatus.OK Then
converter.SaveAsPDF("output.pdf")
End If
End Using
End Sub
End Class
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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
ChromePdfRenderer deIronPDFutiliza 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");
}
}
}
// 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");
}
}
}
Imports GdPicture14
Imports System
Class Program
Shared Sub Main()
Using pdf1 As New GdPicturePDF(), pdf2 As New GdPicturePDF()
pdf1.LoadFromFile("document1.pdf", False)
pdf2.LoadFromFile("document2.pdf", False)
pdf1.MergePages(pdf2)
pdf1.SaveToFile("merged.pdf")
End Using
End Sub
End Class
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");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
merged.SaveAs("merged.pdf")
End Sub
End Class
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");
}
}
}
Imports GdPicture14
Imports System
Imports System.Drawing
Module Program
Sub Main()
Using pdf As New GdPicturePDF()
pdf.LoadFromFile("input.pdf", False)
For i As Integer = 1 To pdf.GetPageCount()
pdf.SelectPage(i)
pdf.SetTextColor(Color.Red)
pdf.SetTextSize(48)
pdf.DrawText("CONFIDENTIAL", 200, 400)
Next
pdf.SaveToFile("watermarked.pdf")
End Using
End Sub
End Module
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");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
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, 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
);
}
}
}
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
);
}
}
}
Imports GdPicture14
Class Program
Shared Sub Main()
LicenseManager.RegisterKEY("LICENSE-KEY")
Using pdf As New GdPicturePDF()
Dim status As GdPictureStatus = pdf.LoadFromFile("document.pdf", False)
If status <> GdPictureStatus.OK Then 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
)
End Using
End Sub
End Class
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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim 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")
End Sub
End Class
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
}
' GdPicture.NET SDK: 1 indexadopages
For i As Integer = 1 To pdf.GetPageCount()
pdf.SelectPage(i)
' process page
Next
' IronPDF: 0-indexed pages (standard .NET)
For i As Integer = 0 To pdf.PageCount - 1
Dim page = pdf.Pages(i)
' process page
Next
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}");
}
' GdPicture.NET SDK
Dim status As GdPictureStatus = converter.LoadFromHTMLString(html)
If status <> GdPictureStatus.OK Then
Console.WriteLine($"Error: {status}")
Return
End If
' IronPDF
Try
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
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;
' 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 deIronPDFes 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;
}
// 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;
}
Imports System
Public Class PdfService
Private Shared ReadOnly _renderer As New ChromePdfRenderer()
Public Function Generate(html As String) As Byte()
Return _renderer.RenderHtmlAsPdf(html).BinaryData
End Function
' BAD - Creates new instance each time
Public Function GenerateBad(html As String) As Byte()
Dim renderer As New ChromePdfRenderer() ' Wasteful
Return renderer.RenderHtmlAsPdf(html).BinaryData
End Function
End Class
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
Imports PdfDocument
' Use Using blocks for automatic cleanup
Using pdf = PdfDocument.FromFile("large.pdf")
Dim text As String = pdf.ExtractAllText()
End Using ' 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 deIronPDF:
dotnet add package IronPdf - Actualizar las importaciones del espacio de nombres (
GdPicture14→IronPdf) - Reemplace
LicenseManager.RegisterKEY()conIronPdf.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
GdPicturePDFconPdfDocument - Reemplace
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.

