Jak przejść z Ghostscript GPL na IronPDF w języku C#
Przejście z Ghostscript GPL naIronPDFprzekształca proces obsługi plików PDF w środowisku .NET z uruchamiania procesów z wiersza poleceń i manipulacji przełącznikami opartymi na ciągach znaków w bezpieczne pod względem typów, natywne API .NET z obsługą IntelliSense. Niniejszy przewodnik zawiera kompleksową, szczegółową ścieżkę migracji, która eliminuje obawy związane z licencją AGPL oraz zewnętrznymi zależnościami binarnymi dla profesjonalnych programistów .NET.
Dlaczego warto przejść z Ghostscript GPL na IronPDF
Wyzwania związane z licencją GPL Ghostscript
Ghostscript GPL to szanowany interpreter PostScript/PDF z wieloletnią historią, ale jego wykorzystanie w nowoczesnych aplikacjach .NET wiąże się z poważnymi wyzwaniami:
-
Ograniczenia licencji AGPL: Licencja AGPL Ghostscript GPL wymaga udostępnienia kodu źródłowego w przypadku dystrybucji oprogramowania, które z niego korzysta — chyba że zakupisz kosztowną licencję komercyjną od firmy Artifex. Ten "wirusowy" model licencjonowania stwarza poważne ryzyko prawne dla aplikacji zastrzeżonych.
-
Interfejs wiersza poleceń: Ghostscript GPL jest zasadniczo narzędziem działającym w wierszu poleceń. Korzystanie z niego w języku C# wymaga uruchamiania procesów, przekazywania argumentów typu string oraz analizowania wyników — jest to podejście niestabilne i podatne na błędy.
-
Zewnętrzne zależności binarne: Należy osobno zainstalować Ghostscript GPL, zarządzać zmiennymi PATH oraz zapewnić zgodność wersji we wszystkich środowiskach wdrożeniowych. Do wersji 32-bitowej i 64-bitowej wymagane są różne biblioteki DLL (
gsdll32.dllvsgsdll64.dll). -
Brak natywnej konwersji HTML do PDF: Ghostscript GPL nie może bezpośrednio konwertować HTML do PDF. Najpierw należy przekonwertować HTML na PostScript za pomocą innego narzędzia, a następnie użyć Ghostscript GPL do konwersji PostScriptu na PDF — jest to wieloetapowy proces z zależnościami zewnętrznymi.
-
Złożona składnia przełączników: Operacje są sterowane za pomocą tajemniczych przełączników wiersza poleceń, takich jak
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=.... Brak IntelliSense, brak bezpieczeństwa typów i łatwość popełnienia błędu podczas wpisywania. -
Obsługa błędów: Błędy są przekazywane przez stderr jako ciągi tekstowe, co wymaga parsowania, a nie strukturalnej obsługi wyjątków.
- Obciążenie związane z zarządzaniem procesami: Każda operacja uruchamia oddzielny proces, co zwiększa obciążenie i złożoność obsługi błędów, limitów czasu oraz czyszczenia zasobów.
Porównanie Ghostscript GPL i IronPDF
| Aspekt | Ghostscript GPL | IronPDF |
|---|---|---|
| Licencja | AGPL (wirusowa) lub kosztowna licencja komercyjna | Reklama z jasnymi warunkami |
| Integracja | Tworzenie procesów z wiersza poleceń | Natywna biblioteka .NET |
| Projektowanie API | Przełączniki oparte na ciągach znaków | API z obsługą IntelliSense |
| Obsługa błędów | Analiza tekstu stderr | Wyjątki .NET |
| HTML do PDF | Nieobsługiwane (wymagane narzędzia zewnętrzne) | Wbudowany silnik Chromium |
| Zależności | Zewnętrzna instalacja plików binarnych | Samodzielny pakiet NuGet |
| Wdrożenie | Skonfiguruj ścieżkę PATH, skopiuj pliki DLL | Wystarczy dodać odwołanie NuGet |
| Bezpieczeństwo wątków | Tylko izolacja procesów | Zabezpieczone przed współbieżnością już w fazie projektowania |
| Nowoczesny .NET | Ograniczone wsparcie | Pełna obsługa .NET 6/7/8/9/10 |
| Obsługa asynchroniczna | Oparte na procesach | Natywne async/await |
Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFzapewnia przyszłościową platformę, która natywnie integruje się z nowoczesnymi wzorcami .NET.
Ocena złożoności migracji
Szacowany nakład pracy według funkcji
| Funkcja | Złożoność migracji |
|---|---|
| PDF na obrazy | Low |
| Łączenie plików PDF | Low |
| Kompresuj plik PDF | Low |
| Optymalizacja plików PDF | Low |
| Szyfrowanie | Medium |
| Wyodrębnianie stron | Low |
| PostScript do PDF | Średnio-wysoki |
| Przełączniki niestandardowe | Średnio-wysoki |
Zmiana paradygmatu
Podstawową zmianą w migracji Ghostscript GPL jest przejście od wykonywania procesów z wiersza poleceń do typowanych wywołań API .NET:
Ghostscript GPL: "Przekaż te przełączniki łańcuchowe do procesu zewnętrznego"
IronPDF: "Wywołaj te metody na obiektach .NET"
Zanim zaczniesz
Wymagania wstępne
- Wersja .NET:IronPDFobsługuje .NET Framework 4.6.2+ oraz .NET Core 2.0+ / .NET 5/6/7/8/9+
- Klucz licencyjny: Uzyskaj klucz licencyjnyIronPDFna stronie ironpdf.com
- Kopia zapasowa: Utwórz gałąź do prac migracyjnych
Zidentyfikuj wszystkie przypadki użycia 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" .
Zmiany w pakiecie 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
Usuń zależności od Ghostscript GPL
Po migracji:
- Odinstaluj Ghostscript GPL z serwerów
- Usuń
gsdll32.dll/gsdll64.dllz wdrożeń - Usuń konfigurację PATH dla Ghostscript GPL
- Usuń wszystkie odniesienia
GhostscriptVersionInfo
Szybki start – migracja
Krok 1: Zaktualizuj konfigurację licencji
Przed (Ghostscript GPL):
Licencja Ghostscript GPL na zasadach AGPL wymaga ujawnienia kodu źródłowego lub zakupu kosztownej licencji komercyjnej od firmy Artifex.
Po (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"
Krok 2: Zaktualizuj importy przestrzeni nazw
// 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
Kompletna dokumentacija API
Mapowanie klas podstawowych
| Ghostscript.NET | IronPDF | Opis |
|---|---|---|
GhostscriptProcessor |
Różne metody PdfDocument |
Przetwarzanie plików PDF |
GhostscriptRasterizer |
PdfDocument.ToBitmap() / RasterizeToImageFiles() |
PDF na obrazy |
GhostscriptVersionInfo |
N/A (nie dotyczy) | Lokalizacja pliku DLL |
GhostscriptStdIO |
Nie dotyczy (użyj wyjątków) | Obsługa wejścia/wyjścia |
| Proces + wiersz poleceń | ChromePdfRenderer |
HTML do PDF |
Mapowanie przełączników wiersza poleceń
| Przełącznik licencji GPL dla Ghostscript | OdpowiednikIronPDF | Opis |
|---|---|---|
-dNOPAUSE |
N/A (nie dotyczy) | Nie zatrzymuj się między stronami |
-dBATCH |
N/A (nie dotyczy) | Wyjdź po przetworzeniu |
-dSAFER |
N/A (domyślnie) | Bezpieczny dostęp do plików |
-sDEVICE=pdfwrite |
Różne metody obsługi plików PDF | Wynik w formacie PDF |
-sDEVICE=png16m |
ToBitmap() lub RasterizeToImageFiles() |
Wynik w formacie PNG |
-sOutputFile=X |
SaveAs("X") |
Nazwa pliku wyjściowego |
-r300 |
Parametr DPI w metodach | Rozwiązanie |
-dPDFSETTINGS=/ebook |
CompressImages(quality: 75) |
Średnia jakość |
-sOwnerPassword=X |
SecuritySettings.OwnerPassword |
Hasło właściciela |
-sUserPassword=X |
SecuritySettings.UserPassword |
Hasło użytkownika |
Przykłady migracji kodu
Przykład 1: Konwersja HTML do PDF
Przed (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
Po (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
Różnica jest ogromna: Ghostscript GPL w ogóle nie może bezpośrednio konwertować HTML na PDF — wymaga pośredniej konwersji do PostScriptu przy użyciu zewnętrznych narzędzi. ChromePdfRenderer firmyIronPDFzapewnia bezpośrednią konwersję HTML do PDF z pełną obsługą CSS3, JavaScript i nowoczesnych standardów internetowych. Więcej opcji renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.
Przykład 2: PDF na obrazy
Przed (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
Po (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
Podejście Ghostscript GPL wymaga zlokalizowania zewnętrznego gsdll64.dll, utworzenia obiektu GhostscriptVersionInfo oraz użycia numeracji stron zaczynającej się od 1. Metoda ToBitmap() firmyIronPDFzapewnia przejrzyste, jednowierszowe podejście bez zewnętrznych zależności. Zwróć uwagę na różnicę w indeksowaniu stron: Ghostscript GPL używa stron indeksowanych od 1, podczas gdyIronPDFużywa stron indeksowanych od 0 (standardowa konwencja .NET).
Przykład 3: Łączenie plików PDF
Przed (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
Po (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
Podejście Ghostscript GPL wymaga zapamiętania składni przełączników (-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite) oraz połączenia ścieżek plików w tablicę ciągów znaków. Metoda statyczna Merge bibliotekiIronPDFzapewnia bezpieczne pod względem typów scalanie z obsługą IntelliSense przy użyciu odpowiednich obiektów PdfDocument. Dowiedz się więcej o łączeniu i dzieleniu plików PDF.
Ważne uwagi dotyczące migracji
Konwersja indeksowania stron
Jedną z najważniejszych zmian w tej migracji Ghostscript GPL jest różnica w indeksowaniu stron:
// 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
Kwestie związane z licencją AGPL wyeliminowane
Licencja AGPL projektu Ghostscript GPL ma właściwości "wirusowe", które wymagają ujawnienia kodu źródłowego podczas dystrybucji aplikacji. Licencja komercyjnaIronPDFzawiera jasne warunki, które nie zawierają takich wymagań.
Brak zewnętrznych plików binarnych
IronPDF jest całkowicie samowystarczalny. Usuń te elementy po migracji:
- Pliki
gsdll32.dlligsdll64.dll - Instalacja Ghostscript GPL z serwerów
- Konfiguracje zmiennych środowiskowych PATH
GhostscriptVersionInfoodniesienia w kodzie
Pliki PostScript
IronPDF nie obsługuje bezpośrednio plików PostScript (.ps). Jeśli Twój proces pracy wymaga przetwarzania PostScript, możesz:
- Przed przetworzeniem wIronPDFnależy przekonwertować PostScript na PDF za pomocą innego narzędzia
- Przekonwertuj treść źródłową na HTML i użyj renderowania HTML w IronPDF
Kwestie związane z wydajnością
Brak tworzenia procesów
Operacje Ghostscript GPL uruchamiają procesy zewnętrzne, co wiąże się z dodatkowym obciążeniem.IronPDFdziała w ramach procesu .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
Bezpieczeństwo wątków
IronPDF jest z założenia bezpieczny dla wątków. Wiele wątków może korzystać z ChromePdfRenderer i PdfDocument jednocześnie bez obaw o synchronizację.
Lista kontrolna migracji
Przed migracją
- Sporządź spis wszystkich przypadków użycia Ghostscript GPL w kodzie źródłowym
- Dokumentacja aktualnych przełączników wiersza poleceń
- Zidentyfikuj wszelkie operacje związane z PostScriptem (wymagają specjalnego traktowania)
- Sprawdź status zgodności z licencją AGPL
- Uzyskaj klucz licencyjny IronPDF
- Utwórz gałąź migracji w systemie kontroli wersji
Migracja kodu
- Usuń pakiet NuGet Ghostscript.NET:
dotnet remove package Ghostscript.NET - Zainstaluj pakiet IronPdf NuGet:
dotnet add package IronPdf - Usuń zewnętrzne zależności binarne Ghostscript GPL
- Usuń
GhostscriptVersionInfoi odniesienia do bibliotek DLL - Zamień
GhostscriptProcessor.Process()na metody IronPDF - Zamień
GhostscriptRasterizernapdf.ToBitmap() - Zastąp przełączniki wiersza poleceń wywołaniami API
- Zaktualizuj obsługę błędów z analizowania stderr na wyjątki
- Zamień numerację stron z 1 na 0
Testowanie
- Przetestuj konwersję plików PDF na obrazy
- Testowanie łączenia plików PDF
- Wyodrębnianie strony testowej
- Sprawdź jakość kompresji
- Test ochrony hasłem
- Sprawdź, czy jakość tłumaczenia odpowiada oczekiwaniom
- Ścieżki krytyczne testów wydajności
Wdrożenie
- Usuń Ghostscript GPL z serwerów
- Usuń konfigurację PATH
- Usuń pliki
gsdll*.dllz wdrożeń - Sprawdź, czy aplikacja działa bez zainstalowanego Ghostscript GPL
Po migracji
- Usunąć licencję GPL Ghostscript (jeśli jest to wersja komercyjna)
- Aktualizacja dokumentacji
- Przeprowadź szkolenie zespołu z zakresu API IronPDF
- Monitoruj produkcję pod kątem wszelkich problemów

