Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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ń:

  1. Ograniczenia 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 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.

  2. 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.Start przeciwko gswin*c.exe, albo przez okładkę P/Invoke Ghostscript.NET.

  3. 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.dll vs gsdll64.dll).

  4. 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.

  5. 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.

  6. 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.

  7. 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

  1. Wersja .NET:IronPDF wspiera .NET Framework 4.6.2+ oraz .NET Core / .NET 5+ (łącznie z .NET 6/7/8/9). Ghostscript.NET v1.3.x jest przeznaczony dla .NET Standard 2.0.
  2. Klucz licencyjny: Uzyskaj klucz licencyjny IronPDF na stronie ironpdf.com
  3. 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" .
SHELL

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
SHELL

Usuń zależności Ghostscript

Po migracji:

  • OdinstalujGhostscriptz serwerów
  • Usuń gsdll32.dll / gsdll64.dll z 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";
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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.dll i gsdll64.dll
  • InstalacjaGhostscriptz serwerów
  • Konfiguracje zmiennych środowiskowych PATH
  • odniesienia do GhostscriptVersionInfo 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:

  1. Przed przetworzeniem w IronPDF należy przekonwertować PostScript na PDF za pomocą innego narzędzia
  2. 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)
$vbLabelText   $csharpLabel

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ń GhostscriptVersionInfo i odniesienia do DLL
  • Konwertuj GhostscriptProcessor.Process() do metod IronPDF
  • Konwertuj GhostscriptRasterizer na pdf.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*.dll z 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

Zwróć uwagęGhostscript jest zarejestrowanym znakiem handlowym swojego właściciela. Ta strona nie jest powiązana z, akceptowana przez ani sponsorowana przez Artifex Software. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie