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:
-
AGPL-3.0 Lizenzbeschränkungen: SowohlGhostscriptselbst als auch der
Ghostscript.NETWrapper 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. -
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.Startgegengswin*c.exeoder über denGhostscript.NETP/Invoke-Wrapper. -
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.dllgegenübergsdll64.dll). -
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.
-
Komplexe Schalter-Syntax: Operationen werden über Kommandozeilen-Schalter wie
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=...gesteuert. Kein IntelliSense, keine Kompilierzeitprüfungen. -
Fehlerbehandlung: Fehler werden über stderr als Textzeichenfolgen ausgegeben, was ein Parsen anstelle einer strukturierten Ausnahmebehandlung erfordert.
- 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
- .NET Version:IronPDF supports .NET Framework 4.6.2+ and .NET Core / .NET 5+ (including .NET 6/7/8/9).
Ghostscript.NETv1.3.x zielt auf .NET Standard 2.0. - Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel erhalten Sie unter IronPDF.
- 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" .
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
Entfernen von Ghostscript-Abhängigkeiten
Nach der Migration: -Ghostscriptvon Servern deinstallieren
- Entfernen Sie
gsdll32.dll/gsdll64.dllvon den Bereitstellungen - Entfernen Sie die Pfadkonfiguration für Ghostscript
- Entfernen Sie alle
GhostscriptVersionInfoReferenzen
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";
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
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
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
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
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
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
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
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")
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.dllundgsdll64.dllDateien -Ghostscriptvon Servern installieren- Konfigurationen der Umgebungsvariablen PATH
GhostscriptVersionInfoReferenzen im Code
PostScript-Dateien
IronPDF kann PostScript-Dateien (.ps) nicht direkt verarbeiten. Wenn Ihr Arbeitsablauf PostScript-Verarbeitung erfordert, sollten Sie entweder:
- Konvertierung von PostScript in PDF mit einem anderen Tool vor der IronPDF-Verarbeitung
- 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)
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
GhostscriptVersionInfound DLL-Referenzen - Konvertieren Sie
GhostscriptProcessor.Process()zu IronPDF-Methoden - Konvertieren Sie
GhostscriptRasterizerzupdf.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*.dllDateien 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

