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

C#에서 Nutrient.io에서 IronPDF로 마이그레이션하는 방법

Nutrient (이전 PSPDFKit)에서 IronPDF로 이동하면 광범위한 이미지 및 PDF 툴킷에서 집중된 PDF 라이브러리로 전환하여 .NET PDF 워크플로가 간소화됩니다. Nutrient의 서버 측 .NET 제공은 ORPALIS로부터 인수하여 "Nutrient .NET SDK"로 재배치한 도구 모음인 GdPicture.NET이며, 이는 GdPicture NuGet 패키지로 GdPicture14 네임스페이스 하에 제공됩니다. 이 안내서는 절차적인 다목적 툴킷을 PDF 전용 라이브러리로 교체하는 단계별 전환 경로를 안내합니다.

Nutrient에서 IronPDF로 마이그레이션하는 이유

툴킷 표면적 문제

Nutrient (이전 PSPDFKit, 2024-10-23에 리브랜딩됨)는 다제품군을 판매합니다 — 문서 엔진 (Docker 마이크로서비스), 웹 SDK, 모바일 SDK, 서버 측 .NET SDK는 내부적으로 GdPicture입니다. 툴킷의 나머지 기능 없이 간단한 PDF 작업이 필요한 팀에게는 표면적이 몇 가지 구체적인 방식으로 나타납니다:

  1. 광범위한 툴킷 범위: .NET SDK는 PDF, OCR, 바코드, TWAIN 스캔, 이미지 처리 및 100개 이상의 파일 형식 컨버전을 포함합니다. 그 정도의 범위가 필요하다면 유용합니다 — PDF 전용 프로젝트가 필요로 하는 것보다 더 많은 표면적입니다.

  2. 영업 주도 가격 책정: nutrient.io/sdk/pricing 페이지는 개발자별 요율을 공개하는 대신 연락 양식으로 이동하여 소규모 팀이 비용을 비교하기 어렵게 만듭니다.

  3. 브랜드 및 패키지 변동: PSPDFKit → Nutrient (2024-10-23), GdPicture 인수 포함하여 구식 코드에서 추적해야 할 세 가지 이름이 있습니다. .NET SDK는 여전히 GdPicture NuGet 패키지, 네임스페이스 GdPicture14로 제공되며, "Nutrient" 또는 "PSPDFKit" 브랜드와 일치하지 않는 GdPicturePDFGdPictureDocumentConverter와 같은 클래스 이름을 가집니다.

  4. HTML을 PDF로 변환할 때 외부 브라우저 의존성: .NET SDK의 HTML 렌더러는 시스템에 설치된 Chrome 또는 Edge(또는 SetWebBrowserPath을 통해 설정한 휴대용 경로)를 기반으로 합니다. IronPDF는 자체 내장 Chromium을 제공합니다.

  5. 절차적 PDF API: 워터마크는 SetFillAlpha, DrawTextBox 및 OCG 레이어 마커로 구성됩니다. 헤더 및 푸터는 루프에서 각 페이지에 그려집니다. 공통 PDF 작업을 원시로 구성하면 작업당 코드가 더 증가합니다.

Nutrient .NET SDK vsIronPDF비교

측면 Nutrient .NET SDK (GdPicture) IronPDF
범위 PDF + OCR + 바코드 + 스캔 + 이미지 PDF 라이브러리
가격 영업 주도 (견적 요청 후) 투명하고 출판된 내용
NuGet 패키지 GdPicture IronPdf
루트 네임스페이스 GdPicture14 IronPdf
API 스타일 대부분 동기적, 절차적 그리기 비동기 옵션과 동기화, 플루언트
HTML 렌더링 시스템 Chrome / Edge가 필요 내장된 Chromium
페이지 인덱싱 1 기반 0 기반
대상 사용자 이미지 + 스캔 + PDF를 한 툴킷에서 필요로 하는 팀 PDF만 필요로 하는 팀

현대 .NET을 사용하는 팀에게 IronPDF는 추가 이미지 / 스캔 / OCR 계층 없이 깨끗하게 통합되는 작은 PDF 중심 기반을 제공합니다.


시작하기 전에

필수 조건

  1. .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
  3. IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요

NuGet 패키지 변경 사항

