Jak przejść z Ghostscript GPL na IronPDF w języku C#
Migracja zGhostscriptdo IronPDF przenosi twój przepływ pracy z plikami PDF z .NET z spawnów procesów z linii komend i manipulacji przełącznikami stringowymi do natywnego API .NET z włączonym IntelliSense. Ten przewodnik przeprowadza przez proces migracji krok po kroku, który eliminuje ekspozycję na licencjonowanie AGPL-3.0 oraz zależność od zewnętrznych natywnych plików binarnych.
Krótka uwaga o terminologii:Ghostscript(od Artifex Software) jest licencjonowany pod AGPL-3.0 lub licencją komercyjną, a nie zwykłym GPL. Tag "GPL" to od dawna używany skrót w społeczności na otwartą wersję źródłową; wszystko w tym przewodniku odnosi się do wersjiGhostscriptzbudowanej na AGPL-3.0 oraz okładki Ghostscript.NET (która również jest AGPL-3.0 / komercyjno-dualna). Z .NET,Ghostscriptjest zazwyczaj używany za pośrednictwem tej okładki, która korzysta z P/Invoke z natywnego gsdll32.dll / gsdll64.dll, lub przez wywołanie do gswin32c / gswin64c przez Process.Start.
Dlaczego warto migrować zGhostscriptdo IronPDF
Wyzwania Ghostscript
Ghostscript to długo działający interpreter PostScript/PDF od Artifex Software z dekadami historii. Jego użycie we współczesnych aplikacjach .NET stanowi wiele praktycznych wyzwań:
-
Ograniczenia licencji AGPL-3.0: Zarówno Ghostscript, jak i okładka
Ghostscript.NETsą podwójnie licencjonowane na AGPL-3.0 lub licencję komercyjną od Artifex. Klauzula network-copyleft AGPL zazwyczaj wymaga, byś udostępnił odpowiadające źródło większej pracy — w tym dla zastosowań SaaS / w sieci — chyba że zakupisz licencję komercyjną. To często wyklucza budowę AGPL dla aplikacji zamkniętoźródłowych lub hostowanych .NET. -
Interfejs linii komend:Ghostscriptto zasadniczo narzędzie linii komend. Użycie z C# oznacza uruchamianie procesów, przekazywanie argumentów w postaci łańcucha znaków i analizowanie wyników — albo przez
Process.Startprzeciwkogswin*c.exe, albo przez okładkę P/InvokeGhostscript.NET. -
Zewnętrzna zależność binarna: Musisz osobno zainstalować Ghostscript, zarządzać zmiennymi PATH i utrzymywać wersje zgodne w środowiskach. Różne natywne biblioteki DLL są wymagane dla wersji 32-bitowej i 64-bitowej (
gsdll32.dllvsgsdll64.dll). -
Brak natywnego HTML-to-PDF:Ghostscriptnie potrafi bezpośrednio konwertować HTML do PDF. Najpierw trzeba przekonwertować HTML do PostScript innym narzędziem, a następnie uruchomić Ghostscript, aby przekonwertować PostScript do PDF — wieloetapowa pipeline z zewnętrznymi zależnościami.
-
Złożona składnia przełączników: Operacje są kontrolowane za pomocą przełączników wiersza poleceń, takich jak
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=.... Brak IntelliSense, brak weryfikacji czasu kompilacji. -
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.
- Przeciążenie zarządzania procesem: Każda operacja generuje osobny proces, dodając przeciążenie i złożoność w zakresie timeoutów i czyszczenia zasobów.
PorównanieGhostscriptvs IronPDF
| Aspekt | Ghostscript | IronPDF |
|---|---|---|
| Licencja | AGPL-3.0 (network-copyleft) lub komercyjna Artifex | 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 | Ghostscript.NET v1.3.x jest przeznaczony dla .NET Standard 2.0 |
.NET Framework 4.6.2+ and .NET 6/7/8/9 |
| Obsługa asynchroniczna | Oparte na procesach | Natywne async/await |
Ocena złożoności migracji
Szacowany nakład pracy według funkcji
| Funkcja | Złożoność migracji |
|---|---|
| PDF na obrazy | Niski |
| Łączenie plików PDF | Niski |
| Kompresuj plik PDF | Niski |
| Optymalizacja plików PDF | Niski |
| Szyfrowanie | Medium |
| Wyodrębnianie stron | Niski |
| PostScript do PDF | Średnio-wysoki |
| Przełączniki niestandardowe | Średnio-wysoki |
Zmiana paradygmatu
Fundamentalna zmiana w tej migracjiGhostscriptpolega na przejściu z wykonania procesu liniowego komend do typu API .NET:
Ghostscript: "Przekaż te przełączniki stringowe do procesu zewnętrznego"
IronPDF: "Wywołaj te metody na obiektach .NET"
Zanim zaczniesz
Wymagania wstępne
- Wersja .NET:IronPDF wspiera .NET Framework 4.6.2+ oraz .NET Core / .NET 5+ (łącznie z .NET 6/7/8/9).
Ghostscript.NETv1.3.x jest przeznaczony dla .NET Standard 2.0. - Klucz licencyjny: Uzyskaj klucz licencyjny IronPDF na stronie ironpdf.com
- Kopia zapasowa: Utwórz gałąź do prac migracyjnych
Identyfikacja wszystkich użyć 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" .
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 Ghostscript
Po migracji:
- OdinstalujGhostscriptz serwerów
- Usuń
gsdll32.dll/gsdll64.dllz wdrożeń - Usuń konfigurację PATH dla Ghostscript
- Usuń wszelkie odniesienia do
GhostscriptVersionInfo
Szybki start – migracja
Krok 1: Zaktualizuj konfigurację licencji
Before (Ghostscript):
Ghostscript pod AGPL-3.0 wymaga albo ujawnienia źródła pod warunkami AGPL, albo licencji komercyjnej od Artifex.
Po (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
Krok 2: Zaktualizuj importy przestrzeni nazw
// 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
Kompletna dokumentacija API
Mapowanie klas podstawowych
| Ghostscript.NET | IronPDF | Opis |
|---|---|---|
GhostscriptProcessor |
Różne metody PdfDocument |
Przetwarzanie plików PDF |
GhostscriptRasterizer |
PdfDocument.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łącznikGhostscript | Odpowiednik IronPDF | 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 |
RasterizeToImageFiles("*.png", DPI: N) |
Wynik w formacie PNG |
-sOutputFile=X |
SaveAs("X") |
Nazwa pliku wyjściowego |
-r300 |
parametr DPI: 300 |
Rozwiązanie |
-dPDFSETTINGS=/ebook |
CompressImages(quality: 60) |
Średnia jakość |
-dFirstPage=N -dLastPage=M |
CopyPages(new[] {N-1, ..., M-1}) |
Ekstrakcja stron (indeksowane od 0) |
-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
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
Po (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
Ghostscript nie może bezpośrednio konwertować HTML do PDF — wymaga PostScript lub PDF input, więc przepływ HTML wymaga pośredniej konwersji (najczęściej przez wkhtmltopdf lub podobne). ChromePdfRendererIronPDF zapewnia bezpośrednie renderowanie HTML do PDF z obsługą CSS, JavaScript i nowoczesnych standardów webowych za pomocą wbudowanego silnika Chromium. Zobacz dokumentację HTML do PDF dla więcej opcji renderowania.
Przykład 2: PDF na obrazy
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
Po (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
PodejścieGhostscriptwymaga zlokalizowania zewnętrznego gsdll64.dll, utworzenia obiektu GhostscriptVersionInfo i iteracji stron z indeksowanymi co najmniej od 1 numerami stron. RasterizeToImageFilesIronPDF zapisuje każdą stronę w jednym wywołaniu za pomocą wzorca wyjściowego typu glob i wyraźnego parametru DPI:, bez zewnętrznej zależności natywnej. Zauważ, że gdy pracujesz z indeksami stron,Ghostscriptużywa stron indeksowanych od 1, podczas gdy IronPDF używa stron indeksowanych od 0 (standard .NET).
Przykład 3: Łączenie plików 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
Po (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
PodejścieGhostscriptwymaga pełnej inkantacji przełączników (-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite) i konkatenacji ścieżek plików w tablicę łańcuchów. Statyczna metoda MergeIronPDF przyjmuje typed IEnumerable<PdfDocument> i zwraca nowy 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 różnic w tej migracji jest indeksowanie stron. Przełączniki Ghostscript, takie jak -dFirstPage=N / -dLastPage=M są indeksowane od 1; CopyPagesIronPDF jest indeksowany od 0 (standard .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")
Obawy dotyczące licencji AGPL-3.0
Zarówno Ghostscript, jak i okładka Ghostscript.NET są podwójnie licencjonowane na AGPL-3.0 lub licencję komercyjną od Artifex. Klauzula network-copyleft AGPL-3.0 zazwyczaj wymaga zwolnienia odpowiedniego źródła większej pracy — w tym dla wdrożeń SaaS / dostępnych w sieci — chyba że posiadasz licencję komercyjną Artifex. Migracja zadań związanych z PDF do IronPDF usuwa ten obowiązek dla części, które się przemieszczają; jeśli utrzymujeszGhostscripttylko dla przyjmowania PostScript, licencja komercyjna Artifex obejmuje tę część. (This is a general summary, not legal advice — consult counsel for your specific deployment.)
Brak zewnętrznych plików binarnych
IronPDF jest dystrybuowany jako pakiet NuGet. Usuń te elementy po migracji:
- pliki
gsdll32.dlligsdll64.dll - InstalacjaGhostscriptz serwerów
- Konfiguracje zmiennych środowiskowych PATH
- odniesienia do
GhostscriptVersionInfow 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 w IronPDF należ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
Uruchamianie gswin64c.exe (lub P/Invoking gsdll64.dll) niesie ze sobą dodatkowe koszty związane z procesami i interakcją zewnętrzną przy każdej operacji.IronPDF działa wewnątrz procesu jako zarządzany kod .NET:
// 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)
Bezpieczeństwo wątków
IronPDF obsługuje równoczesne użycie ChromePdfRenderer i PdfDocument z wielu wątków. Zobacz dokumentację IronPDF w celu uzyskania wskazówek dotyczących równoległych wzorców renderowania.
Lista kontrolna migracji
Przed migracją
- Zrób inwentaryzację wszystkich użyćGhostscriptw kodzie
- Dokumentacja aktualnych przełączników wiersza poleceń
- Zidentyfikuj wszelkie operacje związane z PostScriptem (wymagają specjalnego traktowania)
- Przejrzyj status zgodności licencji AGPL-3.0
- 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 NuGet IronPDF:
dotnet add package IronPdf - Usuń zewnętrzne zależności binarne Ghostscript
- Usuń
GhostscriptVersionInfoi odniesienia do DLL - Konwertuj
GhostscriptProcessor.Process()do metod IronPDF - Konwertuj
GhostscriptRasterizernapdf.RasterizeToImageFiles() - 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ńGhostscriptz serwerów
- Usuń konfigurację PATH
- Usuń pliki
gsdll*.dllz wdrożeń - Zweryfikuj, czy aplikacja działa bez zainstalowanego Ghostscript
Po migracji
- Anuluj komercyjną licencję Artifex (jeśli była i nie jest już potrzebna)
- Aktualizacja dokumentacji
- Przeprowadź szkolenie zespołu z zakresu API IronPDF
- Monitoruj produkcję pod kątem wszelkich problemów

