フッターコンテンツにスキップ
移行ガイド

C#でGhostscript GPLからIronPDFに移行する方法

GhostscriptのGPLからIronPDFへの移行:完全なC#移行ガイド

Ghostscript GPLからIronPDFに移行することで、.NET PDFワークフローをコマンドラインでのプロセス生成や文字列ベースのスイッチ操作から、タイプセーフでインテリセンス対応の.NETネイティブAPIに変換します。 このガイドは、プロの.NET開発者のために、AGPLライセンスの懸念と外部バイナリ依存を排除する包括的なステップバイステップの移行パスを提供します。

なぜGhostscript GPLからIronPDFに移行するのか

GhostscriptのGPLの課題

Ghostscript GPL は、数十年の歴史を持つ由緒ある PostScript/PDF インタプリタですが、最新の .NET アプリケーションで使用するには大きな課題があります:

1.AGPLライセンスの制限:Ghostscript GPLのAGPLライセンスは、Artifexから高価な商用ライセンスを購入しない限り、それを使用するソフトウェアを配布する場合、ソースコードを公開することを要求します。 この"バイラル"ライセンスモデルは、プロプライエタリなアプリケーションに重大な法的リスクをもたらします。

2.コマンドラインインタフェース:Ghostscript GPL は基本的にコマンドラインツールです。 C#からこのツールを使用するには、プロセスを起動し、文字列引数を渡し、出力を解析する必要があります。

3.外部バイナリ依存: Ghostscript GPLを個別にインストールし、PATH変数を管理し、デプロイ環境間でバージョンの互換性を確保する必要があります。 32ビットと64ビットでは異なるDLLが必要です(gsdll32.dllgsdll64.dll)。

4.ネイティブ HTML-to-PDF はありません:Ghostscript GPL は HTML を直接 PDF に変換することはできません。 まず別のツールを使ってHTMLをPostScriptに変換し、次にGhostscript GPLを使ってPostScriptをPDFに変換する必要があります。

5.複雑なスイッチ構文:操作は -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=... のような暗号化されたコマンドラインスイッチで制御されます。 インテリセンス、タイプセーフティがなく、ミスタイプしやすい。

6.エラー処理: エラーはテキスト文字列として標準エラー出力から送られてきます。

7.プロセス管理のオーバーヘッド: 各操作は個別のプロセスを生成し、エラー処理、タイムアウト、リソースのクリーンアップのためのオーバーヘッドと複雑さを追加します。

ゴーストスクリプトGPLとIronPDFの比較

アスペクトGhostscript GPLIronPDF
ライセンスAGPL(ウィルス性)または高価な商用明確な用語によるコマーシャル
インテグレーションコマンドラインプロセスの起動.NETネイティブライブラリ
APIデザイン文字列ベースのスイッチ型付き、インテリセンス対応API
エラー処理標準エラーテキストの解析.NET の例外
HTMLからPDFへ非対応(外部ツールが必要)内蔵Chromiumエンジン
依存関係外部バイナリのインストール自己完結型NuGetパッケージ
デプロイメントPATHの設定、DLLのコピーNuGetリファレンスを追加するだけです。
スレッドの安全性プロセス分離のみスレッドセーフ設計
最新の.NET限定サポート.NET 6/7/8/9/10をフルサポート
非同期サポートプロセスベースネイティブasync/await

2025年、2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFは最新の.NETパターンとネイティブに統合する将来性のある基盤を提供します。


マイグレーションの複雑さの評価

機能別の見積もり作業

フィーチャー移行の複雑さノート
PDFから画像へ低レベル直接APIマッピング
PDFのマージ低レベルIronPDFでよりシンプルに
PDF圧縮低レベル組み込みオプション
PDF最適化低レベルさまざまなアプローチ
暗号化中規模さまざまなAPI
ページ抽出低レベル0インデックス vs 1インデックス
ポストスクリプトからPDFへ中・高まずPSからPDFに変換
カスタムスイッチ中・高同等の機能の研究

パラダイムシフト

このGhostscript GPL移行における基本的なシフトは、コマンドラインでのプロセス実行から型付き.NET API呼び出しへの移行です:

Ghostscript GPL:  "これらの文字列スイッチを外部プロセスに渡す"
IronPDF:          ".NET オブジェクトでこれらのメソッドを呼び出す

始める前に

前提条件

1..NETバージョン: IronPDFは.NET Framework 4.6.2+と.NET Core 2.0+ / .NET 5/6/7/8/9+をサポートしています。 2.ライセンスキーironpdf.comからIronPDFライセンスキーを取得してください。 3.バックアップ:移行作業用のブランチを作成する

すべてのGhostscript GPLの使用法を特定する。

# 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パッケージの変更

# 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

GhostscriptのGPL依存関係を削除する

移行後

  • サーバーからGhostscript GPLをアンインストールする
  • デプロイメントから gsdll32.dll / gsdll64.dll を削除する
  • Ghostscript GPLのPATH設定を削除する
  • GhostscriptVersionInfo<//code> の参照をすべて削除してください。