# Remove theNutrient .NET SDK (GdPicture) and any legacy PSPDFKit-branded packages
dotnet remove package GdPicture
dotnet remove package GdPicture.WPF
dotnet remove package GdPicture.WinForms
dotnet remove package PSPDFKit.NET

# Install IronPDF
dotnet add package IronPdf
# Remove theNutrient .NET SDK (GdPicture) and any legacy PSPDFKit-branded packages
dotnet remove package GdPicture
dotnet remove package GdPicture.WPF
dotnet remove package GdPicture.WinForms
dotnet remove package PSPDFKit.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

현재 Nutrient .NET SDK는 GdPicture NuGet ID 하에 제공됩니다 (최신 14.x, 소유자 ORPALIS - Nutrient 자회사). 이전 PSPDFKit 브랜드 PSPDFKit.NET 패키지는 단종되었습니다. 존재하는 경우 제거하십시오.

라이선스 구성

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Nutrient .NET SDK 사용 식별

# Find GdPicture / Nutrient / PSPDFKit usage
grep -rE "GdPicture14|GdPicturePDF|GdPictureDocumentConverter|PSPDFKit|Nutrient" --include="*.cs" .
# Find GdPicture / Nutrient / PSPDFKit usage
grep -rE "GdPicture14|GdPicturePDF|GdPictureDocumentConverter|PSPDFKit|Nutrient" --include="*.cs" .
SHELL

완전한 API 참조

초기화 매핑

Nutrient .NET SDK (GdPicture) IronPDF
new GdPicturePDF() new PdfDocument(...) / PdfDocument.FromFile(...)
new GdPictureDocumentConverter() new ChromePdfRenderer()
pdf.Dispose() (IDisposable) pdf.Dispose() (IDisposable)

문서 로딩 매핑

Nutrient .NET SDK (GdPicture) IronPDF
pdf.LoadFromFile(path) PdfDocument.FromFile(path)
pdf.LoadFromStream(stream) PdfDocument.FromStream(stream)
pdf.LoadFromByteArray(bytes) new PdfDocument(bytes) / PdfDocument.FromBinaryData(bytes)

PDF 생성 매핑

Nutrient .NET SDK (GdPicture) IronPDF
HTML 문자열: 임시 파일에 쓰고 나서 converter.LoadFromFile(path, DocumentFormat.DocumentFormatHTML) + SaveAsPDF(out) renderer.RenderHtmlAsPdf(html)
converter.LoadFromHttp(url) + SaveAsPDF(out) renderer.RenderUrlAsPdf(url)
converter.LoadFromFile(htmlPath, DocumentFormat.DocumentFormatHTML) + SaveAsPDF(out) renderer.RenderHtmlFileAsPdf(path)

문서 작업 매핑

Nutrient .NET SDK (GdPicture) IronPDF
converter.CombineToPDF(paths, out, PdfConformance.PDF) PdfDocument.Merge(pdfs)
pdf.GetPageCount() pdf.PageCount
pdf.SaveToFile(path) pdf.SaveAs(path)
pdf.SaveToByteArray(out bytes) pdf.BinaryData

워터마크 매핑

Nutrient .NET SDK (GdPicture) IronPDF
pdf.SetFillAlpha(...) + pdf.DrawTextBox(...) 페이지당 pdf.ApplyWatermark(html, rotation, vAlign, hAlign)
pdf.AddStandardFont(...) + 드로우 호출 워터마크 문자열의 HTML/CSS
SetFillAlpha(128) (0–255 바이트 스케일) 워터마크 Opacity 0–100 (int) 또는 CSS opacity
pdf.SetTextSize(48) CSS font-size: 48px

코드 마이그레이션 예제

예제 1: HTML에서 PDF로 변환

Before (Nutrient .NET SDK / GdPicture):

// NuGet: Install-Package GdPicture
using GdPicture14;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        // GdPicture's HTML loader is file-based, so stage the string to disk first.
        File.WriteAllText("input.html", htmlContent);

        using var converter = new GdPictureDocumentConverter();
        converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
        converter.SaveAsPDF("output.pdf");
    }
}
// NuGet: Install-Package GdPicture
using GdPicture14;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        // GdPicture's HTML loader is file-based, so stage the string to disk first.
        File.WriteAllText("input.html", htmlContent);

        using var converter = new GdPictureDocumentConverter();
        converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
        converter.SaveAsPDF("output.pdf");
    }
}
Imports GdPicture14
Imports System.IO

