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

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

Ghostscript에서 IronPDF로 마이그레이션하면 .NET PDF 워크플로우가 명령줄 프로세스 생성 및 문자열 기반 스위치 조작에서 입력 유형 및 IntelliSense가 지원되는 기본 .NET API로 이동합니다. 이 가이드는 AGPL-3.0 라이선스 노출 및 외부 네이티브 바이너리 종속성을 제거하는 단계별 마이그레이션 경로를 안내합니다.

용어에 대한 노트:Ghostscript(by Artifex Software)는 AGPL-3.0 또는 상업적 라이선스 하에 이중 라이선스되어 있습니다, 순수한 GPL이 아니라. "GPL" 태그는 오픈 소스 빌드에 대한 커뮤니티 약어로 오래전부터 사용되고 있습니다; 이 가이드의 모든 내용은 Ghostscript의 AGPL-3.0 빌드와 Ghostscript.NET 래퍼(역시 AGPL-3.0 / 상업용 듀얼)를 참조합니다. .NET에서 Ghostscript는 일반적으로 해당 래퍼를 통해 사용되며, 이는 네이티브 gsdll32.dll / gsdll64.dll를 P/Invoke 하거나 Process.Start를 통해 gswin32c / gswin64c로 셸 아웃하는 방식입니다.

왜 Ghostscript에서 IronPDF로 마이그레이션해야 하는가

Ghostscript의 도전 과제

Ghostscript는 Artifex Software의 오랜 PostScript/PDF 인터프리터로, 수십 년의 역사를 갖고 있습니다. 현대 .NET 응용 프로그램에서 사용하면서 몇 가지 실질적인 도전 과제에 직면하게 됩니다:

  1. AGPL-3.0 라이선스 제한:Ghostscript자체와 Ghostscript.NET 래퍼는 AGPL-3.0 또는 Artifex의 상업적 라이선스를 통해 듀얼 라이선싱됩니다. AGPL의 네트워크 카피레프트 조항은 일반적으로 SaaS / 네트워크 사용을 포함한 더 큰 작업의 해당 소스를 배포하도록 요구합니다 — 상업 라이선스를 구매하지 않는 한. 이는 일반적으로 클로즈드 소스 또는 호스팅된 .NET 앱에서 AGPL 빌드를 배제하게 만듭니다.

  2. 명령줄 인터페이스: Ghostscript는 근본적으로 명령줄 도구입니다. C#에서의 사용은 프로세스 생성, 문자열 인수 전달 및 출력 구문 분석을 의미하며, 이는 Process.Start를 통해 gswin*c.exe에 대해, 또는 Ghostscript.NET P/Invoke 래퍼를 통한 방식 중 하나입니다.

  3. 외부 바이너리 종속성: Ghostscript를 별도로 설치하고, PATH 변수를 관리하며, 환경 간 버전을 일치시켜야 합니다. 32비트와 64비트용으로 다른 네이티브 DLL이 필요합니다 (gsdll32.dllgsdll64.dll).

  4. 네이티브 HTML-대-PDF 없음: Ghostscript는 HTML을 PDF로 직접 변환할 수 없습니다. 먼저 다른 도구로 HTML을 PostScript로 변환한 다음 Ghostscript를 실행하여 PostScript를 PDF로 변환해야 합니다 — 외부 종속성을 가진 여러 단계의 파이프라인.

  5. 복잡한 스위치 구문: 작업은 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=... 같은 명령줄 스위치를 통해 제어됩니다. IntelliSense가 없고, 컴파일 시간 확인도 없습니다.

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

  7. 프로세스 관리 오버헤드: 각 작업마다 별도의 프로세스를 생성하여 제한 시간 및 리소스 정리에 대한 오버헤드와 복잡성을 추가합니다.

Ghostscript 대 IronPDF 비교

