C#에서 Ghostscript GPL에서 IronPDF로 마이그레이션하는 방법
Ghostscript GPL에서 IronPDF로의 마이그레이션은 .NET PDF 워크플로우를 커맨드라인 프로세스 생성 및 문자열 기반 스위치 조작에서 타입-안전성, IntelliSense 지원 네이티브 .NET API로 변환합니다. 이 가이드는 AGPL 라이선스 문제와 외부 바이너리 종속성을 제거하는 포괄적이고 단계적인 마이그레이션 경로를 제공하여 전문 .NET 개발자를 돕습니다.
왜 Ghostscript GPL에서 IronPDF로 마이그레이션해야 하는가
Ghostscript GPL의 도전 과제
Ghostscript GPL은 수십 년 역사와 함께한 저명한 PostScript/PDF 해석기이지만, 현대 .NET 애플리케이션에서 사용하기에는 몇 가지 중요한 도전 과제가 있습니다:
-
AGPL 라이선스 제한: Ghostscript GPL의 AGPL 라이선스는 이를 사용하는 소프트웨어를 배포할 경우 소스 코드를 공개하도록 요구합니다. 단, Artifex로부터 비싼 상용 라이선스를 구매하지 않는 한. 이 '바이러스' 라이선스 모델은 독점 애플리케이션에 상당한 법적 위험을 초래합니다.
-
명령줄 인터페이스: Ghostscript GPL은 근본적으로 명령줄 도구입니다. C#에서 이를 사용하려면 프로세스를 생성하고, 문자열 인수를 전달하고, 출력을 구문 분석해야 하며 이러한 접근 방식은 취약하고 오류가 발생하기 쉬운 방식입니다.
-
외부 바이너리 종속성: Ghostscript GPL을 별도로 설치하고, PATH 변수를 관리하며, 배포 환경 간의 버전 호환성을 보장해야 합니다. 32비트와 64비트(
gsdll32.dll대gsdll64.dll)에는 서로 다른 DLL이 필요합니다. -
네이티브HTML-to-PDF없음: Ghostscript GPL은 HTML을 PDF로 직접 변환할 수 없습니다. HTML을 다른 도구를 사용하여 먼저 PostScript로 변환한 다음 Ghostscript GPL을 사용하여 PostScript를 PDF로 변환해야 하는 다단계 파이프라인이 필요하며, 외부 종속성이 있습니다.
-
복잡한 스위치 구문: 작업은
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=...과 같은 난해한 명령줄 스위치를 통해 제어됩니다. IntelliSense, 타입-안전성 없어 오타가 발생하기 쉽습니다. -
오류 처리: 오류는 stderr를 통해 텍스트 문자열로 전달되어 구문 분석이 필요하며 구조적 예외 처리가 필요합니다.
- 프로세스 관리 오버헤드: 각 작업은 별도의 프로세스를 생성하여 오류 처리, 타임아웃 및 리소스 정리에 추가 오버헤드와 복잡성을 더합니다.
Ghostscript GPLvsIronPDF비교
| 측면 | Ghostscript GPL | IronPDF |
|---|---|---|
| 라이선스 | AGPL (전염성) 또는 높은 비용의 상업적 | 명확한 조건을 가진 상업적 |
| 통합 | 명령줄 프로세스 생성 | 네이티브 .NET 라이브러리 |
| API 설계 | 문자열 기반 스위치 | 타이핑 및 IntelliSense 지원 API |
| 오류 처리 | stderr 텍스트 파싱 | .NET 예외 |
| HTML-to-PDF | 지원되지 않음 (외부 도구 필요) | 내장 Chromium 엔진 |
| 종속성 | 외부 바이너리 설치 | 자체 포함된 NuGet 패키지 |
| 배포 | PATH 구성, DLL 복사 | NuGet 참조만 추가 |
| 스레드 안전성 | 프로세스 분리만 | 설계상 스레드 안전 |
| 현대 .NET | 제한적 지원 | .NET 6/7/8/9/10 전면 지원 |
| 비동기 지원 | 프로세스 기반 | 네이티브 async/await |
.NET 10과 C# 14의 2025년과 2026년 채택을 계획하는 팀에게, IronPDF는 현대 .NET 패턴과 네이티브로 통합되는 미래 지향적인 기반을 제공합니다.
마이그레이션 복잡성 평가
기능별 예상 노력
| 기능 | 마이그레이션 복잡성 |
|---|---|
| PDF를 이미지로 | 낮음 |
| PDF 병합 | 낮음 |
| PDF 압축 | 낮음 |
| PDF 최적화 | 낮음 |
| 암호화 | 중간 |
| 페이지 추출 | 낮음 |
| PostScript를 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+를 지원합니다.
- 라이선스 키: ironpdf.com에서IronPDF라이선스 키를 얻으세요.
- 백업: 마이그레이션 작업을 위한 분기를 생성하세요.
모든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):
AGPL 하에서 Ghostscript GPL은 소스 코드 공개 또는 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 |
N/A (필요 없음) | DLL 위치 |
GhostscriptStdIO |
N/A (예외 사용) | I/O 처리 |
| 프로세스 + 명령줄 | ChromePdfRenderer |
HTML을 PDF로 |
명령줄 스위치 매핑
| Ghostscript GPL 스위치 | IronPDF 동등 | 설명 |
|---|---|---|
-dNOPAUSE |
N/A (필요 없음) | 페이지 간 일시정지 금지 |
-dBATCH |
N/A (필요 없음) | 처리 후 종료 |
-dSAFER |
N/A (기본값) | 안전한 파일 액세스 |
-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로 변환할 수 없습니다 - 외부 도구를 사용하여 중간 PostScript 변환이 필요합니다. IronPDF의 ChromePdfRenderer는 CSS3, JavaScript 및 최신 웹 표준을 완전 지원하는 HTML에서 PDF로 직접 변환을 제공합니다. HTML to PDF 문서를 통해 더 많은 렌더링 옵션을 확인하십시오.
예제 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-인덱스 페이지를 사용하고 IronPDF는 0-인덱스(Standard .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 접근 방식은 스위치 구문(-dNOPAUSE, -dBATCH, -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참조
PostScript 파일
IronPDF는 PostScript (.ps) 파일을 직접 처리하지 않습니다. 워크플로우에 PostScript 처리가 필요한 경우 다음 중 하나를 수행하세요: 1.IronPDF처리 전에 다른 도구를 사용하여 PostScript를 PDF로 변환
- 소스 콘텐츠를 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 - IronPdf NuGet Install-Package:
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에 대한 팀 교육
- 생산에서 문제 여부 모니터

