C#でGhostscript GPLからIronPDFに移行する方法
Ghostscript GPLからIronPDFに移行することで、.NET PDFワークフローをコマンドラインでのプロセス生成や文字列ベースのスイッチ操作から、タイプセーフでインテリセンス対応 for .NETネイティブAPIに変換します。 このガイドは、プロ for .NET開発者のために、AGPLライセンスの懸念と外部バイナリ依存を排除する包括的なステップバイステップの移行パスを提供します。
なぜGhostscript GPLからIronPDFに移行するのか
GhostscriptのGPLの課題
Ghostscript GPL は、数十年の歴史を持つ由緒ある PostScript/PDF インタプリタですが、最新の .NET アプリケーションで使用するには大きな課題があります:
- AGPL ライセンスの制限:Ghostscript GPLの AGPL ライセンスでは、Artifex から高価な商用ライセンスを購入しない限り、それを使用するソフトウェアを配布する場合、ソース コードをリリースする必要があります。 この"バイラル"ライセンスモデルは、プロプライエタリなアプリケーションに重大な法的リスクをもたらします。
2.コマンドライン インターフェイス:Ghostscript GPLは基本的にコマンドライン ツールです。 C#からこのツールを使用するには、プロセスを起動し、文字列引数を渡し、出力を解析する必要があります。
3.外部バイナリ依存関係:Ghostscript GPLを個別にインストールし、PATH 変数を管理し、展開環境間でのバージョン互換性を確保する必要があります。 32 ビットと 64 ビットでは異なる DLL が必要です (gsdll32.dll と gsdll64.dll)。
4.ネイティブ HTML から PDF への変換なし:Ghostscript GPLは HTML を PDF に直接変換できません。 まず別のツールを使ってHTMLをPostScriptに変換し、次にGhostscript GPLを使ってPostScriptをPDFに変換する必要があります。
5.複雑なスイッチ構文:操作は、-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=... のような難解なコマンドライン スイッチによって制御されます。 インテリセンス、タイプセーフティがなく、ミスタイプしやすい。
6.エラー処理:エラーはテキスト文字列として stderr から渡されるため、構造化例外処理ではなく解析が必要です。
7.プロセス管理のオーバーヘッド:各操作は個別のプロセスを生成し、エラー処理、タイムアウト、およびリソースのクリーンアップのオーバーヘッドと複雑さを追加します。
ゴーストスクリプトGPLとIronPDFの比較
| アスペクト | Ghostscript GPL | IronPDF |
|---|---|---|
| ライセンス | AGPL(ウィルス性)または高価な商用 | 明確な用語によるコマーシャル |
| インテグレーション | コマンドラインプロセスの起動 | .NETネイティブライブラリ |
| APIデザイン | 文字列ベースのスイッチ | 型付き、インテリセンス対応API |
| エラー処理 | 標準エラーテキストの解析 | .NET の例外 |
| HTMLからPDFへ | 非対応(外部ツールが必要) | 内蔵Chromiumエンジン |
| 依存関係 | 外部バイナリのインストール | 自己完結型NuGetパッケージ |
| デプロイメント | PATHの設定、DLLのコピー | NuGetリファレンスを追加するだけです。 |
| スレッドの安全性 | プロセス分離のみ | スレッドセーフ設計 |
| 最新 for .NET | 限定サポート | .NET 6/7/8/9/10をフルサポート |
| 非同期サポート | プロセスベース | ネイティブasync/await |
2025年、2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFは最新 for .NETパターンとネイティブに統合する将来性のある基盤を提供します。
マイグレーションの複雑さの評価
機能別の見積もり作業
| フィーチャー | 移行の複雑さ |
|---|---|
| PDFから画像へ | 低レベル |
| PDFのマージ | 低レベル |
| PDF圧縮 | 低レベル |
| PDF最適化 | 低レベル |
| 暗号化 | 中規模 |
| ページ抽出 | 低レベル |
| ポストスクリプトからPDFへ | 中・高 |
| カスタムスイッチ | 中・高 |
パラダイムシフト
このGhostscript GPL移行における基本的な変化は、コマンドライン プロセス実行から型指定された.NET API 呼び出しへの変更です。
Ghostscript GPL: "これらの文字列スイッチを外部プロセスに渡す"
IronPDF: ".NET オブジェクトでこれらのメソッドを呼び出す
始める前に
前提条件
- .NETバージョン: IronPDFは.NET Framework 4.6.2以降および.NET Core 2.0以降 / .NET 5/6/7/8/9以降をサポートしています。 2.ライセンスキー: IronPDFから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" .
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のGPL依存関係を削除する
移行後
- サーバーからGhostscript GPLをアンインストールする
- デプロイメントから
gsdll32.dll/gsdll64.dllを削除します - Ghostscript GPLのPATH設定を削除する
GhostscriptVersionInfo参照を削除します
クイック スタート マイグレーション
ステップ 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";
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
ステップ 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;
Imports IronPdf
完全な API リファレンス
コア クラス マッピング
| Ghostscript.NET | IronPDF | 翻訳内容 |
|---|---|---|
GhostscriptProcessor |
さまざまなPdfDocumentメソッド |
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=png16m |
ToBitmap() または RasterizeToImageFiles() |
PNG出力 |
-sOutputFile=X |
SaveAs("X") |
出力ファイル名 |
-r300 |
メソッド内のDPIパラメータ | 解像度 |
-dPDFSETTINGS=/ebook |
CompressImages(quality: 75) |
中程度の品質 |
-sOwnerPassword=X |
SecuritySettings.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());
}
}
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()
{
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");
}
}
Imports IronPdf
Class IronPdfExample
Shared Sub Main()
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 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();
}
}
}
}
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()
{
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");
}
}
}
Imports IronPdf
Imports System
Class IronPdfExample
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim images = pdf.ToBitmap()
For i As Integer = 0 To images.Length - 1
images(i).Save($"output_page{i + 1}.png")
Next
End Sub
End Class
Ghostscript GPL アプローチでは、外部の gsdll64.dll を見つけ、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());
}
}
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()
{
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");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class IronPdfExample
Shared Sub Main()
Dim pdfs As 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 GPL アプローチでは、スイッチ構文 (-sDEVICE=pdfwrite) を記憶し、ファイル パスを文字列配列に連結する必要があります。IronPDFの静的 Merge メソッドは、適切な PdfDocument オブジェクトとの型セーフで IntelliSense 対応のマージを提供します。 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");
}
Option Strict On
' Ghostscript GPL: 1-indexed pages
For pageNumber As Integer = 1 To rasterizer.PageCount
Dim img As Image = rasterizer.GetPage(300, pageNumber)
Next
' IronPDF: 0-indexed pages (standard .NET)
For i As Integer = 0 To images.Length - 1
images(i).Save($"output_page{i + 1}.png")
Next
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
スレッドの安全性
IronPDFは設計上スレッドセーフです。 複数のスレッドは、同期を気にすることなく、ChromePdfRenderer と PdfDocument を同時に使用できます。
移行チェックリスト
移行前
- コードベース内のすべてのGhostscript GPLの使用状況を一覧表示する
- 現在使用されているコマンドラインスイッチを文書化する
- PostScript処理を識別する(特別な処理が必要)
- AGPLライセンスのコンプライアンスステータスを確認する
- IronPDFライセンスキーを取得する
- バージョン管理に移行ブランチを作成する
コードの移行
- Ghostscript .NET NuGetパッケージを削除します:
dotnet remove package Ghostscript.NET-IronPDFNuGetパッケージをインストールします:dotnet add package IronPdf - 外部のGhostscript GPLバイナリ依存関係を削除する
GhostscriptVersionInfoおよび DLL 参照を削除しますGhostscriptProcessor.Process()をIronPDFメソッドに変換するGhostscriptRasterizerをpdf.ToBitmap()に変換します- コマンドラインスイッチをAPI呼び出しに置き換える
- エラー処理をstderr解析から例外に更新
- 1から始まるページ番号を0から始まるページ番号に変換する
テスティング
- PDFから画像への変換をテストする
- PDF結合のテスト
- テストページの抽出
- 圧縮品質のテスト
- パスワード保護をテストする
- 出力品質が期待通りであることを確認する
- パフォーマンスベンチマークのクリティカルパス
展開
- サーバーからGhostscript GPLを削除する
- PATH設定を削除する
- デプロイメントから
gsdll*.dllファイルを削除します -Ghostscript GPLをインストールせずにアプリケーションが動作することを確認します
移行後
- Ghostscript GPLライセンスを削除する(商用の場合)
- ドキュメントの更新 -IronPDFAPI についてチームをトレーニングする
- 問題がないか生産状況を監視

