IRONSOFTWAREHOME
VIDEOS

Wie man PDFs in C# komprimiert

Curtis Chau
Curtis Chau
Updated: 19. Juli 2026

Das Migrieren vonGhostscriptzu IronPDF verlagert Ihren .NET PDF-Workflow vom Starten von Befehlszeilenprozessen und der Manipulation von string-basierten Schaltern zu einer typisierten, IntelliSense-fähigen nativen .NET API. Dieser Leitfaden führt Sie durch einen schrittweisen Migrationspfad, der die AGPL-3.0-Lizenzaussetzung und die Abhängigkeit von externen nativen Binärdateien entfernt.

Ein Hinweis zur Terminologie:Ghostscript(von Artifex Software) ist doppelt lizenziert unter AGPL-3.0 oder einer kommerziellen Lizenz, nicht unter einfacher GPL. Das "GPL"-Tag ist ein langjähriges Gemeinschafts-Kürzel für den Open-Source-Build; Alles in diesem Leitfaden bezieht sich auf den AGPL-3.0-Build vonGhostscriptund den Ghostscript.NET Wrapper (welcher ebenfalls AGPL-3.0 / kommerziell-dual ist). Von .NET aus wirdGhostscripttypischerweise über diesen Wrapper konsumiert, der die nativen gsdll32.dll / gsdll64.dll P/Invokes, oder indem man über Process.Start zu gswin32c / gswin64c schaltet.

Warum vonGhostscriptzu IronPDF migrieren

Die Herausforderungen von Ghostscript

Ghostscript ist ein langjähriger PostScript/PDF-Interpreter von Artifex Software mit jahrzehntelanger Geschichte. Dessen Anwendung in modernen .NET-Anwendungen stellt mehrere praktische Herausforderungen dar:

  1. AGPL-3.0 Lizenzbeschränkungen: SowohlGhostscriptselbst als auch der Ghostscript.NET Wrapper sind doppelt lizenziert unter AGPL-3.0 oder einer kommerziellen Lizenz von Artifex. AGPL's Netzwerk-Copyleft-Klausel erfordert in der Regel, dass Sie den entsprechenden Quellcode des größeren Werks freigeben — auch für SaaS- / Netzwerkanwendungen — es sei denn, Sie erwerben eine kommerzielle Lizenz. Dies schließt oft den AGPL-Build für geschlossene oder gehostete .NET-Anwendungen aus.

  2. **Befehlszeilenschnittstelle:**Ghostscriptist grundsätzlich ein Befehlszeilenwerkzeug. Die Verwendung aus C# bedeutet, Prozesse zu starten, String-Argumente zu übergeben und Ausgaben zu parsen — entweder über Process.Start gegen gswin*c.exe oder über den Ghostscript.NET P/Invoke-Wrapper.

  3. Externe Binär-Abhängigkeit: Sie müssenGhostscriptseparat installieren, Pfadvariablen verwalten und Versionen über Umgebungen synchron halten. Verschiedene native DLLs sind erforderlich für 32-Bit gegenüber 64-Bit (gsdll32.dll gegenüber gsdll64.dll).

  4. **Kein natives HTML-zu-PDF:**Ghostscriptkann HTML nicht direkt in PDF konvertieren. Sie müssen zuerst HTML mit einem anderen Werkzeug in PostScript konvertieren und dannGhostscriptverwenden, um PostScript in PDF zu konvertieren — eine mehrstufige Pipeline mit externen Abhängigkeiten.

  5. Komplexe Schalter-Syntax: Operationen werden über Kommandozeilen-Schalter wie -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=... gesteuert. Kein IntelliSense, keine Kompilierzeitprüfungen.

  6. Fehlerbehandlung: Fehler werden über stderr als Textzeichenfolgen ausgegeben, was ein Parsen anstelle einer strukturierten Ausnahmebehandlung erfordert.

  7. Prozessverwaltungs-Overhead: Jeder Vorgang startet einen separaten Prozess und erhöht den Overhead sowie die Komplexität für Timeouts und Ressourcenbereinigung.

Vergleich vonGhostscriptund IronPDF