측면 Ghostscript IronPDF
라이선스 AGPL-3.0 (네트워크 카피레프트) 또는 Artifex 상업 명확한 조건을 가진 상업적
통합 명령줄 프로세스 생성 네이티브 .NET 라이브러리
API 설계 문자열 기반 스위치 타이핑 및 IntelliSense 지원 API
오류 처리 stderr 텍스트 파싱 .NET 예외
HTML-to-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 객체의 이 메서드를 호출"

시작하기 전에

필수 조건

  1. .NET 버전: IronPDF는 .NET Framework 4.6.2+ 및 .NET Core / .NET 5+ (포함 .NET 6/7/8/9)를 지원합니다. Ghostscript.NET v1.3.x는 .NET Standard 2.0을 목표로 합니다.
  2. 라이선스 키: ironpdf.com에서 IronPDF 라이선스 키를 얻으세요.
  3. 백업: 마이그레이션 작업을 위한 분기를 생성하세요.

모든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" .
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종속성 제거

마이그레이션 후:

  • 서버에서Ghostscript제거
  • 배포에서 gsdll32.dll / gsdll64.dll 제거
  • Ghostscript에 대한 PATH 구성 제거
  • GhostscriptVersionInfo 참조 제거

빠른 시작 마이그레이션

1단계: 라이선스 구성 업데이트

Before (Ghostscript):

AGPL-3.0 하의 Ghostscript는 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";
$vbLabelText   $csharpLabel

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

완전한 API 참조

핵심 클래스 매핑

Ghostscript.NET IronPDF 설명
GhostscriptProcessor 다양한 PdfDocument 메서드 PDF 처리
GhostscriptRasterizer PdfDocument.RasterizeToImageFiles() PDF를 이미지로 변환
GhostscriptVersionInfo N/A (필요 없음) DLL 위치
GhostscriptStdIO N/A (예외 사용) I/O 처리
프로세스 + 명령줄 ChromePdfRenderer HTML을 PDF로

명령줄 스위치 매핑

Ghostscript 스위치 IronPDF 동등 설명
-dNOPAUSE N/A (필요 없음) 페이지 간 일시정지 금지
-dBATCH N/A (필요 없음) 처리 후 종료
-dSAFER N/A (기본값) 안전한 파일 액세스
-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로 변환

Before (Ghostscript):

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

class GhostscriptExample
{
    static void Main()
    {
        //Ghostscriptcannot directly convert HTML to PDF
        // You need to first convert HTML to PS/EPS using another tool
        // then useGhostscriptto 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 -Ghostscriptprimarily 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()
    {
        //Ghostscriptcannot directly convert HTML to PDF
        // You need to first convert HTML to PS/EPS using another tool
        // then useGhostscriptto 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 -Ghostscriptprimarily 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()
    {
        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
$vbLabelText   $csharpLabel

Ghostscript는 HTML을 PDF로 직접 변환할 수 없습니다 — PostScript나 PDF 입력을 예상하므로 HTML 워크플로우는 중간 변환 (일반적으로 wkhtmltopdf 또는 유사 도구를 통해) 이 필요합니다. IronPDF의 ChromePdfRenderer는 CSS, JavaScript 및 Chrome 엔진을 통한 최신 웹 표준을 지원하여 HTML을 PDF로 직접 렌더링합니다. 더 많은 렌더링 옵션은 HTML to PDF 문서를 참조하세요.

예제 2: PDF에서 이미지로

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

이후 (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
$vbLabelText   $csharpLabel

Ghostscript 접근 방식은 외부 gsdll64.dll를 찾고, GhostscriptVersionInfo 객체를 생성하고, 1-인덱스된 페이지 번호로 페이지를 반복해야 합니다. IronPDF의 RasterizeToImageFiles는 단일 호출로 모든 페이지를 작성하며, 개별 DPI: 매개변수를 가진 글롭 출력 패턴을 사용하여 외부 네이티브 의존성이 없습니다. 페이지 인덱스를 처리할 때, Ghostscript는 1부터 시작하는 페이지를 사용하고 IronPDF는 0부터 시작하는 페이지를 사용한다는 점을 주목하세요 (표준 .NET 관례).

예제 3: PDF 파일 병합

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

이후 (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
$vbLabelText   $csharpLabel

Ghostscript 접근 방식은 전체 스위치 주문(-dNOPAUSE, -dBATCH, -sDEVICE=pdfwrite)과 파일 경로를 문자열 배열로 연결해야 합니다. IronPDF의 정적 Merge 메서드는 타이핑된 IEnumerable<PdfDocument>를 취하고 새로운 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")
$vbLabelText   $csharpLabel

AGPL-3.0 라이선스 관련 사항

Ghostscript와 Ghostscript.NET 래퍼는 AGPL-3.0 또는 Artifex의 상업 라이선스로 듀얼 라이선싱됩니다. AGPL-3.0의 네트워크 카피레프트 조항은 일반적으로 SaaS / 네트워크 액세스 가능한 배포를 포함한 큰 작업의 해당 소스를 배포하도록 요구합니다 — Artifex의 상업 라이선스를 소지하지 않는 한. PDF 워크로드를 IronPDF로 마이그레이션하면 움직이는 부분에 대한 그 의무가 제거됩니다; PostScript 수신을 위해 Ghostscript를 유지하는 경우, Artifex의 상업적 라이선스가 그 부분을 커버합니다. (This is a general summary, not legal advice — consult counsel for your specific deployment.)

외부 바이너리 없음

IronPDF는 NuGet 패키지로 배포됩니다. 마이그레이션 후 다음을 제거하세요:

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

PostScript 파일

IronPDF는 PostScript (.ps) 파일을 직접 처리하지 않습니다. 워크플로우에 PostScript 처리가 필요한 경우 다음 중 하나를 수행하세요:

  1. IronPDF 처리 전에 다른 도구를 사용하여 PostScript를 PDF로 변환
  2. 소스 콘텐츠를 HTML로 변환하고 IronPDF의 HTML 렌더링 사용

성능 고려 사항

프로세스 생성 없음

gswin64c.exe에 셸 아웃(또는 gsdll64.dll P/Invoke)은 각 작업당 프로세스 및 네이티브 상호 작용 오버헤드를 수반합니다. 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)
$vbLabelText   $csharpLabel

스레드 안전성

IronPDF는 여러 스레드에서 ChromePdfRendererPdfDocument를 동시에 사용할 수 있도록 지원합니다. 병렬 렌더링 패턴에 대한 지침은 IronPDF 문서 를 참조하세요.


마이그레이션 체크리스트

사전 마이그레이션

  • 코드베이스 내 모든Ghostscript사용 내역
  • 현재 사용 중인 명령줄 스위치 문서화
  • PostScript 처리를 식별 (특별 처리 필요)
  • AGPL-3.0 라이선스 준수 상태 검토
  • IronPDF 라이센스 키를 받으세요
  • 버전 컨트롤에 마이그레이션 분기를 생성

코드 마이그레이션

  • Ghostscript.NET NuGet 패키지 제거: dotnet remove package Ghostscript.NET -IronPDF NuGet Install-Package: dotnet add package IronPdf
  • 외부Ghostscript바이너리 종속성 제거
  • GhostscriptVersionInfo 및 DLL 참조 제거
  • GhostscriptProcessor.Process()를 IronPDF 메서드로 변환
  • GhostscriptRasterizerpdf.RasterizeToImageFiles()로 변환
  • 명령줄 스위치를 API 호출로 대체
  • 오류 처리를 stderr 파싱에서 예외로 업데이트
  • 1-인덱스 페이지 번호를 0-인덱스로 변환

테스트

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

배포

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

마이그레이션 이후

  • 상업적 라이선스 취소 (이전에 소유했고 더 이상 필요하지 않음) 결정
  • 문서 업데이트 -IronPDF API에 대한 팀 교육
  • 생산에서 문제 여부 모니터

참고해 주세요Ghostscript는 해당 소유자의 등록 상표입니다. 이 사이트는 Artifex Software와 연계되어 있지 않으며, 승인을 받거나 후원을 받지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

Curtis Chau
기술 문서 작성자

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

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

아이언 서포트 팀

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