Zum Fußzeileninhalt springen
VIDEOS

Wie man PDFs in C# komprimiert

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"

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" .
# 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
# 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";
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Schritt 2: Aktualisieren der Namensraum-Importe

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

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

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

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

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

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

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

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

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

Hinweis: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
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an