| Aspekt|Ghostscript|IronPDF| |--------|-------------|---------| | Lizenz|AGPL-3.0 (Netzwerk-Copyleft) oder kommerziell von Artifex| Kommerziell mit klaren Begriffen| | Integration| Spawnen von Prozessen in der Befehlszeile| Native .NET-Bibliothek| | API-Entwurf| String-basierte Schalter| Typisierte, IntelliSense-fähige API| | Fehlerbehandlung| Parsen von stderr-Text| .NET-Ausnahmen| | HTML-zu-PDF| Nicht unterstützt (externe Tools erforderlich)| Eingebaute Chromium-Engine| | Abhängigkeiten| Externe Binärinstallation| Eigenständiges NuGet-Paket| | Bereitstellung| PATH konfigurieren, DLLs kopieren| Einfach NuGet-Referenz hinzufügen| | Thread-Sicherheit| Nur Prozessisolierung| Thread-sicher durch Design| | Modernes .NET| Ghostscript.NET v1.3.x zielt auf .NET Standard 2.0 | .NET Framework 4.6.2+ and .NET 6/7/8/9 | | Async-Unterstützung| Prozessbasiert| Natives async/await|


Migrationskomplexitätsbewertung

Geschätzter Aufwand nach Merkmalen

| Feature | Komplexität der Migration| |---------|---------------------| | PDF in Bilder| Niedrig| | PDFs zusammenführen| Niedrig| | PDF komprimieren| Niedrig| | PDF-Optimierung| Niedrig| | Verschlüsselung| Medium| | Seite extrahieren| Niedrig| | PostScript zu PDF| Mittel-Hoch| | Benutzerdefinierte Schalter| Mittel-Hoch|

Paradigmen-Verschiebung

Die grundlegende Verschiebung in dieser Ghostscript-Migration ist vom Befehlszeilenprozessausführung zu typisiertem .NET-API-Aufruf:

Ghostscript: "Übergeben Sie diese string-Schalter an einen externen Prozess"
IronPDF: "Rufen Sie diese Methoden auf .NET-Objekten auf"
Text

Bevor Sie beginnen

Voraussetzungen

  1. **.NET Version:**IronPDF supports .NET Framework 4.6.2+ and .NET Core / .NET 5+ (including .NET 6/7/8/9). Ghostscript.NET v1.3.x zielt auf .NET Standard 2.0.
  2. Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel erhalten Sie unter IronPDF.
  3. Datensicherung: Erstellen Sie einen Branch für die Migrationsarbeiten.

Identifizieren aller Ghostscript-Verwendungen

# 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

NuGet-Paketänderungen

# Remove Ghostscript.NET
dotnet remove package Ghostscript.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Entfernen von Ghostscript-Abhängigkeiten

Nach der Migration: -Ghostscriptvon Servern deinstallieren

  • Entfernen Sie gsdll32.dll / gsdll64.dll von den Bereitstellungen
  • Entfernen Sie die Pfadkonfiguration für Ghostscript
  • Entfernen Sie alle GhostscriptVersionInfo Referenzen

Schnellstart Migration

Schritt 1: Lizenzkonfiguration aktualisieren

Before (Ghostscript):

Ghostscript unter AGPL-3.0 erfordert entweder eine Quelloffenlegung unter AGPL-Bedingungen oder eine kommerzielle Lizenz von Artifex.

Nach (IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Schritt 2: Aktualisieren der Namensraum-Importe

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

// After (IronPDF)
using IronPdf;

Komplette API-Referenz

Kernklassen-Zuordnung

| Ghostscript.NET |IronPDF| Beschreibung| |-----------------|---------|-------------| | GhostscriptProcessor |Verschiedene PdfDocument Methoden| PDF-Verarbeitung| | GhostscriptRasterizer | PdfDocument.RasterizeToImageFiles() | PDF in Bilder| | GhostscriptVersionInfo | N/A (nicht erforderlich)| DLL-Speicherort| | GhostscriptStdIO | N/A (Ausnahmen verwenden)| E/A-Behandlung| | Prozess + Befehlszeile| ChromePdfRenderer | HTML zu PDF|

Zuordnung von Befehlszeilenschaltern

|Ghostscript-Schalter| IronPDF-Äquivalent| Beschreibung| |-------------------|-------------------|-------------| | -dNOPAUSE | N/A (nicht erforderlich)| Keine Pausen zwischen den Seiten| | -dBATCH | N/A (nicht erforderlich)| Beenden nach der Bearbeitung| | -dSAFER | N/A (Standard)| Sicherer Dateizugriff| | -sDEVICE=pdfwrite | Verschiedene PDF-Methoden| PDF-Ausgabe| | -sDEVICE=png16m | RasterizeToImageFiles("*.png", DPI: N) | PNG-Ausgabe| | -sOutputFile=X | SaveAs("X") | Dateiname der Ausgabe| | -r300 |DPI: 300 Parameter| Auflösung| | -dPDFSETTINGS=/ebook | CompressImages(quality: 60) | Mittlere Qualität| | -dFirstPage=N -dLastPage=M | CopyPages(new[] {N-1, ..., M-1}) |Seitenextraktion (0-indiziert)| | -sOwnerPassword=X | SecuritySettings.OwnerPassword | Passwort des Eigentümers| | -sUserPassword=X | SecuritySettings.UserPassword | Benutzer-Passwort|


Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in 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#

Nach (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 kann HTML nicht direkt in PDF konvertieren — es erwartet PostScript- oder PDF-Eingabe, sodass ein HTML-Workflow eine Zwischenkonvertierung erfordert (in der Regel über wkhtmltopdf oder ähnliches). IronPDF's ChromePdfRenderer bietet direkte HTML-zu-PDF-Umwandlung mit CSS, JavaScript und Unterstützung moderner Web-Standards über eine eingebettete Chromium-Engine. Siehe die HTML zu PDF Dokumentation für weitere Render-Optionen.

Beispiel 2: PDF in Bilder

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

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

Der Ghostscript-Ansatz erfordert das Lokalisieren des externen gsdll64.dll, das Erstellen eines GhostscriptVersionInfo Objekts und das Iterieren über Seiten mit 1-indizierten Seitennummern. IronPDF's RasterizeToImageFiles schreibt jede Seite in einem einzigen Aufruf mit einem globalen Ausgangsmuster und einem expliziten DPI: Parameter, ohne externe native Abhängigkeit. Beachten Sie, dass, wenn Sie mit Seitenindizes arbeiten,Ghostscript1-indexierte Seiten verwendet, während IronPDF 0-indexierte Seiten verwendet (Standard .NET-Konvention).

Beispiel 3: PDF-Dateien zusammenführen

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

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

Der Ghostscript-Ansatz erfordert die volle Schalterbeschwörung (-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite) und das Verketteln von Dateipfaden in ein String-Array. IronPDF's statische Merge Methode nimmt einen typisierten IEnumerable<PdfDocument> und gibt einen neuen PdfDocument zurück. Erfahren Sie mehr über das Zusammenführen und Aufteilen von PDFs.


Kritische Hinweise zur Migration

Konvertierung der Seitenindizierung

Eine der wichtigsten Unterschiede in dieser Migration ist das Seitenindexieren. Ghostscript-Schalter wie -dFirstPage=N / -dLastPage=M sind 1-indiziert; IronPDF's CopyPages is 0-indexed (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");

AGPL-3.0-Lizenzbedenken

SowohlGhostscriptals auch der Ghostscript.NET Wrapper sind doppelt lizenziert unter AGPL-3.0 oder einer kommerziellen Lizenz von Artifex. AGPL-3.0's Netzwerk-Copyleft-Klausel erfordert typischerweise die Veröffentlichung des entsprechenden Quellcodes des größeren Werks — einschließlich SaaS- / netzwerkzugänglicher Bereitstellungen — es sei denn, Sie besitzen eine kommerzielle Artifex-Lizenz. Das Migrieren der PDF-Arbeitslasten zu IronPDF entfernt diese Verpflichtung für die Teile, die verschoben werden; wenn SieGhostscriptnur für das PostScript-Ingest behalten, deckt eine kommerzielle Artifex-Lizenz dieses Stück ab. (This is a general summary, not legal advice — consult counsel for your specific deployment.)

Keine externen Binärdateien

IronPDF wird als ein NuGet-Paket verteilt. Entfernen Sie diese nach der Migration:

  • gsdll32.dll und gsdll64.dll Dateien -Ghostscriptvon Servern installieren
  • Konfigurationen der Umgebungsvariablen PATH
  • GhostscriptVersionInfo Referenzen im Code

PostScript-Dateien

IronPDF kann PostScript-Dateien (.ps) nicht direkt verarbeiten. Wenn Ihr Arbeitsablauf PostScript-Verarbeitung erfordert, sollten Sie entweder:

  1. Konvertierung von PostScript in PDF mit einem anderen Tool vor der IronPDF-Verarbeitung
  2. Konvertieren Sie den Quellinhalt in HTML und verwenden Sie das HTML-Rendering von IronPDF

Erwägungen zur Leistung

Kein Prozess-Spawning

Das Shelling out zu gswin64c.exe (oder P/Invoking gsdll64.dll) trägt Prozess- und native Interop-Overhead pro Vorgang.IronPDF läuft im Prozess als verwalteter .NET-Code:

// Ghostscript: process or P/Invoke overhead per call
processor.Process(switches.ToArray());

// IronPDF: in-process method call
var merged = PdfDocument.Merge(pdfs);

Thread-Sicherheit

IronPDF unterstützt die gleichzeitige Verwendung von ChromePdfRenderer und PdfDocument aus mehreren Threads. Siehe die IronPDF-Dokumentation für Anleitungen zu parallelen Renderierungs Mustern.


Migrations-Checkliste

Vor der Migration

  • Inventarisieren Sie alle Ghostscript-Verwendung in der Codebasis
  • Dokumentieren Sie die aktuell verwendeten Befehlszeilenoptionen.
  • Jegliche PostScript-Verarbeitung identifizieren (erfordert spezielle Behandlung)
  • Überprüfen Sie den Status der AGPL-3.0-Lizenzkonformität -IronPDF-Lizenzschlüssel erhalten
  • Migrationszweig in der Versionskontrolle erstellen

Code-Migration

  • Entfernen Sie das Ghostscript.NET NuGet-Paket: dotnet remove package Ghostscript.NET
  • Installieren Sie das IronPDF NuGet-Paket: dotnet add package IronPdf
  • Entfernen Sie externe Ghostscript-binäre Abhängigkeiten
  • Entfernen Sie GhostscriptVersionInfo und DLL-Referenzen
  • Konvertieren Sie GhostscriptProcessor.Process() zu IronPDF-Methoden
  • Konvertieren Sie GhostscriptRasterizer zu pdf.RasterizeToImageFiles()
  • Ersetzen Sie Befehlszeilenoptionen durch API-Aufrufe
  • Aktualisierung der Fehlerbehandlung von stderr-Parsing auf Ausnahmen
  • Konvertierung von 1-indizierten Seitenzahlen in 0-indizierte Seitenzahlen

Testen

  • Test der PDF-zu-Bild-Konvertierung
  • PDF-Zusammenführung testen
  • Extraktion der Testseite
  • Kompressionsqualität prüfen
  • Passwortschutz testen
  • Überprüfen, ob die Ausgabequalität den Erwartungen entspricht
  • Leistungsbenchmark kritische Pfade

Bereitstellung

  • Entfernen SieGhostscriptvon Servern
  • Entfernen Sie die PATH-Konfiguration
  • Entfernen Sie gsdll*.dll Dateien aus den Bereitstellungen
  • Überprüfen Sie, dass die Anwendung ohne installiertesGhostscriptfunktioniert

Nach der Migration

  • Kündigen Sie die kommerzielle Artifex-Lizenz (falls zuvor gehalten und nicht mehr benötigt)
  • Dokumentation aktualisieren
  • Schulung des Teams zur IronPDF API
  • Die Produktion auf etwaige Probleme überwachen

Please note: Ghostscript ist eine eingetragene Marke ihres jeweiligen Eigentümers. Diese Website ist nicht verbunden mit, befürwortet oder gesponsert von Artifex Software. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.
Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Related Articles

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Buchen Sie Ihre kostenlose Live-Demo
Booking Badge related to IronPDF Product Demo

Von Millionen von Ingenieur*innen weltweit vertraut

Kundenlogos von Iron Software
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.