如何在 C# 中壓縮 PDF
從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,通常透過該包裝器與Ghostscript交互,它通過P/Invoke調用本地的gsdll32.dll / gswin32c / gswin64c。
為何從Ghostscript遷移到IronPDF
Ghostscript面臨的挑戰
Ghostscript是Artifex Software開發的歷史悠久的PostScript/PDF解釋器。 在現代.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到PDF:Ghostscript無法直接將HTML轉換為PDF。 您需要先使用其他工具將HTML轉換為PostScript,然後運行Ghostscript將PostScript轉換為PDF — 這是一個多步驟管道,且有外部依賴。
-
複雜的開關語法:操作是通過如
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=...那樣的命令行開關控制的。 沒有IntelliSense,沒有編譯時檢查。 -
錯誤處理:錯誤通過stderr以文字字串形式出現,需要解析而非結構化異常處理。
- 進程管理負擔:每次操作都會生成單獨的進程,增加了超時和資源清理的負擔和複雜性。
Ghostscript與IronPDF比較
| 方面 | Ghostscript | IronPDF |
|---|---|---|
| 授權 | AGPL-3.0(網路共享)或Artifex商業 | 商業授權明確 |
| 整合 | 命令行進程生成 | 原生.NET程式庫 |
| API設計 | 基於字串的開關 | 型別化且支援IntelliSense的API |
| 錯誤處理 | 解析stderr文字 | .NET異常 |
| HTML到PDF | 不支援(需要外部工具) | 內建 Chromium 引擎 |
| 依賴關係 | 外部二進制安裝 | 自包含NuGet包 |
| 部署 | 配置PATH,複製DLL | 僅需新增NuGet引用 |
| 執行緒安全 | 僅進程隔離 | 設計上具現成的執行緒安全性 |
| 現代.NET | Ghostscript.NET v1.3.x目標.NET Standard 2.0 |
.NET Framework 4.6.2+ and .NET 6/7/8/9 |
| 異步支援 | 基於進程 | 原生async/await |
遷移複雜性評估
功能的預估努力程度
| 功能 | 遷移複雜性 |
|---|---|
| PDF轉圖像 | 低 |
| 合併PDF | 低 |
| 壓縮PDF | 低 |
| PDF優化 | 低 |
| 加密 | 中 |
| 頁面提取 | 低 |
| PostScript轉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。 - 授權金鑰:從ironpdf.com取得您的IronPDF授權金鑰
- 備份:建立一個遷移工作的分支
識別所有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()
{
// 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()
{
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提供直接的HTML到PDF渲染,支援CSS、JavaScript和現代網路標準,並使用內嵌的Chromium引擎。請參閱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使用0索引頁碼(標準.NET慣例)。
範例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方法需要完整的開關咒語(-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite)和將文件路徑串聯成字串陣列。 IronPDF的靜態PdfDocument。 了解更多合併和拆分PDF的資訊。
關鍵遷移注意事項
頁面索引轉換
這次遷移中最重要的區別之一是頁面索引。 Ghostscript的-dFirstPage=N / -dLastPage=M開關是1索引。 IronPDF的CopyPages是0索引(標準.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/網路可存取的部署,除非您持有Artifex的商業授權。 將PDF工作負載遷移到IronPDF之後,移動的部分將不再有此義務; 如果您僅保持Ghostscript以便處理PostScript,那麼Artifex的商業授權涵蓋該部分。 (This is a general summary, not legal advice — consult counsel for your specific deployment.)
沒有外部二進位文件
IronPDF發布為NuGet包。 遷移后移除這些:
gsdll64.dll文件- 從伺服器解除安裝Ghostscript
- PATH環境變數配置
- 程式碼中的
GhostscriptVersionInfo引用
PostScript文件
IronPDF不直接處理PostScript(.ps)文件。 如果您的工作流需要PostScript處理,則可選擇:
- 在IronPDF處理之前使用其他工具將PostScript轉換為PDF
- 將源內容轉換為HTML並使用IronPDF的HTML渲染
效能考量
無進程生成
調用gswin64c.exe(或P/Invoking gsdll64.dll)會導致每次操作都有進程和本地互操作的負擔。 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 - 安裝IronPDF NuGet包:
dotnet add package IronPdf - 移除外部Ghostscript二進制依賴
- 移除
GhostscriptVersionInfo和DLL引用 - 將
GhostscriptProcessor.Process()轉換為IronPDF方法 - 將
pdf.RasterizeToImageFiles() - 將命令行開關替換為API調用
- 將錯誤處理從stderr解析更新為異常
- 將1索引頁碼轉換為0索引
測試
- 測試PDF到圖像轉換
- 測試PDF合併
- 測試頁面提取
- 測試壓縮質量
- 測試密碼保護
- 驗證輸出質量符合預期
- 進行性能基準測試關鍵路徑
部署
- 從伺服器中解除安裝Ghostscript
- 移除PATH配置
- 將
gsdll*.dll文件從部署中移除 - 驗證應用程式在未安裝Ghostscript的情況下工作
遷移後
- 取消Artifex商業授權(如果之前持有且不再需要)
- 更新文件
- 培訓團隊使用IronPDF API
- 監控生產環境中的任何問題

