How to Convert RTF to PDF Using C#
GhostscriptからIronPDFへの移行により、.NET PDFワークフローをコマンドラインプロセスの生成と文字列ベースのスイッチ操作から、型付きのIntelliSense対応のネイティブ.NET APIに移行します。 このガイドは、AGPL-3.0のライセンス露出と外部のネイティブバイナリ依存を取り除くステップバイステップの移行パスを解説します。
用語についての注意:Ghostscript(Artifex Softwareによる)はAGPL-3.0または商業ライセンスのデュアルライセンスであり、単純なGPLではありません。 "GPL"タグは、長年にわたるオープンソースビルドのためのコミュニティの略語です; このガイドのすべては、GhostscriptのAGPL-3.0ビルドと、Ghostscript.NETラッパー(こちらもAGPL-3.0 / 商用デュアルライセンス)を指しています。 .NETからは、通常そのラッパーを介して消費され、これがネイティブのgsdll32.dll / gswin32c / Process.Start経由でシェルアウトします。
なぜGhostscriptからIronPDFへ移行するのか
Ghostscriptの課題
Ghostscriptは、数十年の歴史を持つArtifex Software製の古くからあるPostScript/PDFインタープリターです。 現代 for .NETアプリケーションへの使用にはいくつかの実際的な課題があります:
-
AGPL-3.0ライセンス制限: Ghostscript自体と
Ghostscript.NETラッパーの両方がArtifexからの商用ライセンスまたはAGPL-3.0のデュアルライセンスです。 AGPLのネットワークコピーレフト条項は通常、対応するソースのリリースを要求します(特にSaaS/ネットアクセス可能な展開において)—商業ライセンスを購入しない限り。 これは通常、クローズドソースまたはホスト型.NETアプリケーションに対してAGPLビルドを排除するルールです。 -
コマンドラインインターフェース: Ghostscriptは基本的にコマンドラインツールです。 C#から使用することの意味は、プロセスを生成し、文字列引数を渡し、出力を解析することを意味します。それは
Ghostscript.NETのP/Invokeラッパーを介して行われます。 -
外部バイナリ依存: Ghostscriptを個別にインストールし、PATH変数を管理し、環境全体でバージョンを整合させなければなりません。 32ビットと64ビット用に異なるネイティブDLLが必要です(
gsdll64.dll)。 -
ネイティブのHTML-to-PDFがない: GhostscriptはHTMLからPDFへの直接変換ができません。 まず他のツールを使用してHTMLをPostScriptに変換し、次にGhostscriptを実行してPostScriptをPDFに変換します—外部依存を伴う多段パイプラインです。
- 複雑なスイッチ構文: 操作は、
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=...のようなコマンドラインスイッチによって制御されます。 IntelliSenseもコンパイル時のチェックもありません。
6.エラー処理:エラーはテキスト文字列として stderr から渡されるため、構造化例外処理ではなく解析が必要です。
- プロセスマネジメントのオーバーヘッド: 各操作が別のプロセスを生成し、タイムアウトとリソースクリーンアップのために負担と複雑さを加えます。
GhostscriptとIronPDFの比較
| アスペクト | Ghostscript | IronPDF |
|---|---|---|
| ライセンス | AGPL-3.0(ネットワークコピーレフト)またはArtifexの商業ライセンス | 明確な用語によるコマーシャル |
| インテグレーション | コマンドラインプロセスの起動 | .NETネイティブライブラリ |
| APIデザイン | 文字列ベースのスイッチ | 型付き、インテリセンス対応API |
| エラー処理 | 標準エラーテキストの解析 | .NET の例外 |
| HTMLからPDFへ | 非対応(外部ツールが必要) | 内蔵Chromiumエンジン |
| 依存関係 | 外部バイナリのインストール | 自己完結型NuGetパッケージ |
| デプロイメント | PATHの設定、DLLのコピー | NuGetリファレンスを追加するだけです。 |
| スレッドの安全性 | プロセス分離のみ | スレッドセーフ設計 |
| 最新 for .NET | Ghostscript.NET v1.3.xは.NET Standard 2.0をターゲットにしています。 |
.NET Framework 4.6.2+および.NET 6/7/8/9 |
| 非同期サポート | プロセスベース | ネイティブasync/await |
マイグレーションの複雑さの評価
機能別の見積もり作業
| フィーチャー | 移行の複雑さ |
|---|---|
| PDFから画像へ | 低レベル |
| PDFのマージ | 低レベル |
| PDF圧縮 | 低レベル |
| PDF最適化 | 低レベル |
| 暗号化 | 中規模 |
| ページ抽出 | 低レベル |
| ポストスクリプトからPDFへ | 中・高 |
| カスタムスイッチ | 中・高 |
パラダイムシフト
このGhostscriptからの移行における基本的な変化は、コマンドラインプロセス実行から型付き.NET API呼び出しへの移行です:
Ghostscript: "これらの文字列スイッチを外部プロセスに渡します"
IronPDF: "これらのメソッドを.NETオブジェクトで呼び出します"
始める前に
前提条件
- .NETバージョン: IronPDFは.NET Framework 4.6.2+および.NET Core / .NET 5+(.NET 6/7/8/9を含む)をサポートしています。
Ghostscript.NETv1.3.xは.NET Standard 2.0をターゲットにしています。 2.ライセンスキー: IronPDFからIronPDFライセンスキーを取得します。 3.バックアップ:移行作業用のブランチを作成する
すべての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" .
# 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パッケージの変更
# 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
Ghostscriptの依存関係を削除する
移行後
- サーバーからGhostscriptをアンインストールします
- デプロイメントから
gsdll32.dll/gsdll64.dllを削除します。 - GhostscriptのPATH設定を削除します
- すべての
GhostscriptVersionInfo参照を削除します。
クイック スタート マイグレーション
ステップ 1: ライセンス構成の更新
前(Ghostscript):
GhostscriptのAGPL-3.0に基づく使用は、AGPL条項に基づいてソース開示を求めるか、Artifexからの商業ライセンスを必要とします。
翻訳後(IronPDF):。
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
ステップ 2: 名前空間インポートを更新する
// 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
完全な API リファレンス
コア クラス マッピング
| Ghostscript.NET | IronPDF | 翻訳内容 |
|---|---|---|
GhostscriptProcessor |
各種PdfDocumentメソッド |
PDF処理 |
GhostscriptRasterizer |
PdfDocument.RasterizeToImageFiles() |
PDFから画像へ |
GhostscriptVersionInfo |
該当なし(不要) | DLLの場所 |
GhostscriptStdIO |
該当なし(例外あり) | I/O処理 |
| プロセス+コマンドライン | ChromePdfRenderer |
HTML to PDF. |
コマンドライン スイッチ マッピング
| Ghostscriptスイッチ | IronPDF 同等物 | 翻訳内容 |
|---|---|---|
-dNOPAUSE |
該当なし(不要) | ページ間で一時停止しない |
-dBATCH |
該当なし(不要) | 処理終了後 |
-dSAFER |
該当なし(デフォルト) | 安全なファイルアクセス |
-sDEVICE=pdfwrite |
さまざまなPDFメソッド | 出力PDF |
-sDEVICE=png16m |
RasterizeToImageFiles("*.png", DPI: N) |
PNG出力 |
-sOutputFile=X |
SaveAs("X") |
出力ファイル名 |
-r300 |
DPI: 300パラメーター |
解像度 |
-dPDFSETTINGS=/ebook |
CompressImages(quality: 60) |
中程度の品質 |
-dFirstPage=N -dLastPage=M |
CopyPages(new[] {N-1, ..., M-1}) |
ページ抽出(0インデックス) |
-sOwnerPassword=X |
SecuritySettings.OwnerPassword |
オーナーパスワード |
-sUserPassword=X |
SecuritySettings.UserPassword |
ユーザーパスワード |
コード移行の例
例1: HTMLからPDFへの変換
前(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
翻訳後(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はHTMLをPDFに直接変換することができません—PostScriptまたはPDF入力を想定しているため、HTMLワークフローには中間的な変換が必要です(通常はwkhtmltopdfなどで)。 IronPDFのChromePdfRendererは、埋め込まれたChromiumエンジンを介して、CSSやJavaScript、モダンウェブ標準サポートによる直接HTMLからPDFへのレンダリングを提供します。HTMLからPDFのドキュメントで、より多くのレンダリングオプションを参照してください。
例2:PDFから画像へ
前(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
翻訳後(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
Ghostscriptのアプローチは、外部GhostscriptVersionInfoオブジェクトを作成し、1から始まるページ番号でページを反復することを必要とします。 IronPDFのDPI:パラメーターを使用して、単一の呼び出しですべてのページを書き込みます。 ページインデックスを扱うときに注意すべき点として、Ghostscriptは1インデックスのページを使用しますが、IronPDFは標準 for .NET規則である0インデックスのページを使用します。
例3: PDFファイルをマージする
前(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
翻訳後(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
Ghostscriptのアプローチは、フルスイッチ呪文(-sDEVICE=pdfwrite)を必要とし、ファイルパスを文字列配列に結合することを必要とします。 IronPDFの静的PdfDocumentを返します。 PDFのマージと分割については、こちらをご覧ください。
重要な移行に関する注意事項
ページインデックス変換
この移行における最も重要な違いの一つはページインデックスです。 Ghostscriptのスイッチ-dFirstPage=N / -dLastPage=Mは1から始まります; IronPDFのCopyPagesは0から始まります(標準 for .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ライセンスの懸念
GhostscriptとGhostscript.NETラッパーは、Artifexからの商用ライセンスまたはAGPL-3.0のデュアルライセンスです。 AGPL-3.0のネットワークコピーレフト条項は、SaaSやネットワークアクセス可能なデプロイメントを含め、対応するソースの公開を通常は求めます一部。 IronPDFへのPDFワークロードの移行は、その移行先の部分についてその義務を排除します。 GhostscriptをPostScriptの取り込みにのみ使用する場合は、Artifexの商業ライセンスがその部分をカバーします。 (This is a general summary, not legal advice — consult counsel for your specific deployment.)
外部バイナリは使用しないでください
IronPDFはNuGetパッケージとして配布されています。 移行後、これらを削除してください:
gsdll64.dllファイル- サーバーからのGhostscriptのインストール
- PATH環境変数の設定
- コード内の
GhostscriptVersionInfo参照
ポストスクリプトファイル
IronPDFはポストスクリプト(.ps)ファイルを直接扱いません。 ワークフローで PostScript 処理が必要な場合は、次のいずれかを行ってください: 1.IronPDFで処理する前に別のツールでPostScriptをPDFに変換する。 2.ソースコンテンツをHTMLに変換し、IronPDFのHTMLレンダリングを使用する。
パフォーマンスの考慮事項
プロセス生成なし
gsdll64.dllをP/Invokeする)ことは、操作ごとにプロセスとネイティブ相互運用のオーバーヘッドを伴います。 IronPDFは、マネージド.NETコードとしてインプロセスで実行されます:
// 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)
スレッドの安全性
IronPDFは、複数のスレッドからPdfDocumentの同時使用をサポートしています。 IronPDFのドキュメントで並列レンダリングパターンに関するガイドを参照してください。
移行チェックリスト
移行前
- コードベース内のすべてのGhostscriptの使用をインベントリする
- 現在使用されているコマンドラインスイッチを文書化する
- PostScript処理を識別する(特別な処理が必要)
- AGPL-3.0ライセンスのコンプライアンス状態を確認する
- IronPDFライセンスキーを取得する
- バージョン管理に移行ブランチを作成する
コードの移行
- Ghostscript.NET NuGetパッケージ:
dotnet remove package Ghostscript.NETを削除します。 -IronPDFNuGetパッケージ:dotnet add package IronPdfをインストールします。 - 外部のGhostscriptバイナリ依存を削除する
GhostscriptVersionInfoとDLL参照を削除します。GhostscriptProcessor.Process()をIronPDFメソッドに変換します。pdf.RasterizeToImageFiles()に変換します。- コマンドラインスイッチをAPI呼び出しに置き換える
- エラー処理をstderr解析から例外に更新
- 1から始まるページ番号を0から始まるページ番号に変換する
テスティング
- PDFから画像への変換をテストする
- PDF結合のテスト
- テストページの抽出
- 圧縮品質のテスト
- パスワード保護をテストする
- 出力品質が期待通りであることを確認する
- パフォーマンスベンチマークのクリティカルパス
展開
- サーバーからGhostscriptを削除する
- PATH設定を削除する
- デプロイメントから
gsdll*.dllファイルを削除します。 - Ghostscriptをインストールせずにアプリケーションが動作することを確認する
移行後
- Artifex商業ライセンスをキャンセルする(以前に取得していた場合で、もはや必要ない場合)
- ドキュメントの更新 -IronPDFAPI についてチームをトレーニングする
- 問題がないか生産状況を監視

