IRONSOFTWAREHOME
FILMY

Jak kompresować pliki PDF w języku C#

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

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

AspektGhostscriptIronPDF
LicencjaAGPL-3.0 (network-copyleft) lub komercyjna ArtifexReklama z jasnymi warunkami
IntegracjaTworzenie procesów z wiersza poleceńNatywna biblioteka .NET
Projektowanie APIPrzełączniki oparte na ciągach znakówAPI z obsługą IntelliSense
Obsługa błędówAnaliza tekstu stderrWyjątki .NET
HTML do PDFNieobsługiwane (wymagane narzędzia zewnętrzne)Wbudowany silnik Chromium
ZależnościZewnętrzna instalacja plików binarnychSamodzielny pakiet NuGet
WdrożenieSkonfiguruj ścieżkę PATH, skopiuj pliki DLLWystarczy dodać odwołanie NuGet
Bezpieczeństwo wątkówTylko izolacja procesówZabezpieczone przed współbieżnością już w fazie projektowania
Nowoczesny .NETGhostscript.NET v1.3.x jest przeznaczony dla .NET Standard 2.0.NET Framework 4.6.2+ and .NET 6/7/8/9
Obsługa asynchronicznaOparte na procesachNatywne async/await

Ocena złożoności migracji

Szacowany nakład pracy według funkcji

FunkcjaZłożoność migracji
PDF na obrazyNiski
Łączenie plików PDFNiski
Kompresuj plik PDFNiski
Optymalizacja plików PDFNiski
SzyfrowanieMedium
Wyodrębnianie stronNiski
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"
Text

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

Zmiany w pakiecie NuGet

# 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";

Krok 2: Zaktualizuj importy przestrzeni nazw

// Before (Ghostscript)
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using Ghostscript.NET.Rasterizer;

// After (IronPDF)
using IronPdf;

Kompletna dokumentacija API

Mapowanie klas podstawowych

Ghostscript.NETIronPDFOpis
GhostscriptProcessorRóżne metody PdfDocumentPrzetwarzanie plików PDF
GhostscriptRasterizerPdfDocument.RasterizeToImageFiles()PDF na obrazy
GhostscriptVersionInfoN/A (nie dotyczy)Lokalizacja pliku DLL
GhostscriptStdIONie dotyczy (użyj wyjątków)Obsługa wejścia/wyjścia
Proces + wiersz poleceńChromePdfRendererHTML do PDF

Mapowanie przełączników wiersza poleceń

PrzełącznikGhostscriptOdpowiednik IronPDFOpis
-dNOPAUSEN/A (nie dotyczy)Nie zatrzymuj się między stronami
-dBATCHN/A (nie dotyczy)Wyjdź po przetworzeniu
-dSAFERN/A (domyślnie)Bezpieczny dostęp do plików
-sDEVICE=pdfwriteRóżne metody obsługi plików PDFWynik w formacie PDF
-sDEVICE=png16mRasterizeToImageFiles("*.png", DPI: N)Wynik w formacie PNG
-sOutputFile=XSaveAs("X")Nazwa pliku wyjściowego
-r300parametr DPI: 300Rozwiązanie
-dPDFSETTINGS=/ebookCompressImages(quality: 60)Średnia jakość
-dFirstPage=N -dLastPage=MCopyPages(new[] {N-1, ..., M-1})Ekstrakcja stron (indeksowane od 0)
-sOwnerPassword=XSecuritySettings.OwnerPasswordHasło właściciela
-sUserPassword=XSecuritySettings.UserPasswordHasł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());
    }
}
C#

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");
    }
}

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();
            }
        }
    }
}

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);
    }
}

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());
    }
}

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");
    }
}

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");

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);

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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta