푸터 콘텐츠로 바로가기
마이그레이션 가이드

C#에서 Ghostscript GPL에서 IronPDF로 마이그레이션하는 방법

Ghostscript GPL에서 IronPDF로의 마이그레이션은 .NET PDF 워크플로우를 커맨드라인 프로세스 생성 및 문자열 기반 스위치 조작에서 타입-안전성, IntelliSense 지원 네이티브 .NET API로 변환합니다. 이 가이드는 AGPL 라이선스 문제와 외부 바이너리 종속성을 제거하는 포괄적이고 단계적인 마이그레이션 경로를 제공하여 전문 .NET 개발자를 돕습니다.

왜 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비트(gsdll32.dllgsdll64.dll)에는 서로 다른 DLL이 필요합니다.

  4. 네이티브HTML-to-PDF없음: Ghostscript GPL은 HTML을 PDF로 직접 변환할 수 없습니다. HTML을 다른 도구를 사용하여 먼저 PostScript로 변환한 다음 Ghostscript GPL을 사용하여 PostScript를 PDF로 변환해야 하는 다단계 파이프라인이 필요하며, 외부 종속성이 있습니다.

  5. 복잡한 스위치 구문: 작업은 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=...과 같은 난해한 명령줄 스위치를 통해 제어됩니다. IntelliSense, 타입-안전성 없어 오타가 발생하기 쉽습니다.

  6. 오류 처리: 오류는 stderr를 통해 텍스트 문자열로 전달되어 구문 분석이 필요하며 구조적 예외 처리가 필요합니다.

  7. 프로세스 관리 오버헤드: 각 작업은 별도의 프로세스를 생성하여 오류 처리, 타임아웃 및 리소스 정리에 추가 오버헤드와 복잡성을 더합니다.

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 객체에서 이 메서드를 호출'

시작하기 전에

필수 조건

  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 참조 제거

빠른 시작 마이그레이션

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"
$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;
Imports IronPdf
$vbLabelText   $csharpLabel

완전한 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
$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");
    }
}
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
$vbLabelText   $csharpLabel

차이는 분명합니다: 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
$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");
        }
    }
}
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
$vbLabelText   $csharpLabel

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
$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");
    }
}
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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

AGPL 라이선스 문제 제거됨

Ghostscript GPL의 AGPL 라이선스는 애플리케이션 배포 시 소스 코드 공개를 요구하는 '바이러스성' 특성을 가집니다. IronPDF의 상용 라이선스에는 그러한 요구사항이 없는 명확한 약관이 있습니다.

외부 바이너리 없음

IronPDF는 완전히 자립적입니다. 마이그레이션 후 다음을 제거하세요:

  • gsdll32.dllgsdll64.dll 파일
  • 서버에서Ghostscript GPL설치
  • PATH 환경 변수 구성
  • 코드에서 GhostscriptVersionInfo 참조

PostScript 파일

IronPDF는 PostScript (.ps) 파일을 직접 처리하지 않습니다. 워크플로우에 PostScript 처리가 필요한 경우 다음 중 하나를 수행하세요: 1.IronPDF처리 전에 다른 도구를 사용하여 PostScript를 PDF로 변환

  1. 소스 콘텐츠를 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
$vbLabelText   $csharpLabel

스레드 안전성

IronPDF는 설계상으로 스레드 안전합니다. 여러 스레드는 동기화 문제 없이 ChromePdfRendererPdfDocument를 동시에 사용할 수 있습니다.


마이그레이션 체크리스트

사전 마이그레이션

  • 코드베이스에서 모든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메소드로 변환
  • GhostscriptRasterizerpdf.ToBitmap()로 변환
  • 명령줄 스위치를 API 호출로 대체
  • 오류 처리를 stderr 파싱에서 예외로 업데이트
  • 1-인덱스 페이지 번호를 0-인덱스로 변환

테스트

  • PDF에서 이미지 변환 테스트
  • PDF 병합 테스트
  • 페이지 추출 테스트
  • 압축 품질 테스트
  • 비밀번호 보호 테스트
  • 출력 품질이 기대에 부합하는지 확인
  • 중요 경로 성능 벤치마크

배포

  • 서버에서Ghostscript GPL제거
  • PATH 구성 제거
  • 배포에서 gsdll*.dll 파일 제거
  • Ghostscript GPL이 설치되지 않은 상태에서 애플리케이션이 작동하는지 확인

마이그레이션 이후

-Ghostscript GPL라이선스 제거(상업용인 경우)

  • 문서 업데이트 -IronPDFAPI에 대한 팀 교육
  • 생산에서 문제 여부 모니터

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해