クイック スタート マイグレーション

ステップ 1: ライセンス構成の更新

ビフォア (Ghostscript GPL):

Ghostscript GPL under AGPLは、ソースコードの開示か、Artifexからの高価な商用ライセンスが必要です。

翻訳後(IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ステップ 2: 名前空間インポートを更新する

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

// After (IronPDF)
using IronPdf;
// Before (Ghostscript GPL)
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using Ghostscript.NET.Rasterizer;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

完全な API リファレンス

コア クラス マッピング

Ghostscript.NETIronPDF翻訳内容
GhostscriptProcessor(ゴーストスクリプトプロセッサーさまざまな PdfDocument<//code> メソッドPDF処理
GhostscriptRasterizer(ゴーストスクリプトラスタライザーPdfDocument.ToBitmap() / RasterizeToImageFiles().PDFから画像へ
GhostscriptVersionInfo(ゴーストスクリプトバージョンインフォ該当なし(不要)DLLの場所
<コード>GhostscriptStdIO</コード該当なし(例外あり)I/O処理
プロセス+コマンドライン<コード>ChromePdfRenderer</コードHTML to PDF.

コマンドライン スイッチ マッピング

Ghostscript GPL スイッチIronPDF 同等物翻訳内容
-dNOPAUSE該当なし(不要)ページ間で一時停止しない
-dBATCH該当なし(不要)処理終了後
-dSAFER該当なし(デフォルト)安全なファイルアクセス
-sDEVICE=pdfwriteさまざまなPDFメソッド出力PDF
-sDEVICE=png16mToBitmap()またはRasterizeToImageFiles()PNG出力
-sOutputFile=XSaveAs("X")のようにします。出力ファイル名
-r300メソッド内のDPIパラメータ解像度
-dPDFSETTINGS=/ebook<コード>CompressImages(quality: 75)中程度の品質
-sOwnerPassword=XSecuritySettings.OwnerPasswordオーナーパスワード
-sUserPassword=X<コード>SecuritySettings.UserPassword</コードユーザーパスワード

コード移行の例

例1: HTMLからPDFへの変換

ビフォア (Ghostscript GPL):

// NuGet: Install-Package Ghostscript.NET
using Ghostscript.NET;
using Ghostscript.NET.Processor;
using System.IO;
using System.Text;

class GhostscriptExample
{
    static void 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

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        string psFile = "temp.ps";
        string outputPdf = "output.pdf";

        // This is a workaround - Ghostscript primarily 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()
    {
        // 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

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        string psFile = "temp.ps";
        string outputPdf = "output.pdf";

        // This is a workaround - Ghostscript primarily 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());
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class IronPdfExample
{
    static void Main()
    {
        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()
    {
        var renderer = new ChromePdfRenderer();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ghostscript GPLは、HTMLを直接PDFに変換することはできません。 IronPdfのChromePdfRendererはCSS3、JavaScript、最新のWeb標準を完全にサポートし、HTMLからPDFへの直接変換を提供します。 レンダリングオプションについては、HTML to PDF documentationを参照してください。

例2:PDFから画像へ

ビフォア (Ghostscript GPL):

// 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();
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfExample
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        var images = pdf.ToBitmap();

        for (int i = 0; i < images.Length; i++)
        {
            images[i].Save($"output_page{i + 1}.png");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfExample
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        var images = pdf.ToBitmap();

        for (int i = 0; i < images.Length; i++)
        {
            images[i].Save($"output_page{i + 1}.png");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ghostscript GPL のアプローチでは、外部の gsdll64.dll<//code> を見つけ、<code>GhostscriptVersionInfo オブジェクトを作成し、1 インデックスのページ番号を使用する必要があります。 IronPdfのToBitmap()メソッドは外部依存のないクリーンで単一行のアプローチを提供します。 ページのインデックスの違いに注意してください:Ghostscript GPLは1-indexedページを使用し、IronPDFは0-indexed (標準的な.NETの慣習)を使用します。

例3: PDFファイルをマージする

ビフォア (Ghostscript GPL):

// 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());
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class IronPdfExample
{
    static void Main()
    {
        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()
    {
        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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ghostscript GPLのアプローチでは、スイッチ構文(-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite)を記憶し、ファイルパスを文字列配列に連結する必要があります。 IronPDFの静的なMergeメソッドはタイプセーフで、適切なPdfDocumentオブジェクトとのインテリセンスによるマージを提供します。 PDFのマージと分割については、こちらをご覧ください。


重要な移行に関する注意事項

ページインデックス変換

このGhostscript GPL移行における最も重要な変更点の一つは、ページインデックスの違いです:

// Ghostscript GPL: 1-indexed pages
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
    Image img = rasterizer.GetPage(300, pageNumber);
}

// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < images.Length; i++)
{
    images[i].Save($"output_page{i + 1}.png");
}
// Ghostscript GPL: 1-indexed pages
for (int pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
{
    Image img = rasterizer.GetPage(300, pageNumber);
}

// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < images.Length; i++)
{
    images[i].Save($"output_page{i + 1}.png");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

AGPLライセンスに関する懸念を払拭

Ghostscript GPLのAGPLライセンスには、アプリケーションを配布する際にソースコードの公開を要求する"ウィルス性"の特性があります。 IronPDFの商用ライセンスにはそのような条件はありません。

外部バイナリは使用しないでください。

IronPDFは完全に自己完結しています。 移行後、これらを削除してください:

  • gsdll32.dllおよび gsdll64.dllファイル
  • サーバーからのGhostscript GPLインストール
  • PATH環境変数の設定
  • GhostscriptVersionInfoをコードで参照する

ポストスクリプトファイル

IronPDFはポストスクリプト(.ps)ファイルを直接扱いません。 ワークフローで PostScript 処理が必要な場合は、次のいずれかを行ってください: 1.IronPDFで処理する前に別のツールでPostScriptをPDFに変換する。 2.ソースコンテンツをHTMLに変換し、IronPDFのHTMLレンダリングを使用する。


パフォーマンスの考慮事項

プロセス生成なし

Ghostscript GPL の操作は、関連するオーバーヘッドを伴う外部プロセスを生成します。 IronPDFは.NETプロセス内で動作します:

// Ghostscript GPL: Process spawning overhead
processor.Process(switches.ToArray());  // Creates new OS process

// IronPDF: In-process execution
var merged = PdfDocument.Merge(pdfs);  // Native .NET method call
// Ghostscript GPL: Process spawning overhead
processor.Process(switches.ToArray());  // Creates new OS process

// IronPDF: In-process execution
var merged = PdfDocument.Merge(pdfs);  // Native .NET method call
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

スレッドの安全性

IronPDFは設計上スレッドセーフです。 複数のスレッドでChromePdfRendererPdfDocumentを同時に使用することができます。


移行チェックリスト

移行前

  • [ ] コードベース内のすべてのGhostscript GPL使用の目録
  • [現在使用されているコマンドラインスイッチを文書化する
  • [ポストスクリプト処理(特別な処理が必要)を特定してください。)
  • [AGPL ライセンスの遵守状況を確認する
  • [IronPDF ライセンスキーの取得
  • [バージョン管理でマイグレーションブランチを作成する

コードの移行

  • [ ] Ghostscript.NET NuGetパッケージを削除します:dotnet remove package Ghostscript.NET を削除します。
  • [ ] IronPdf NuGetパッケージをインストールします:dotnet add package IronPdf<//code>.
  • [ ] 外部Ghostscript GPLバイナリの依存関係を削除する
  • [ ]GhostscriptVersionInfo(ゴーストスクリプトバージョンインフォと DLL 参照を削除する。
  • [ ] GhostscriptProcessor.Process()をIronPDFメソッドに変換する
  • [ ] GhostscriptRasterizerpdf.ToBitmap()に変換する。
  • [コマンドラインスイッチをAPIコールに置き換える
  • [エラー処理を標準エラー解析から例外処理に更新する。
  • [1 インデックスのページ番号を 0 インデックスに変換してください。

テスティング

  • [PDF から画像への変換テスト
  • [テストPDFマージ
  • [テストページの抽出
  • [圧縮品質のテスト
  • [パスワード保護のテスト
  • [出力品質が期待に沿うか確認
  • [パフォーマンスベンチマークのクリティカルパス

展開

  • [ ] サーバーからGhostscript GPLを削除する
  • [PATH 設定の削除
  • [ ] デプロイメントからgsdll*.dllファイルを削除する
  • [Ghostscript GPLがインストールされていなくてもアプリケーションが動作することを確認してください。

移行後

  • [ ]Ghostscript GPLライセンスの削除 (商用)
  • [ドキュメントの更新
  • [IronPDF APIについてチームをトレーニングする。
  • [問題発生時のモニタリング

結論

Ghostscript GPLからIronPDFに移行することで、AGPLライセンスへの懸念がなくなり、外部バイナリへの依存がなくなり、壊れやすいコマンドラインの文字列操作を型安全な.NET API呼び出しに置き換えることができます。 その結果、最新の.NETアプリケーションとネイティブに統合された、よりクリーンで保守性の高いコードが得られます。

IronPDFに内蔵されたChromiumエンジンは、Ghostscript GPLでは実現できないHTMLからPDFへの変換機能を提供し、自己完結型のNuGetパッケージはあらゆる環境へのデプロイを簡素化します。 商用アプリケーションを構築しているチームにとって、この移行はAGPL準拠の法的複雑性を排除します。

完全なIronPDFドキュメントチュートリアルAPIリファレンスを参照して、Ghostscript GPLへの移行を加速してください。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。