Como migrar do Ghostscript GPL para o IronPDF em C#
Migrar doGhostscriptpara o IronPDF move seu fluxo de trabalho de PDF .NET do processo de comando da linha de comando e manipulação de chave baseada em string para uma API nativa .NET digitada, habilitada para IntelliSense. Este guia percorre um caminho de migração passo-a-passo que remove a exposição de licenciamento AGPL-3.0 e a dependência de binários nativos externos.
Uma nota sobre terminologia:Ghostscript(da Artifex Software) é duplamente licenciado sob AGPL-3.0 ou uma licença comercial, não GPL puro. A tag "GPL" é uma abreviatura de longa data da comunidade para a build de código aberto; tudo neste guia refere-se à compilação AGPL-3.0 doGhostscripte ao wrapper Ghostscript.NET (que também é AGPL-3.0 / comercial-dual). A partir do .NET, oGhostscripté normalmente consumido através desse wrapper, que realiza P/Invoke do nativo gsdll32.dll / gsdll64.dll, ou através da execução de comandos para gswin32c / gswin64c via Process.Start.
Por que Migrar doGhostscriptpara o IronPDF
Os Desafios do Ghostscript
Ghostscript é um intérprete de PostScript/PDF de longa data da Artifex Software com décadas de história. Seu uso em aplicações modernas de .NET apresenta vários desafios práticos:
-
Restrições de Licença AGPL-3.0: Tanto oGhostscriptquanto o wrapper
Ghostscript.NETsão licenciados duplamente sob AGPL-3.0 ou uma licença comercial da Artifex. A cláusula copyleft de rede do AGPL normalmente exige que você libere o código correspondente do trabalho maior — incluindo para uso SaaS / de rede — a menos que você adquira uma licença comercial. Isso geralmente descarta a build AGPL para aplicativos .NET de código fechado ou hospedados. -
Interface de Linha de Comando: OGhostscripté fundamentalmente uma ferramenta de linha de comando. Usá-lo a partir de C# significa criar processos, passar argumentos de string e analisar a saída — ou via
Process.Startcontragswin*c.exeou via o wrapper P/InvokeGhostscript.NET. -
Dependência de Binário Externo: Você deve instalar oGhostscriptseparadamente, gerenciar as variáveis PATH e manter as versões alinhadas em todos os ambientes. Diferentes DLLs nativas são necessárias para 32 bits versus 64 bits (
gsdll32.dllvsgsdll64.dll). -
Sem HTML-para-PDF Nativo: OGhostscriptnão pode converter HTML para PDF diretamente. Primeiro, você precisa converter o HTML para PostScript com outra ferramenta e depois executar oGhostscriptpara converter o PostScript em PDF — um pipeline de múltiplas etapas com dependências externas.
-
Sintaxe Complexa de Comutadores: As operações são controladas via comutadores de linha de comando como
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=.... Sem IntelliSense, sem verificações de tempo de compilação. -
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 Processo: Cada operação cria um processo separado, adicionando sobrecarga e complexidade para timeouts e limpeza de recursos.
Comparação entreGhostscripte IronPDF
| Aspecto | Ghostscript | IronPDF |
|---|---|---|
| Licença | AGPL-3.0 (copyleft de rede) ou comercial da Artifex | 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 | Ghostscript.NET v1.3.x targets .NET Standard 2.0 |
.NET Framework 4.6.2+ and .NET 6/7/8/9 |
| Suporte assíncrono | Baseado em processos | assíncrono/await nativo |
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 doGhostscripté de execução de processo de linha de comando para chamadas de API .NET digitadas:
Ghostscript: "Passe esses switches de string para um processo externo"
IronPDF: "Chame esses métodos em objetos .NET"
Antes de começar
Pré-requisitos
- .NET Version:IronPDF supports .NET Framework 4.6.2+ and .NET Core / .NET 5+ (including .NET 6/7/8/9).
Ghostscript.NETv1.3.x targets .NET Standard 2.0. - 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
# 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 do Ghostscript
Após a migração:
- Desinstale oGhostscriptdos servidores
- Remove
gsdll32.dll/gsdll64.dlldas implantações - Remova a configuração do PATH para o Ghostscript
- Remova quaisquer referências
GhostscriptVersionInfo
Migração de Início Rápido
Etapa 1: Atualizar a configuração da licença
Before (Ghostscript):
OGhostscriptsob AGPL-3.0 requer a divulgação de código fonte sob os termos do AGPL ou uma licença comercial da Artifex.
Após (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
Etapa 2: Atualizar importações de namespace
// Before (Ghostscript)
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using Ghostscript.NET.Rasterizer;
// After (IronPDF)
using IronPdf;
// Before (Ghostscript)
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using Ghostscript.NET.Rasterizer;
// After (IronPDF)
using IronPdf;
Imports Ghostscript.NET
Imports Ghostscript.NET.Processor
Imports Ghostscript.NET.Rasterizer
' After (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.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
| Switch do Ghostscript | 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 |
RasterizeToImageFiles("*.png", DPI: N) |
Saída PNG |
-sOutputFile=X |
SaveAs("X") |
Nome do arquivo de saída |
-r300 |
Parâmetro DPI: 300 |
Resolução |
-dPDFSETTINGS=/ebook |
CompressImages(quality: 60) |
Qualidade média |
-dFirstPage=N -dLastPage=M |
CopyPages(new[] {N-1, ..., M-1}) |
Extração de página (indexada a partir de 0) |
-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
Before (Ghostscript):
// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using System.IO;
using System.Text;
class GhostscriptExample
{
static void Main()
{
//Ghostscriptcannot directly convert HTML to PDF
// You need to first convert HTML to PS/EPS using another tool
// then useGhostscriptto 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 -Ghostscriptprimarily 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()
{
//Ghostscriptcannot directly convert HTML to PDF
// You need to first convert HTML to PS/EPS using another tool
// then useGhostscriptto 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 -Ghostscriptprimarily 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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
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
OGhostscriptnão pode converter HTML para PDF diretamente - ele espera a entrada de PostScript ou PDF, então um fluxo de trabalho HTML requer uma conversão intermediária (normalmente via wkhtmltopdf ou similar). O ChromePdfRenderer do IronPDF fornece renderização direta de HTML para PDF com suporte a CSS, JavaScript e padrões web modernos via um mecanismo Chromium embutido. Veja a documentação de HTML para PDF para mais opções de renderização.
Exemplo 2: PDF para imagens
Before (Ghostscript):
// 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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var pdf = PdfDocument.FromFile("input.pdf");
// One-shot: write every page as PNG matching Ghostscript's -r300 -sDEVICE=png16m
pdf.RasterizeToImageFiles("output_page*.png", DPI: 300);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfExample
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var pdf = PdfDocument.FromFile("input.pdf");
// One-shot: write every page as PNG matching Ghostscript's -r300 -sDEVICE=png16m
pdf.RasterizeToImageFiles("output_page*.png", DPI: 300);
}
}
Imports IronPdf
Imports System
Class IronPdfExample
Shared Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim pdf = PdfDocument.FromFile("input.pdf")
' One-shot: write every page as PNG matching Ghostscript's -r300 -sDEVICE=png16m
pdf.RasterizeToImageFiles("output_page*.png", DPI:=300)
End Sub
End Class
A abordagem doGhostscriptrequer localizar o gsdll64.dll externo, criar um objeto GhostscriptVersionInfo e iterar páginas com números de página indexados a partir de 1. O RasterizeToImageFiles do IronPDF escreve todas as páginas em uma única chamada com um padrão de saída glob e um parâmetro DPI: explícito, sem dependência nativa externa. Observe que, quando você trabalha com índices de páginas, oGhostscriptutiliza 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
Before (Ghostscript):
// 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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim pdfs = 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 doGhostscriptrequer a invocação completa de comutadores (-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite) e concatenar caminhos de arquivo em um array de strings. O método estático Merge do IronPDF aceita um IEnumerable<PdfDocument> tipado e retorna um novo PdfDocument. Saiba mais sobre como mesclar e dividir PDFs .
Notas críticas sobre migração
Conversão de indexação de páginas
Uma das diferenças mais importantes nesta migração é a indexação de páginas. Comutadores doGhostscriptcomo -dFirstPage=N / -dLastPage=M são indexados a partir de 1; O CopyPages do IronPDF é indexado a partir de 0 (padrão .NET):
// Ghostscript: -dFirstPage=5 -dLastPage=8 (1-indexed, inclusive)
// IronPDF: 0-indexed page array
var extracted = pdf.CopyPages(new[] {4, 5, 6, 7});
extracted.SaveAs("pages_5_to_8.pdf");
// Ghostscript: -dFirstPage=5 -dLastPage=8 (1-indexed, inclusive)
// IronPDF: 0-indexed page array
var extracted = pdf.CopyPages(new[] {4, 5, 6, 7});
extracted.SaveAs("pages_5_to_8.pdf");
' Ghostscript: -dFirstPage=5 -dLastPage=8 (1-indexed, inclusive)
' IronPDF: 0-indexed page array
Dim extracted = pdf.CopyPages({4, 5, 6, 7})
extracted.SaveAs("pages_5_to_8.pdf")
Preocupações com a Licença AGPL-3.0
Tanto oGhostscriptquanto o wrapper Ghostscript.NET são licenciados duplamente sob AGPL-3.0 ou uma licença comercial da Artifex. A cláusula copyleft de rede do AGPL tipicamente requer a liberação do código correspondente do trabalho maior — incluindo para implantações acessíveis pela rede/SaaS — a menos que você possua uma licença comercial da Artifex. Migrar cargas de trabalho de PDF para o IronPDF remove essa obrigação para as partes que são movidas; se você mantiver oGhostscriptapenas para ingestão de PostScript, uma licença comercial da Artifex cobre essa peça. (This is a general summary, not legal advice — consult counsel for your specific deployment.)
Sem binários externos
O IronPDF é distribuído como um pacote NuGet. Remova estes itens após a migração:
- Arquivos
gsdll32.dllegsdll64.dll - Instalação doGhostscriptdos servidores
- Configurações da variável de ambiente PATH
- Referências
GhostscriptVersionInfono 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
Executar comandos para gswin64c.exe (ou realizar P/Invoke de gsdll64.dll) acarreta sobrecarga de processo e interoperabilidade nativa por operação. O IronPDF executa em processo como código .NET gerenciado:
// Ghostscript: process or P/Invoke overhead per call
processor.Process(switches.ToArray());
// IronPDF: in-process method call
var merged = PdfDocument.Merge(pdfs);
// Ghostscript: process or P/Invoke overhead per call
processor.Process(switches.ToArray());
// IronPDF: in-process method call
var merged = PdfDocument.Merge(pdfs);
' Ghostscript: process or P/Invoke overhead per call
processor.Process(switches.ToArray())
' IronPDF: in-process method call
Dim merged = PdfDocument.Merge(pdfs)
Segurança da rosca
O IronPDF suporta o uso simultâneo de ChromePdfRenderer e PdfDocument a partir de múltiplas threads. Veja a documentação do IronPDF para orientação sobre padrões de renderização paralela.
Lista de verificação para migração
Pré-migração
- Inventário de todo o uso doGhostscriptno código
- Documentar os parâmetros de linha de comando atualmente utilizados.
- Identificar qualquer processamento PostScript (que necessite de tratamento especial)
- Revisar o estado de conformidade com a licença AGPL-3.0
- Obtenha a chave de licença do IronPDF
- Criar branch de migração no controle de versão
Migração de código
- Remova o pacote NuGet Ghostscript.NET:
dotnet remove package Ghostscript.NET - Instale o pacote NuGet do IronPDF:
dotnet add package IronPdf - Remover dependências de binário externo do Ghostscript
- Remova
GhostscriptVersionInfoe referências DLL - Converta
GhostscriptProcessor.Process()para métodos do IronPDF - Converta
GhostscriptRasterizerparapdf.RasterizeToImageFiles() - 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
- RemoverGhostscriptdos servidores
- Remover configuração do PATH
- Remova arquivos
gsdll*.dlldas implantações - Verificar se o aplicativo funciona sem oGhostscriptinstalado
Pós-migração
- Cancelar licença comercial da Artifex (se anteriormente mantida e não mais necessária)
- Atualizar documentação
- Treinar a equipe na API do IronPDF
- Monitorar a produção para identificar quaisquer problemas.