Class Program
    Shared Sub Main()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"

        ' GdPicture's HTML loader is file-based, so stage the string to disk first.
        File.WriteAllText("input.html", htmlContent)

        Using converter As New GdPictureDocumentConverter()
            converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML)
            converter.SaveAsPDF("output.pdf")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"

        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

GdPicture 접근 방식은 몇 가지 추가 단계를 필요로 합니다: HTML 로더는 파일/URL 기반이므로, 메모리에 있는 HTML 문자열을 우선 디스크로 배치한 다음, converter.LoadFromFile(...)DocumentFormat.DocumentFormatHTML과 함께 호출하고 SaveAsPDF을 진행합니다. HTML 렌더링은 시스템에 설치된 Chrome 또는 Edge(또는 SetWebBrowserPath을 통해 제공된 휴대용 경로)에 의존합니다.

IronPDF는 HTML 문자열을 직접 허용합니다. ChromePdfRenderer을 생성하고 RenderHtmlAsPdf()을 호출한 후, SaveAs()으로 저장합니다. 임시 파일이나 호스트 브라우저 의존성 없음 — IronPDF는 자체 내장 Chromium을 제공합니다. HTML to PDF 문서에서 추가 렌더링 옵션을 참조하십시오.

예시 2: 여러 PDF 병합

Before (Nutrient .NET SDK / GdPicture):

// NuGet: Install-Package GdPicture
using GdPicture14;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        IEnumerable<string> sourceFiles = new List<string>
        {
            "document1.pdf",
            "document2.pdf"
        };

        using var converter = new GdPictureDocumentConverter();
        converter.CombineToPDF(sourceFiles, "merged.pdf", PdfConformance.PDF);
    }
}
// NuGet: Install-Package GdPicture
using GdPicture14;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        IEnumerable<string> sourceFiles = new List<string>
        {
            "document1.pdf",
            "document2.pdf"
        };

        using var converter = new GdPictureDocumentConverter();
        converter.CombineToPDF(sourceFiles, "merged.pdf", PdfConformance.PDF);
    }
}
Imports GdPicture14
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim sourceFiles As IEnumerable(Of String) = New List(Of String) From {
            "document1.pdf",
            "document2.pdf"
        }

        Using converter As New GdPictureDocumentConverter()
            converter.CombineToPDF(sourceFiles, "merged.pdf", PdfConformance.PDF)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

GdPicture 병합은 경로 기반 IEnumerable<string>을 사용하여 converter.CombineToPDF를 통해 수행되며, PdfConformance 값을 통해 출력 적합 수준을 선택합니다.

IronPDF는 문서 수준에서 작동합니다: 각 PDF를 PdfDocument.FromFile()으로 로드하고, 정적 PdfDocument.Merge()메소드를 통해 병합한 후 저장합니다. 문서를 직접 또는 열거 가능 형식으로 전달할 수 있습니다. PDF 병합 및 분할에 대해 더 알아보세요.

예제 3: 워터마크 추가

Before (Nutrient .NET SDK / GdPicture):

// NuGet: Install-Package GdPicture
using GdPicture14;

class Program
{
    static void Main()
    {
        using var pdf = new GdPicturePDF();
        pdf.LoadFromFile("document.pdf");
        pdf.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitPoint);

        var font = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold);
        int pageCount = pdf.GetPageCount();

        for (int i = 1; i <= pageCount; i++)
        {
            pdf.SelectPage(i);
            pdf.SetFillAlpha(128);  // ~50% (0..255)
            pdf.SetTextSize(48);
            pdf.SetOriginRotationInDegrees(45);
            pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
                PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
                PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
        }

        pdf.SaveToFile("watermarked.pdf");
    }
}
// NuGet: Install-Package GdPicture
using GdPicture14;

class Program
{
    static void Main()
    {
        using var pdf = new GdPicturePDF();
        pdf.LoadFromFile("document.pdf");
        pdf.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitPoint);

