Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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:

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

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

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

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

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

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

  1. Wersja .NET:IronPDFobsługuje .NET Framework 4.6.2+ oraz .NET Core 2.0+ / .NET 5/6/7/8/9+
  2. Klucz licencyjny: Uzyskaj klucz licencyjnyIronPDFna stronie ironpdf.com
  3. 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" .
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 od Ghostscript GPL

Po migracji:

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

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

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

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

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

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

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

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

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

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.dll i gsdll64.dll
  • Instalacja Ghostscript GPL z serwerów
  • Konfiguracje zmiennych środowiskowych PATH
  • GhostscriptVersionInfo odniesienia 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 wIronPDFnależ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

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

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

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

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie