Como migrar do Ghostscript GPL para o IronPDF em C#
A migração do Ghostscript GPL para o IronPDF transforma seu fluxo de trabalho de PDF em .NET , passando da criação de processos pela linha de comando e manipulação de parâmetros baseada em strings para uma API nativa do .NET com tipagem estática e habilitada para IntelliSense. Este guia fornece um caminho de migração abrangente, passo a passo, que elimina as preocupações com a licença AGPL e as dependências binárias externas para desenvolvedores .NET profissionais.
Por que migrar do Ghostscript GPL para o IronPDF?
Os desafios do Ghostscript GPL
Ghostscript GPL é um interpretador PostScript/PDF consagrado com décadas de história, mas seu uso em aplicações .NET modernas apresenta desafios significativos:
-
Restrições da Licença AGPL: A licença AGPL do Ghostscript GPL exige que você libere seu código-fonte se distribuir software que o utilize — a menos que compre uma licença comercial cara da Artifex. Esse modelo de licenciamento "viral" cria um risco legal significativo para aplicativos proprietários.
-
Interface de linha de comando: O Ghostscript GPL é fundamentalmente uma ferramenta de linha de comando. Utilizá-lo em C# exige a criação de processos, a passagem de argumentos em formato de string e a análise da saída — uma abordagem frágil e propensa a erros.
-
Dependência binária externa: Você deve instalar o Ghostscript GPL separadamente, gerenciar as variáveis PATH e garantir a compatibilidade de versões em todos os ambientes de implantação. DLLs diferentes são necessárias para 32 bits em comparação com 64 bits (
gsdll32.dllvsgsdll64.dll). -
Sem conversão nativa de HTML para PDF: o Ghostscript GPL não consegue converter HTML para PDF diretamente. Primeiro, você precisa converter o HTML para PostScript usando outra ferramenta e, em seguida, usar o Ghostscript GPL para converter o PostScript para PDF — um processo de várias etapas com dependências externas.
-
Sintaxe de interruptor complexa: As operações são controladas por meio de interruptores de linha de comando enigmáticos, como
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=.... Sem IntelliSense, sem segurança de digitação e fácil de digitar errado. -
Tratamento de erros: Os erros chegam pelo stderr como cadeias de texto, exigindo análise sintática em vez de um tratamento estruturado de exceções.
- Sobrecarga de gerenciamento de processos: Cada operação gera um processo separado, adicionando sobrecarga e complexidade para tratamento de erros, tempos limite e limpeza de recursos.
Comparação entre Ghostscript GPL e IronPDF
| Aspecto | Ghostscript GPL | IronPDF |
|---|---|---|
| Licença | AGPL (viral) ou comercial caro | Comercial com termos claros |
| Integração | Geração de processos pela linha de comando | Biblioteca nativa do .NET |
| Design de API | Interruptores baseados em strings | API tipada e com IntelliSense integrado |
| Tratamento de erros | Analisar texto stderr | Exceções do .NET |
| HTML para PDF | Não suportado (necessita de ferramentas externas) | Motor Chromium integrado |
| Dependências | Instalação binária externa | Pacote NuGet independente |
| Implantação | Configure o PATH, copie as DLLs. | Basta adicionar a referência do NuGet. |
| Segurança da rosca | Somente isolamento de processo | Projetado para ser seguro contra roscas. |
| .NET moderno | Suporte limitado | Suporte completo for .NET 6/7/8/9/10 |
| Suporte assíncrono | Baseado em processos | assíncrono/await nativo |
Para equipes que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece uma base preparada para o futuro que se integra nativamente aos padrões modernos do .NET .
Avaliação da Complexidade da Migração
Esforço estimado por funcionalidade
| Recurso | Complexidade da Migração |
|---|---|
| PDF para imagens | Baixo |
| Mesclar PDFs | Baixo |
| Comprimir PDF | Baixo |
| Otimização de PDF | Baixo |
| Criptografia | Médio |
| Extração de Páginas | Baixo |
| PostScript para PDF | Médio-Alto |
| Interruptores personalizados | Médio-Alto |
Mudança de paradigma
A mudança fundamental nesta migração do Ghostscript para a GPL é a transição da execução de processos em linha de comando para chamadas de API .NET tipadas:
Ghostscript GPL: "Passe essas opções de string para um processo externo"
IronPDF: "Chame esses métodos em objetos .NET "
Antes de começar
Pré-requisitos
- Versão do .NET : O IronPDF é compatível com o .NET Framework 4.6.2+ e .NET Core 2.0+ / .NET 5/6/7/8/9+
- Chave de licença: Obtenha sua chave de licença do IronPDF em IronPDF
- Backup: Crie uma ramificação para o trabalho de migração.
Identificar todo o uso do Ghostscript sob a licença 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" .
Alterações no pacote 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
Remover dependências GPL do Ghostscript
Após a migração:
- Desinstale o Ghostscript GPL dos servidores
- Remover
gsdll32.dll/gsdll64.dlldas implantações - Remover a configuração PATH para o Ghostscript GPL
- Remova quaisquer referências a
GhostscriptVersionInfo
Migração de Início Rápido
Etapa 1: Atualizar a configuração da licença
Antes (Ghostscript GPL):
O Ghostscript GPL, sob a licença AGPL, exige a divulgação do código-fonte ou uma licença comercial cara da Artifex.
Apó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"
Etapa 2: Atualizar importações de namespace
// 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
Referência completa da API
Mapeamento de Classes Principais
| Ghostscript.NET | IronPDF | Descrição |
|---|---|---|
GhostscriptProcessor |
Vários métodos PdfDocument |
Processamento de PDF |
GhostscriptRasterizer |
PdfDocument.ToBitmap() / RasterizeToImageFiles() |
PDF para imagens |
GhostscriptVersionInfo |
N/A (não necessário) | localização da DLL |
GhostscriptStdIO |
Não aplicável (use exceções) | Manipulação de E/S |
| Processo + linha de comando | ChromePdfRenderer |
HTML para PDF |
Mapeamento de opções de linha de comando
| Ghostscript GPL Switch | Equivalente ao IronPDF | Descrição |
|---|---|---|
-dNOPAUSE |
N/A (não necessário) | Não faça pausas entre as páginas. |
-dBATCH |
N/A (não necessário) | Sair após o processamento |
-dSAFER |
Não aplicável (padrão) | Acesso seguro a arquivos |
-sDEVICE=pdfwrite |
Vários métodos de PDF | PDF de saída |
-sDEVICE=png16m |
ToBitmap() ou RasterizeToImageFiles() |
Saída PNG |
-sOutputFile=X |
SaveAs("X") |
Nome do arquivo de saída |
-r300 |
Parâmetro DPI em métodos | Resolução |
-dPDFSETTINGS=/ebook |
CompressImages(quality: 75) |
Qualidade média |
-sOwnerPassword=X |
SecuritySettings.OwnerPassword |
Senha do proprietário |
-sUserPassword=X |
SecuritySettings.UserPassword |
Senha do usuário |
Exemplos de migração de código
Exemplo 1: Conversão de HTML para 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
Apó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
A diferença é gritante: o Ghostscript GPL não consegue converter HTML para PDF diretamente — ele requer uma conversão intermediária em PostScript usando ferramentas externas. O ChromePdfRenderer do IronPDF oferece conversão direta de HTML para PDF com suporte completo a CSS3, JavaScript e padrões web modernos. Consulte a documentação de conversão de HTML para PDF para obter mais opções de renderização.
Exemplo 2: PDF para imagens
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
Apó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
A abordagem do Ghostscript GPL exige localizar o objeto externo gsdll64.dll, criar um objeto GhostscriptVersionInfo e usar números de página indexados a partir de 1. O método ToBitmap() do IronPDF oferece uma abordagem limpa, em uma única linha, sem dependências externas. Observe a diferença na indexação das páginas: o Ghostscript GPL usa páginas indexadas a partir de 1, enquanto o IronPDF usa páginas indexadas a partir de 0 (convenção padrão do .NET ).
Exemplo 3: Mesclar arquivos 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
Apó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
A abordagem do Ghostscript GPL exige memorizar a sintaxe de seleção (-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite) e concatenar caminhos de arquivos em uma matriz de strings. O método estático Merge do IronPDF fornece mesclagem segura em relação a tipos e habilitada para IntelliSense com objetos PdfDocument adequados. Saiba mais sobre como mesclar e dividir PDFs .
Notas críticas sobre migração
Conversão de indexação de páginas
Uma das mudanças mais importantes nesta migração do Ghostscript para a licença GPL é a diferença na indexação 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
Preocupações com a licença AGPL eliminadas
A licença AGPL do Ghostscript GPL possui propriedades "virais" que exigem a divulgação do código-fonte ao distribuir aplicativos. A licença comercial do IronPDF possui termos claros e não exige tais medidas.
Sem binários externos
IronPDF é totalmente independente. Remova estes itens após a migração:
- Arquivos
gsdll32.dllegsdll64.dll - Instalação do Ghostscript GPL a partir de servidores
- Configurações da variável de ambiente PATH
GhostscriptVersionInforeferências no código
Arquivos PostScript
O IronPDF não lida diretamente com arquivos PostScript (.ps). Se o seu fluxo de trabalho exigir processamento PostScript, você pode:
- Converta PostScript para PDF usando outra ferramenta antes do processamento com o IronPDF.
- Converta o conteúdo original para HTML e use a renderização HTML do IronPDF.
Considerações sobre o desempenho
Nenhum processo sendo gerado
As operações do Ghostscript sob a licença GPL geram processos externos com a sobrecarga associada. O IronPDF opera dentro do seu processo .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
Segurança da rosca
IronPDF foi projetado para ser seguro em relação a threads. Várias threads podem usar ChromePdfRenderer e PdfDocument simultaneamente sem problemas de sincronização.
Lista de verificação para migração
Pré-migração
- Inventariar todo o uso do Ghostscript sob a licença GPL na base de código.
- Documentar os parâmetros de linha de comando atualmente utilizados.
- Identificar qualquer processamento PostScript (que necessite de tratamento especial)
- Analisar o status de conformidade da licença AGPL
- Obtenha a chave de licença do IronPDF
- Criar branch de migração no controle de versão
Migração de código
- Remover o pacote NuGet Ghostscript .NET :
dotnet remove package Ghostscript.NET - Instale o pacote NuGet IronPDF :
dotnet add package IronPdf - Remover dependências binárias externas do Ghostscript GPL
- Remover
GhostscriptVersionInfoe referências a DLLs - Converter
GhostscriptProcessor.Process()para métodos IronPDF - Converter
GhostscriptRasterizerparapdf.ToBitmap() - Substituir parâmetros de linha de comando por chamadas de API
- Atualizar o tratamento de erros da análise de stderr para exceções.
- Converter números de página com índice 1 para índice 0
Testando
- Teste de conversão de PDF para imagem
- Teste de fusão de PDFs
- Extração de página de teste
- Testar a qualidade da compressão
- Testar proteção por senha
- Verificar se a qualidade da saída corresponde às expectativas.
- Caminhos críticos de benchmark de desempenho
Implantação
- Remover o Ghostscript GPL dos servidores
- Remover configuração do PATH
- Remover arquivos
gsdll*.dlldas implantações - Verifique se o aplicativo funciona sem o Ghostscript GPL instalado.
Pós-migração
- Remover a licença GPL do Ghostscript (se for comercial)
- Atualizar documentação
- Treinar a equipe na API do IronPDF
- Monitorar a produção para identificar quaisquer problemas.