        var font = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold);
        int pageCount = pdf.GetPageCount();

        for (int i = 1; i <= pageCount; i++)
        {
            pdf.SelectPage(i);
            pdf.SetFillAlpha(128);  // ~50% (0..255)
            pdf.SetTextSize(48);
            pdf.SetOriginRotationInDegrees(45);
            pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
                PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
                PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
        }

        pdf.SaveToFile("watermarked.pdf");
    }
}
Imports GdPicture14

Class Program
    Shared Sub Main()
        Using pdf As New GdPicturePDF()
            pdf.LoadFromFile("document.pdf")
            pdf.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitPoint)

            Dim font = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold)
            Dim pageCount As Integer = pdf.GetPageCount()

            For i As Integer = 1 To pageCount
                pdf.SelectPage(i)
                pdf.SetFillAlpha(128)  ' ~50% (0..255)
                pdf.SetTextSize(48)
                pdf.SetOriginRotationInDegrees(45)
                pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL", PdfHorizontalAlignment.PdfHorizontalAlignmentCenter, PdfVerticalAlignment.PdfVerticalAlignmentMiddle)
            Next

            pdf.SaveToFile("watermarked.pdf")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
            45,
            VerticalAlignment.Middle,
            HorizontalAlignment.Center);

        pdf.SaveAs("watermarked.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
            45,
            VerticalAlignment.Middle,
            HorizontalAlignment.Center);

        pdf.SaveAs("watermarked.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("document.pdf")

        pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>", 
                           45, 
                           VerticalAlignment.Middle, 
                           HorizontalAlignment.Center)

        pdf.SaveAs("watermarked.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예시는 근본적인 아키텍처 차이를 강조합니다. GdPicture는 절차적 드로우 호출 접근 방식을 사용합니다: 표준 폰트를 추가한 다음 각 페이지를 반복하면서 SelectPage, SetFillAlpha, SetTextSize, SetOriginRotationInDegreesDrawTextBox을 호출합니다. 알파는 0-255 바이트 스케일로 설정되며, 회전은 그래픽 상태 속성으로 설정되고 위치는 명시적 좌표를 통해 처리됩니다.

IronPDF는 HTML 기반 접근 방식을 사용합니다: ApplyWatermark() 메소드는 CSS 스타일이 적용된 HTML 문자열을 받아들이며, 모든 페이지에 한 번의 호출로 적용됩니다. 익숙한 CSS 속성(color, opacity, font-size)을 통해 외관을 제어할 수 있습니다. 원시 그래픽 호출 대신에 말이죠. 이 접근 방식은 동일한 문자열에서 그라데이션, 이미지, 더 복잡한 레이아웃과 같은 더 풍부한 콘텐츠도 지원합니다. 고급 예제는 워터마크 문서를 참조하십시오.


중요한 마이그레이션 노트

HTML 입력 표면

GdPicture의 HTML 로더는 파일/URL 기반입니다; IronPDF는 HTML 문자열을 직접 허용합니다:

// Nutrient .NET SDK (string -> file -> PDF):
File.WriteAllText("input.html", html);
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
converter.SaveAsPDF("output.pdf");

//IronPDF(string -> PDF):
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Nutrient .NET SDK (string -> file -> PDF):
File.WriteAllText("input.html", html);
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
converter.SaveAsPDF("output.pdf");

//IronPDF(string -> PDF):
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
' Nutrient .NET SDK (string -> file -> PDF):
File.WriteAllText("input.html", html)
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML)
converter.SaveAsPDF("output.pdf")

' IronPDF(string -> PDF):
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

비동기 작업이 필요한 경우, IronPDF에서는 RenderHtmlAsPdfAsync()와 같은 비동기 변형을 제공합니다.

외부 브라우저 의존성

GdPicture의 HTML 렌더러는 시스템에 설치된 Chrome 또는 Edge(또는 SetWebBrowserPath을 통해 설정한 휴대용 경로)에 의존합니다. IronPDF는 자체 내장 Chromium을 제공합니다:

// Nutrient .NET SDK: optionally point to a portable Chrome
converter.SetWebBrowserPath(@"C:\Tools\chrome\chrome.exe");

// IronPDF: nothing to configure
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient .NET SDK: optionally point to a portable Chrome
converter.SetWebBrowserPath(@"C:\Tools\chrome\chrome.exe");

// IronPDF: nothing to configure
var pdf = renderer.RenderHtmlAsPdf(html);
' Nutrient .NET SDK: optionally point to a portable Chrome
converter.SetWebBrowserPath("C:\Tools\chrome\chrome.exe")

' IronPDF: nothing to configure
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

구성 패턴 변경

GdPicture는 변환기(HTML 페이지 너비/높이 인치, 개별 여백)의 속성 값으로 레이아웃 설정을 노출합니다. IronPDF는 RenderingOptions 가방에 이름이 지정된 용지 크기로 그룹화합니다:

// Nutrient .NET SDK: properties on the converter (inches)
using var converter = new GdPictureDocumentConverter();
converter.HtmlPageWidth  = 8.27f;   // A4 width  (inches)
converter.HtmlPageHeight = 11.69f;  // A4 height (inches)
converter.HtmlMarginTop = 0.78f;
converter.HtmlMarginBottom = 0.78f;
converter.HtmlMarginLeft = 0.78f;
converter.HtmlMarginRight = 0.78f;

// IronPDF: properties on RenderingOptions (millimetres)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient .NET SDK: properties on the converter (inches)
using var converter = new GdPictureDocumentConverter();
converter.HtmlPageWidth  = 8.27f;   // A4 width  (inches)
converter.HtmlPageHeight = 11.69f;  // A4 height (inches)
converter.HtmlMarginTop = 0.78f;
converter.HtmlMarginBottom = 0.78f;
converter.HtmlMarginLeft = 0.78f;
converter.HtmlMarginRight = 0.78f;

// IronPDF: properties on RenderingOptions (millimetres)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
Imports GdPicture14
Imports IronPdf

' Nutrient .NET SDK: properties on the converter (inches)
Using converter As New GdPictureDocumentConverter()
    converter.HtmlPageWidth = 8.27F   ' A4 width  (inches)
    converter.HtmlPageHeight = 11.69F ' A4 height (inches)
    converter.HtmlMarginTop = 0.78F
    converter.HtmlMarginBottom = 0.78F
    converter.HtmlMarginLeft = 0.78F
    converter.HtmlMarginRight = 0.78F
End Using

' IronPDF: properties on RenderingOptions (millimetres)
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

절차적 워터마크에서 HTML 워터마크로

원시 그리기 호출을 단일 HTML/CSS 문자열로 교체하십시오:

// Nutrient .NET SDK: SetFillAlpha + SetTextSize + DrawTextBox in a per-page loop
pdf.SetFillAlpha(128);
pdf.SetTextSize(48);
pdf.SetOriginRotationInDegrees(45);
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
    PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
    PdfVerticalAlignment.PdfVerticalAlignmentMiddle);

// IronPDF: one HTML/CSS string
pdf.ApplyWatermark("<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>",
    45, VerticalAlignment.Middle, HorizontalAlignment.Center);
// Nutrient .NET SDK: SetFillAlpha + SetTextSize + DrawTextBox in a per-page loop
pdf.SetFillAlpha(128);
pdf.SetTextSize(48);
pdf.SetOriginRotationInDegrees(45);
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
    PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
    PdfVerticalAlignment.PdfVerticalAlignmentMiddle);

// IronPDF: one HTML/CSS string
pdf.ApplyWatermark("<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>",
    45, VerticalAlignment.Middle, HorizontalAlignment.Center);
' Nutrient .NET SDK: SetFillAlpha + SetTextSize + DrawTextBox in a per-page loop
pdf.SetFillAlpha(128)
pdf.SetTextSize(48)
pdf.SetOriginRotationInDegrees(45)
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL", PdfHorizontalAlignment.PdfHorizontalAlignmentCenter, PdfVerticalAlignment.PdfVerticalAlignmentMiddle)

' IronPDF: one HTML/CSS string
pdf.ApplyWatermark("<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>", 45, VerticalAlignment.Middle, HorizontalAlignment.Center)
$vbLabelText   $csharpLabel

페이지 번호 처리

GdPicture는 일급 헤더/풋터 모델이 없습니다 — 페이지 번호는 루프에서 페이지별로 그려집니다. IronPDF는 내장된 {page} / {total-pages} 자리표시를 제공합니다:

// Nutrient .NET SDK: per-page DrawText loop (1-based)
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
    pdf.SelectPage(i);
    pdf.DrawText(font, x, y, $"Page {i} of {pdf.GetPageCount()}");
}

// IronPDF: built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "Page {page} of {total-pages}"
};
// Nutrient .NET SDK: per-page DrawText loop (1-based)
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
    pdf.SelectPage(i);
    pdf.DrawText(font, x, y, $"Page {i} of {pdf.GetPageCount()}");
}

// IronPDF: built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "Page {page} of {total-pages}"
};
' Nutrient .NET SDK: per-page DrawText loop (1-based)
For i As Integer = 1 To pdf.GetPageCount()
    pdf.SelectPage(i)
    pdf.DrawText(font, x, y, $"Page {i} of {pdf.GetPageCount()}")
Next

' IronPDF: built-in placeholders
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "Page {page} of {total-pages}"
}
$vbLabelText   $csharpLabel

페이지 색인화

GdPicture는 1-기반입니다 (SelectPage(1)는 첫 번째 페이지입니다).IronPDFpdf.Pagespdf.RemovePages(int)0-기반입니다. 오차-기준은 가장 일반적인 포팅 버그입니다:

// Nutrient .NET SDK (1-based):
pdf.SelectPage(1);
pdf.DeletePage();

//IronPDF(0-based):
pdf.RemovePages(0);
// Nutrient .NET SDK (1-based):
pdf.SelectPage(1);
pdf.DeletePage();

//IronPDF(0-based):
pdf.RemovePages(0);
' Nutrient .NET SDK (1-based):
pdf.SelectPage(1)
pdf.DeletePage()

' IronPDF(0-based):
pdf.RemovePages(0)
$vbLabelText   $csharpLabel

문제 해결

이슈 1: GdPictureDocumentConverter 찾을 수 없음

문제: IronPDF에 GdPictureDocumentConverter 클래스가 존재하지 않습니다.

해결책: HTML/URL → PDF를 위한 ChromePdfRenderer을 사용하세요:

// Nutrient .NET SDK
using var converter = new GdPictureDocumentConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// Nutrient .NET SDK
using var converter = new GdPictureDocumentConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
Imports GdPicture14
Imports IronPdf

' Nutrient .NET SDK
Using converter As New GdPictureDocumentConverter()
    ' Your code here
End Using

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

이슈 2: GdPicturePDF 찾을 수 없음

문제: IronPDF에 GdPicturePDF 클래스가 존재하지 않습니다.

해결책: PdfDocument을 사용하세요:

// Nutrient .NET SDK
using var pdf = new GdPicturePDF();
pdf.LoadFromFile("input.pdf");

// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
// Nutrient .NET SDK
using var pdf = new GdPicturePDF();
pdf.LoadFromFile("input.pdf");

// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
Imports GdPicture14
Imports IronPdf

' Nutrient .NET SDK
Using pdf As New GdPicturePDF()
    pdf.LoadFromFile("input.pdf")
End Using

' IronPDF
Dim pdfDocument = PdfDocument.FromFile("input.pdf")
$vbLabelText   $csharpLabel

이슈 3: DrawTextBox / SetFillAlpha 찾을 수 없음

문제: IronPDF에는 없는 원시 그리기 호출.

해결책: HTML 기반 워터마크를 사용하세요:

// Nutrient .NET SDK
pdf.SetFillAlpha(128);
pdf.DrawTextBox(font, 100, 300, 500, 400, "DRAFT",
    PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
    PdfVerticalAlignment.PdfVerticalAlignmentMiddle);

// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>",
    45, VerticalAlignment.Middle, HorizontalAlignment.Center);
// Nutrient .NET SDK
pdf.SetFillAlpha(128);
pdf.DrawTextBox(font, 100, 300, 500, 400, "DRAFT",
    PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
    PdfVerticalAlignment.PdfVerticalAlignmentMiddle);

// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>",
    45, VerticalAlignment.Middle, HorizontalAlignment.Center);
' Nutrient .NET SDK
pdf.SetFillAlpha(128)
pdf.DrawTextBox(font, 100, 300, 500, 400, "DRAFT", PdfHorizontalAlignment.PdfHorizontalAlignmentCenter, PdfVerticalAlignment.PdfVerticalAlignmentMiddle)

' IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>", 45, VerticalAlignment.Middle, HorizontalAlignment.Center)
$vbLabelText   $csharpLabel

