Cómo migrar de Ghostscript GPL a IronPDF en C#
La migración de Ghostscript GPLaIronPDFtransforma su flujo de trabajo PDF .NET de la generación de procesos de línea de comandos y la manipulación de interruptores basada en cadenas a una API .NET nativa, segura y con IntelliSense. Esta guía proporciona una ruta de migración completa y paso a paso que elimina los problemas de licencia AGPL y las dependencias binarias externas para los desarrolladores profesionales de .NET.
Por qué migrar de Ghostscript GPLa IronPDF
Los retos de la GPL de Ghostscript
Ghostscript GPL es un venerable intérprete de PostScript/PDF con décadas de historia, pero su uso en aplicaciones .NET modernas presenta retos significativos:
-
Restricciones de la licencia AGPL: La licencia AGPL de Ghostscript requiere que usted publique su código fuente si distribuye software que lo utiliza, a menos que compre una costosa licencia comercial de Artifex. Este modelo de licencia "viral" crea un riesgo legal significativo para las aplicaciones propietarias.
-
Interfaz de línea de comandos: Ghostscript GPLes fundamentalmente una herramienta de línea de comandos. Su uso desde C# requiere la generación de procesos, el paso de argumentos de cadena y el análisis sintáctico de la salida, un enfoque frágil y propenso a errores.
-
Dependencia binaria externa: debe instalar Ghostscript GPLpor separado, administrar las variables PATH y garantizar la compatibilidad de versiones en todos los entornos de implementación. Se requieren diferentes DLL para 32 bits frente a 64 bits (
gsdll32.dllfrente agsdll64.dll). -
No hay conversión nativa de HTML a PDF: Ghostscript GPLno puede convertir HTML a PDF directamente. Primero hay que convertir HTML a PostScript utilizando otra herramienta, y después utilizar Ghostscript GPLpara convertir PostScript a PDF, un proceso de varios pasos con dependencias externas.
-
Sintaxis de conmutación compleja: las operaciones se controlan mediante conmutadores de línea de comandos crípticos como
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=.... Sin IntelliSense, sin seguridad tipográfica y fácil de teclear mal. -
Manejo de errores: los errores llegan a través de stderr como cadenas de texto, lo que requiere análisis en lugar de manejo estructurado de excepciones.
- Gastos generales de gestión de procesos: cada operación genera un proceso separado, lo que agrega gastos generales y complejidad para el manejo de errores, tiempos de espera y limpieza de recursos.
Comparación entre Ghostscript GPLe IronPDF
| Aspecto | Ghostscript GPL | IronPDF |
|---|---|---|
| Licencia | AGPL (viral) o comercial caro | Comercial con términos claros |
| Integración | Generación de procesos de línea de comandos | Biblioteca .NET nativa |
| Diseño de API | Cambios basados en cadenas | API tipificada con IntelliSense |
| Tratamiento de errores | Analizar texto stderr | excepciones de .NET |
| HTML a PDF | No compatible (necesita herramientas externas) | Motor Chromium integrado |
| Dependencias | Instalación binaria externa | Paquete NuGet autónomo |
| Despliegue | Configurar PATH, copiar DLL | Sólo tiene que añadir la referencia NuGet |
| Seguridad de los hilos | Sólo aislamiento de procesos | Thread-safe por diseño |
| .NET moderno | Asistencia limitada | Compatibilidad total con .NET 6/7/8/9/10 |
| Soporte de Async | Basado en procesos | Async/await nativo |
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 integra de forma nativa con los patrones modernos de .NET.
Evaluación de la complejidad de la migración
Esfuerzo estimado por función
| Característica | Complejidad de la migración |
|---|---|
| PDF a imágenes | Bajo |
| Fusionar PDF | Bajo |
| Comprimir PDF | Bajo |
| Optimización PDF | Bajo |
| Cifrado | Medio |
| Extracción de páginas | Bajo |
| PostScript a PDF | Medio-alto |
| Cambios personalizados | Medio-alto |
Cambio de paradigma
El cambio fundamental en esta migración de la GPL de Ghostscript es de la ejecución de procesos de línea de comandos a llamadas API .NET tipificadas:
Ghostscript GPL: "Pasar estos conmutadores de cadena a un proceso externo"
IronPDF: "Llame a estos métodos en objetos .NET"
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
Identificar todos los usos de Ghostscript GPL
# Find all Ghostscript.NET references
grep -r "Ghostscript\.NET\|GhostscriptProcessor\|GhostscriptRasterizer\|gsdll" --include="*.cs" .
# Find direct process calls to Ghostscript
grep -r "gswin64c\|gswin32c\|gs\|ProcessStartInfo.*ghost" --include="*.cs" .
# Find package references
grep -r "Ghostscript" --include="*.csproj" .
# Find all Ghostscript.NET references
grep -r "Ghostscript\.NET\|GhostscriptProcessor\|GhostscriptRasterizer\|gsdll" --include="*.cs" .
# Find direct process calls to Ghostscript
grep -r "gswin64c\|gswin32c\|gs\|ProcessStartInfo.*ghost" --include="*.cs" .
# Find package references
grep -r "Ghostscript" --include="*.csproj" .
Cambios en el paquete NuGet
# Remove Ghostscript.NET
dotnet remove package Ghostscript.NET
# Install IronPDF
dotnet add package IronPdf
# Remove Ghostscript.NET
dotnet remove package Ghostscript.NET
# Install IronPDF
dotnet add package IronPdf
Eliminar dependencias de Ghostscript GPL
Después de la migración:
- Desinstalar Ghostscript GPLde los servidores
- Eliminar
gsdll32.dll/gsdll64.dllde las implementaciones - Eliminar la configuración PATH para Ghostscript GPL
- Eliminar cualquier referencia
GhostscriptVersionInfo
Inicio rápido de la migración
Paso 1: Actualizar la configuración de la licencia
Antes (Ghostscript GPL):
Ghostscript GPL bajo AGPL requiere la divulgación del código fuente o una costosa licencia comercial de Artifex.
Después (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
Paso 2: Actualizar las importaciones de espacios de nombres
// Before (Ghostscript GPL)
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using Ghostscript.NET.Rasterizer;
// After (IronPDF)
using IronPdf;
// Before (Ghostscript GPL)
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using Ghostscript.NET.Rasterizer;
// After (IronPDF)
using IronPdf;
Imports IronPdf
Referencia completa de la API
Mapeo de clases principales
| Ghostscript.NET | IronPDF | Descripción |
|---|---|---|
GhostscriptProcessor |
Varios métodos PdfDocument |
Procesamiento de PDF |
GhostscriptRasterizer |
PdfDocument.ToBitmap() / RasterizeToImageFiles() |
PDF a imágenes |
GhostscriptVersionInfo |
N/A (no necesario) | Localización de DLL |
GhostscriptStdIO |
N/A (use excepciones) | Manejo de E/S |
| Proceso + línea de comandos | ChromePdfRenderer |
HTML a PDF |
Mapeo de conmutadores de línea de comandos
| Ghostscript GPLSwitch | Equivalente de IronPDF | Descripción |
|---|---|---|
-dNOPAUSE |
N/A (no necesario) | No haga pausas entre páginas |
-dBATCH |
N/A (no necesario) | Salir después de procesar |
-dSAFER |
N/A (por defecto) | Acceso seguro a archivos |
-sDEVICE=pdfwrite |
Varios métodos PDF | PDF de salida |
-sDEVICE=png16m |
ToBitmap() o RasterizeToImageFiles() |
Salida PNG |
-sOutputFile=X |
SaveAs("X") |
Nombre del archivo de salida |
-r300 |
Parámetro DPI en los métodos | Resolución |
-dPDFSETTINGS=/ebook |
CompressImages(quality: 75) |
Calidad media |
-sOwnerPassword=X |
SecuritySettings.OwnerPassword |
Contraseña del propietario |
-sUserPassword=X |
SecuritySettings.UserPassword |
Contraseña de usuario |
Ejemplos de migración de código
Ejemplo 1: Conversión de HTML a PDF
Antes (Ghostscript GPL):
// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using System.IO;
using System.Text;
class GhostscriptExample
{
static void Main()
{
// Ghostscript cannot directly convert HTML to PDF
// You need to first convert HTML to PS/EPS using another tool
// then use Ghostscript to convert PS to PDF
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
string psFile = "temp.ps";
string outputPdf = "output.pdf";
// This is a workaround - Ghostscript primarily works with PostScript
GhostscriptProcessor processor = new GhostscriptProcessor();
List<string> switches = new List<string>
{
"-dNOPAUSE",
"-dBATCH",
"-dSAFER",
"-sDEVICE=pdfwrite",
$"-sOutputFile={outputPdf}",
psFile
};
processor.Process(switches.ToArray());
}
}
// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using System.IO;
using System.Text;
class GhostscriptExample
{
static void Main()
{
// Ghostscript cannot directly convert HTML to PDF
// You need to first convert HTML to PS/EPS using another tool
// then use Ghostscript to convert PS to PDF
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
string psFile = "temp.ps";
string outputPdf = "output.pdf";
// This is a workaround - Ghostscript primarily works with PostScript
GhostscriptProcessor processor = new GhostscriptProcessor();
List<string> switches = new List<string>
{
"-dNOPAUSE",
"-dBATCH",
"-dSAFER",
"-sDEVICE=pdfwrite",
$"-sOutputFile={outputPdf}",
psFile
};
processor.Process(switches.ToArray());
}
}
Imports Ghostscript.NET
Imports Ghostscript.NET.Processor
Imports System.IO
Imports System.Text
Class GhostscriptExample
Shared Sub Main()
' Ghostscript cannot directly convert HTML to PDF
' You need to first convert HTML to PS/EPS using another tool
' then use Ghostscript to convert PS to PDF
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim psFile As String = "temp.ps"
Dim outputPdf As String = "output.pdf"
' This is a workaround - Ghostscript primarily works with PostScript
Dim processor As New GhostscriptProcessor()
Dim switches As New List(Of String) From {
"-dNOPAUSE",
"-dBATCH",
"-dSAFER",
"-sDEVICE=pdfwrite",
$"-sOutputFile={outputPdf}",
psFile
}
processor.Process(switches.ToArray())
End Sub
End Class
Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class IronPdfExample
{
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;
class IronPdfExample
{
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
Class IronPdfExample
Shared Sub Main()
Dim renderer As 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
La diferencia es notable: Ghostscript GPLno puede convertir directamente HTML a PDF, sino que requiere una conversión PostScript intermedia con herramientas externas. ChromePdfRenderer deIronPDFproporciona conversión directa de HTML a PDF con soporte completo para CSS3, JavaScript y estándares web modernos. Consulte la documentación HTML a PDF para obtener más opciones de conversión.
Ejemplo 2: PDF a imágenes
Antes (Ghostscript GPL):
// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Rasterizer;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
class GhostscriptExample
{
static void Main()
{
string inputPdf = "input.pdf";
string outputPath = "output";
GhostscriptVersionInfo gvi = new GhostscriptVersionInfo("gsdll64.dll");
using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer())
{
rasterizer.Open(inputPdf, gvi, false);
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
Image img = rasterizer.GetPage(300, pageNumber);
img.Save($"{outputPath}_page{pageNumber}.png", ImageFormat.Png);
img.Dispose();
}
}
}
}
// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Rasterizer;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
class GhostscriptExample
{
static void Main()
{
string inputPdf = "input.pdf";
string outputPath = "output";
GhostscriptVersionInfo gvi = new GhostscriptVersionInfo("gsdll64.dll");
using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer())
{
rasterizer.Open(inputPdf, gvi, false);
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
Image img = rasterizer.GetPage(300, pageNumber);
img.Save($"{outputPath}_page{pageNumber}.png", ImageFormat.Png);
img.Dispose();
}
}
}
}
Imports Ghostscript.NET
Imports Ghostscript.NET.Rasterizer
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Class GhostscriptExample
Shared Sub Main()
Dim inputPdf As String = "input.pdf"
Dim outputPath As String = "output"
Dim gvi As New GhostscriptVersionInfo("gsdll64.dll")
Using rasterizer As New GhostscriptRasterizer()
rasterizer.Open(inputPdf, gvi, False)
For pageNumber As Integer = 1 To rasterizer.PageCount
Dim img As Image = rasterizer.GetPage(300, pageNumber)
img.Save($"{outputPath}_page{pageNumber}.png", ImageFormat.Png)
img.Dispose()
Next
End Using
End Sub
End Class
Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfExample
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
var images = pdf.ToBitmap();
for (int i = 0; i < images.Length; i++)
{
images[i].Save($"output_page{i + 1}.png");
}
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfExample
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
var images = pdf.ToBitmap();
for (int i = 0; i < images.Length; i++)
{
images[i].Save($"output_page{i + 1}.png");
}
}
}
Imports IronPdf
Imports System
Class IronPdfExample
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim images = pdf.ToBitmap()
For i As Integer = 0 To images.Length - 1
images(i).Save($"output_page{i + 1}.png")
Next
End Sub
End Class
El enfoque GPL de Ghostscript requiere localizar el gsdll64.dll externo, crear un objeto GhostscriptVersionInfo y utilizar números de página indexados en 1. El método ToBitmap() deIronPDFproporciona un enfoque limpio, de una sola línea, sin dependencias externas. Observe la diferencia en la indexación de páginas: Ghostscript GPLutiliza páginas con 1 índice, mientras queIronPDFutiliza páginas con 0 índices (convención estándar de .NET).
Ejemplo 3: Combinar archivos PDF
Antes (Ghostscript GPL):
// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using System.Collections.Generic;
class GhostscriptExample
{
static void Main()
{
string outputPdf = "merged.pdf";
string[] inputFiles = { "file1.pdf", "file2.pdf", "file3.pdf" };
GhostscriptProcessor processor = new GhostscriptProcessor();
List<string> switches = new List<string>
{
"-dNOPAUSE",
"-dBATCH",
"-dSAFER",
"-sDEVICE=pdfwrite",
$"-sOutputFile={outputPdf}"
};
switches.AddRange(inputFiles);
processor.Process(switches.ToArray());
}
}
// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using System.Collections.Generic;
class GhostscriptExample
{
static void Main()
{
string outputPdf = "merged.pdf";
string[] inputFiles = { "file1.pdf", "file2.pdf", "file3.pdf" };
GhostscriptProcessor processor = new GhostscriptProcessor();
List<string> switches = new List<string>
{
"-dNOPAUSE",
"-dBATCH",
"-dSAFER",
"-sDEVICE=pdfwrite",
$"-sOutputFile={outputPdf}"
};
switches.AddRange(inputFiles);
processor.Process(switches.ToArray());
}
}
Imports Ghostscript.NET
Imports Ghostscript.NET.Processor
Imports System.Collections.Generic
Class GhostscriptExample
Shared Sub Main()
Dim outputPdf As String = "merged.pdf"
Dim inputFiles As String() = {"file1.pdf", "file2.pdf", "file3.pdf"}
Dim processor As New GhostscriptProcessor()
Dim switches As New List(Of String) From {
"-dNOPAUSE",
"-dBATCH",
"-dSAFER",
"-sDEVICE=pdfwrite",
$"-sOutputFile={outputPdf}"
}
switches.AddRange(inputFiles)
processor.Process(switches.ToArray())
End Sub
End Class
Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class IronPdfExample
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("file1.pdf"),
PdfDocument.FromFile("file2.pdf"),
PdfDocument.FromFile("file3.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class IronPdfExample
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("file1.pdf"),
PdfDocument.FromFile("file2.pdf"),
PdfDocument.FromFile("file3.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class IronPdfExample
Shared Sub Main()
Dim pdfs As New List(Of PdfDocument) From {
PdfDocument.FromFile("file1.pdf"),
PdfDocument.FromFile("file2.pdf"),
PdfDocument.FromFile("file3.pdf")
}
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
End Sub
End Class
El enfoque GPL de Ghostscript requiere memorizar la sintaxis de conmutación (-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite) y concatenar rutas de archivos en una matriz de cadenas. El método estático Merge deIronPDFproporciona una fusión segura de tipos habilitada para IntelliSense con objetos PdfDocument adecuados. Más información sobre mezclar y dividir archivos PDF.
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 a Ghostscript GPLes la diferencia en la indexación de páginas:
// Ghostscript GPL: 1-indexed pages
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
Image img = rasterizer.GetPage(300, pageNumber);
}
// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < images.Length; i++)
{
images[i].Save($"output_page{i + 1}.png");
}
// Ghostscript GPL: 1-indexed pages
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
Image img = rasterizer.GetPage(300, pageNumber);
}
// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < images.Length; i++)
{
images[i].Save($"output_page{i + 1}.png");
}
Option Strict On
' Ghostscript GPL: 1-indexed pages
For pageNumber As Integer = 1 To rasterizer.PageCount
Dim img As Image = rasterizer.GetPage(300, pageNumber)
Next
' IronPDF: 0-indexed pages (standard .NET)
For i As Integer = 0 To images.Length - 1
images(i).Save($"output_page{i + 1}.png")
Next
Se eliminan los problemas de la licencia AGPL
La licencia AGPL de Ghostscript GPLtiene propiedades "virales" que requieren la divulgación del código fuente cuando se distribuyen aplicaciones. La licencia comercial deIronPDFtiene unos términos claros y no impone ningún requisito de este tipo.
Sin binarios externos
IronPDF es totalmente autónomo. Elimínelas después de la migración:
- Archivos
gsdll32.dllygsdll64.dll - Instalación de Ghostscript GPLdesde servidores
- Configuraciones de la variable de entorno PATH
GhostscriptVersionInforeferencias en el código
Archivos PostScript
IronPDF no maneja archivos PostScript (.ps) directamente. Si su flujo de trabajo requiere el procesamiento de PostScript:
- Convertir PostScript a PDF utilizando otra herramienta antes de procesar IronPDF
- Convierta el contenido fuente a HTML y utilice el renderizado HTML de IronPDF
Consideraciones sobre el rendimiento
Sin generación de procesos
Las operaciones Ghostscript GPLgeneran procesos externos con la sobrecarga asociada.IronPDFfunciona dentro de su proceso .NET:
// Ghostscript GPL: Process spawning overhead
processor.Process(switches.ToArray()); // Creates new OS process
// IronPDF: In-process execution
var merged = PdfDocument.Merge(pdfs); // Native .NET method call
// Ghostscript GPL: Process spawning overhead
processor.Process(switches.ToArray()); // Creates new OS process
// IronPDF: In-process execution
var merged = PdfDocument.Merge(pdfs); // Native .NET method call
Seguridad de los hilos
IronPDF está diseñado a prueba de hilos. Varios subprocesos pueden usar ChromePdfRenderer y PdfDocument simultáneamente sin problemas de sincronización.
Lista de comprobación de la migración
Pre-Migración
- Inventario de todo el uso de la GPL de Ghostscript en el código base
- Documentar los modificadores de línea de comandos actuales utilizados
- Identificar cualquier procesamiento PostScript (requiere un manejo especial)
- Revisar el estado de cumplimiento de la licencia AGPL
- Obtener la clave de licencia de IronPDF
- Crear rama de migración en el control de versiones
Migración de código
- Eliminar el paquete NuGet de Ghostscript .NET :
dotnet remove package Ghostscript.NET - Instalar el paquete NuGet deIronPDF:
dotnet add package IronPdf - Eliminar dependencias binarias GPL externas de Ghostscript
- Eliminar
GhostscriptVersionInfoy referencias DLL - Convertir
GhostscriptProcessor.Process()a métodos IronPDF - Convertir
GhostscriptRasterizerapdf.ToBitmap() - Reemplace los modificadores de la línea de comandos con llamadas API
- Actualizar el manejo de errores del análisis de stderr a excepciones
- Convertir números de página indexados en 1 a indexados en 0
Pruebas
- Prueba la conversión de PDF a imagen
- Prueba de fusión de PDF
- Extracción de página de prueba
- Pruebe la calidad de la compresión
- Probar la protección de contraseña
- Verificar que la calidad de salida coincida con las expectativas
- Rutas críticas de referencia de rendimiento
Despliegue
- Eliminar la GPL de Ghostscript de los servidores
- Eliminar la configuración de PATH
- Eliminar archivos
gsdll*.dllde las implementaciones - Verificar que la aplicación funcione sin Ghostscript GPLinstalado
Posmigración
- Eliminar la licencia GPL de Ghostscript (si es comercial)
- Actualización de la documentación
- Capacitar al equipo sobre la API de IronPDF
- Supervisar la producción para detectar cualquier problema.