이슈 4: CombineToPDF 찾을 수 없음

문제: 경로 기반 결합 방법이 존재하지 않습니다.

해결책: 각 PDF를 PdfDocument으로 로드하고 정적 PdfDocument.Merge()을 사용하세요:

// Nutrient .NET SDK
converter.CombineToPDF(paths, "merged.pdf", PdfConformance.PDF);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
// Nutrient .NET SDK
converter.CombineToPDF(paths, "merged.pdf", PdfConformance.PDF);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
' Nutrient .NET SDK
converter.CombineToPDF(paths, "merged.pdf", PdfConformance.PDF)

' IronPDF
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

이슈 5: 페이지 인덱스의 오프셋

문제: GdPicture는 1 기반 페이지 인덱스를 사용합니다; IronPDF는 0 기반을 사용합니다. SelectPage(1)pdf.Pages[1]로 직접 포트하면 첫 번째 페이지가 건너뛰어집니다.

해결 방안: 페이지 인덱스를 포팅할 때는 1을 빼십시오:

// Nutrient .NET SDK (first page)
pdf.SelectPage(1);

//IronPDF(first page)
var firstPage = pdf.Pages[0];
// Nutrient .NET SDK (first page)
pdf.SelectPage(1);

//IronPDF(first page)
var firstPage = pdf.Pages[0];
' Nutrient .NET SDK (first page)
pdf.SelectPage(1)

' IronPDF(first page)
Dim firstPage = pdf.Pages(0)
$vbLabelText   $csharpLabel

마이그레이션 체크리스트

사전 마이그레이션

  • 코드베이스에 있는 GdPicture / PSPDFKit / Nutrient 사용 인벤토리
  • 기존 GdPicture 코드에서 1 기반 대 0 기반 페이지 인덱싱 주의
  • GdPictureDocumentConverter에 설정된 목록 구성(HTML 페이지 치수, 여백)
  • 워터마크와 헤더를 위한 절차적 드로잉 식별(SetFillAlpha, DrawTextBox)
  • 인덱스 기반 접근을 사용하는 폼 필드 코드를 검토(GetFormFieldName(i)) -IronPDF라이센스 키를 받으세요

패키지 변경 사항

  • GdPicture NuGet 패키지 제거(및 GdPicture.WPF / GdPicture.WinForms이(가) 존재하면 함께)
  • 구형 PSPDFKit.NET 패키지가 존재하면 제거하세요
  • IronPdf NuGet Install-Package: dotnet add package IronPdf
  • 네임스페이스 가져오기 업데이트(using GdPicture14;using IronPdf;)

코드 변경 사항

  • 시작 시 라이선스 키 구성 추가
  • HTML/URL → PDF를 위한 new GdPictureDocumentConverter()new ChromePdfRenderer()으로 교체하세요
  • new GdPicturePDF() + LoadFromFilePdfDocument.FromFile()으로 교체하세요
  • converter.CombineToPDF(paths, ...)PdfDocument.Merge()으로 교체하세요
  • 절차적 워터마크 드로우 호출을 pdf.ApplyWatermark(html, ...)으로 변환하세요
  • 변환기 속성을 RenderingOptions으로 교체하세요 (이름이 지정된 용지 크기, mm 여백)
  • 헤더/풋터를 HtmlHeaderFooter로 업데이트하여 {page} / {total-pages} 토큰과 함께
  • 전체에서 1 기반 페이지 인덱스를 0 기반으로 변환

마이그레이션 이후

  • GdPicture 용으로만 존재하는 경우 배포 이미지에서 시스템 Chrome / Edge 의존성 제거
  • PDF 출력 비교 회귀 테스트 실행
  • 페이지 번호가 있는 페이지 머리글/바닥글 확인
  • 워터마크 렌더링 테스트
  • CI/CD 파이프라인 업데이트

참고해 주세요Nutrient, PSPDFKit, GdPicture, 그리고 ORPALIS는 각각의 소유주의 상표입니다. 이 사이트는 Nutrient, PSPDFKit, GdPicture, 또는 ORPALIS와 제휴, 승인 또는 후원 관계가 없습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

Curtis Chau
기술 문서 작성자

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

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

아이언 서포트 팀

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