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

ABCpdf for .NET에서 IronPDF로 마이그레이션하는 방법

ABCpdf for .NET에서 IronPDF로 전환하는 것은 라이선스 간소화, 현대적인 문서화, 네이티브 크로스 플랫폼 지원을 목표로 하는 개발 팀에게 전략적인 업그레이드입니다. 이 철저한 가이드는 실제 시나리오의 API 매핑 및 코드 변환 예제를 포함한 단계별 마이그레이션 경로를 제공합니다.

.NET Framework 4.6.2를 사용하든 .NET 9 및 2026년 이후를 목표로 하든, 이 ABCpdf 마이그레이션 가이드는 IronPDF의 Chrome 기반 렌더링 엔진으로의 쉬운 전환을 보장합니다.

ABCpdf 마이그레이션을 고려해야 하는 이유?

WebSupergoo의 ABCpdf는 수년간 능력 있는 .NET PDF 라이브러리였습니다. 그러나 여러 요인으로 인해 IronPDF는 2025년 및 2026년으로 프로젝트를 계획 중인 현대 개발 팀에게 매력적인 대안이 됩니다.

라이선스 복잡성

ABCpdf는 다단계 라이선스 모델을 사용하여 처리하기 혼란스러울 수 있습니다. 가격은 $349부터 시작하지만, 기능, 서버 배포 및 사용 사례에 따라 증가합니다. 많은 개발자가 프로젝트 예산을 계획할 때 이러한 라이선스 미로가 상당한 행정적 부담으로 보고 있습니다.

Windows 우선 아키텍처

ABCpdf는 크로스 플랫폼 지원을 추가한 반면, 역사적으로 Windows 중심 설계가 종종 워크플로우에서 나타날 수 있습니다. Linux 컨테이너, Docker 환경 또는 macOS 개발 환경을 목표로 하는 개발자들은 프로젝트 계획 시 예상하지 못한 마찰을 겪을 수 있습니다.

문서 스타일

ABCpdf의 문서는 철저하지만, 현대적인 API 문서화 표준에 비해 다소 구식으로 느껴질 수 있습니다. 새로운 사용자는 특히 새로운 .NET 버전으로 작업할 때 필요한 정확한 예제를 찾기 어려워합니다.

엔진 구성 오버헤드

ABCpdf는 명시적 엔진 선택(Gecko, Trident, 또는 Chrome)과 Clear() 호출과 함께 수동 리소스 관리를 요구합니다. 이는 현대 개발자가 피하고 싶은 보일러플레이트 코드를 모든 PDF 작업에 추가합니다.

IronPDF대 ABCpdf: 기능 비교

다음 비교 표는 두 .NET PDF 라이브러리 간의 핵심 차이점을 강조합니다:

기능 ABCPdf for .NET IronPDF
렌더링 엔진 Gecko/Trident/Chrome(구성 가능) 완전한 Chromium (CSS3, JavaScript)
크로스 플랫폼 나중에 추가された Windows 중심 원주 Windows, Linux, macOS, Docker
라이센스 모델 $349+에서 시작하는 복잡한 계층 가격 간단하고 투명한 가격
.NET 지원 .NET Framework 중심 Framework 4.6.2에서 .NET 9+
리소스 관리 수동 doc.Clear() 필요 IDisposable과 using 문장
라이선스 설정 종종 레지스트리를 사용 간단한 코드 기반 라이선스 키
문서화 구식 스타일 철저한 예제를 제공하는 현대적인 문서화

마이그레이션을 시작하기 전에

필수 조건

개발 환경이 다음 요구 사항을 충족하는지 확인하십시오:

  • .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5-9
  • Visual Studio 2019+ 또는 JetBrains Rider
  • NuGet 패키지 관리자 접근
  • IronPDF 라이선스 키 (무료 체험판 가능)

모든 ABCpdf 참조 찾기

솔루션 디렉터리에서 다음 명령을 실행하여 ABCpdf for .NET을 사용하는 모든 파일을 찾습니다:

grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
SHELL

이 감사는 수정이 필요한 모든 파일을 식별하여 완전한 마이그레이션 범위를 보장합니다.

예상해야 할 주요 변경사항

ABCpdf for .NET과IronPDF간의 구조적 차이를 이해하면 마이그레이션 중 놀라운 일이 발생하지 않도록 합니다:

카테고리 ABCpdf 동작 IronPDF동작 마이그레이션 조치
객체 모델 Doc 클래스는 중심입니다 ChromePdfRenderer + PdfDocument 문서에서 렌더링을 분리
리소스 정리 수동 doc.Clear() IDisposable 패턴 using 문장 사용
엔진 선택 doc.HtmlOptions.Engine = EngineType.Chrome 내장된 Chrome 엔진 설정 제거
페이지 인덱싱 1-기반 (doc.Page = 1) 0-기반 (pdf.Pages[0]) 인덱스 참조 조정
좌표 점 기반 doc.Rect CSS 기반의 여백 CSS 또는 RenderingOptions 사용

빠른 시작: 5분 마이그레이션

1단계: NuGet 패키지 업데이트

# Remove ABCpdf
dotnet remove package ABCpdf

# Install IronPDF
dotnet add package IronPdf
# Remove ABCpdf
dotnet remove package ABCpdf

# Install IronPDF
dotnet add package IronPdf
SHELL

2단계: 라이센스 키 설정

IronPDF 작업 전에 애플리케이션 시작 시 이 코드를 추가하세요:

// 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

3단계: 전역 찾기 및 바꾸기

코드 베이스 전체에서 모든 네임스페이스 참조 업데이트:

찾기 바꾸기
using WebSupergoo.ABCpdf13; using IronPdf;
using WebSupergoo.ABCpdf13.Objects; using IronPdf;
using WebSupergoo.ABCpdf12; using IronPdf;
using WebSupergoo.ABCpdf11; using IronPdf;

완전한 API 참조

문서 생성 방법

다음 표는ABCPdf for .NET메소드를 IronPDF와 매핑합니다:

ABCpdf 메소드 IronPDF 메소드
new Doc() new ChromePdfRenderer()
doc.AddImageUrl(url) renderer.RenderUrlAsPdf(url)
doc.AddImageHtml(html) renderer.RenderHtmlAsPdf(html)
doc.AddImageFile(path) renderer.RenderHtmlFileAsPdf(path)
doc.Read(path) PdfDocument.FromFile(path)
doc.Save(path) pdf.SaveAs(path)
doc.GetData() pdf.BinaryData
doc.Clear() using 문장 사용

페이지 조작 방법

ABCpdf 메소드 IronPDF 메소드
doc.PageCount pdf.PageCount
doc.Page = n pdf.Pages[n-1]
doc.Delete(pageId) pdf.RemovePages(index)
doc.Append(otherDoc) PdfDocument.Merge(pdf1, pdf2)
doc.Rect.Inset(x, y) RenderingOptions.MarginTop/Bottom/Left/Right

보안 및 암호화 방법

ABCpdf 메소드 IronPDF 메소드
doc.Encryption.Password pdf.SecuritySettings.OwnerPassword
doc.Encryption.CanPrint pdf.SecuritySettings.AllowUserPrinting
doc.Encryption.CanCopy pdf.SecuritySettings.AllowUserCopyPasteContent
doc.SetInfo("Title", value) pdf.MetaData.Title

코드 마이그레이션 예제

예제 1: URL에서 HTML을 PDF로 변환

이 예제는 웹 페이지를 PDF로 변환하는 과정을 보여주며, 이는 가장 일반적인 PDF 생성 작업 중 하나입니다.

ABCpdf for .NET 구현:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageUrl("https://www.example.com");
        doc.Save("output.pdf");
        doc.Clear();
    }
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageUrl("https://www.example.com");
        doc.Save("output.pdf");
        doc.Clear();
    }
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Class Program
    Shared Sub Main()
        Dim doc As New Doc()
        doc.HtmlOptions.Engine = EngineType.Chrome
        doc.AddImageUrl("https://www.example.com")
        doc.Save("output.pdf")
        doc.Clear()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 구현:

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
Imports System
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF의 접근 방식은 명시적인 엔진 설정 및 수동 정리의 필요성을 없애고, 전체 Chrome 렌더링 기능을 유지하면서 코드의 복잡성을 줄입니다.

예제 2: HTML 문자열을 PDF로 변환

HTML 문자열을 PDF로 변환하는 것은 동적 보고서와 문서를 생성하는 데 필수적입니다.

ABCpdf for .NET 구현:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageHtml(html);
        doc.Save("output.pdf");
        doc.Clear();
    }
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageHtml(html);
        doc.Save("output.pdf");
        doc.Clear();
    }
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
        Dim doc As New Doc()
        doc.HtmlOptions.Engine = EngineType.Chrome
        doc.AddImageHtml(html)
        doc.Save("output.pdf")
        doc.Clear()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 구현:

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports System
Imports IronPdf

Module Program
    Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 버전은 기본적으로 Chrome 렌더링을 사용하여 모든 플랫폼에서 일관된 출력을 보장하며, 적은 코드 줄을 요구합니다.

예제 3: 여러 PDF 병합

여러 PDF 문서를 결합하는 것은 문서 처리 워크플로에서 자주 요구됩니다.

ABCpdf for .NET 구현:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc1 = new Doc();
        doc1.Read("document1.pdf");

        Doc doc2 = new Doc();
        doc2.Read("document2.pdf");

        doc1.Append(doc2);
        doc1.Save("merged.pdf");

        doc1.Clear();
        doc2.Clear();
    }
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc1 = new Doc();
        doc1.Read("document1.pdf");

        Doc doc2 = new Doc();
        doc2.Read("document2.pdf");

        doc1.Append(doc2);
        doc1.Save("merged.pdf");

        doc1.Clear();
        doc2.Clear();
    }
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Class Program
    Shared Sub Main()
        Dim doc1 As New Doc()
        doc1.Read("document1.pdf")

        Dim doc2 As New Doc()
        doc2.Read("document2.pdf")

        doc1.Append(doc2)
        doc1.Save("merged.pdf")

        doc1.Clear()
        doc2.Clear()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 구현:

// NuGet: Install-Package IronPdf
using System;
using System.Collections.Generic;
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 System;
using System.Collections.Generic;
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 System
Imports System.Collections.Generic
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

IronPDF의 정적 Merge 메서드는 여러 문서를 받아들이는 더 깔끔한 API를 제공하여 개별 Doc 인스턴스를 추적하고 지울 필요를 제거합니다.

예제 4: 여백을 포함한 완전한 마이그레이션 패턴

이 예제는 사용자 지정 여백으로 PDF를 생성하기 위한 전체 이전/이후 마이그레이션을 보여줍니다.

이전 (ABCpdf for .NET):

using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

public byte[] GeneratePdf(string html)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.Rect.Inset(20, 20);
    doc.AddImageHtml(html);
    byte[] data = doc.GetData();
    doc.Clear();  // Manual cleanup required
    return data;
}
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

public byte[] GeneratePdf(string html)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.Rect.Inset(20, 20);
    doc.AddImageHtml(html);
    byte[] data = doc.GetData();
    doc.Clear();  // Manual cleanup required
    return data;
}
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Public Function GeneratePdf(html As String) As Byte()
    Dim doc As New Doc()
    doc.HtmlOptions.Engine = EngineType.Chrome
    doc.Rect.Inset(20, 20)
    doc.AddImageHtml(html)
    Dim data As Byte() = doc.GetData()
    doc.Clear()  ' Manual cleanup required
    Return data
End Function
$vbLabelText   $csharpLabel

이후 (IronPDF):

using IronPdf;

public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop = 20;
    renderer.RenderingOptions.MarginBottom = 20;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    using var pdf = renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;  // Automatic cleanup with 'using'
}
using IronPdf;

public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop = 20;
    renderer.RenderingOptions.MarginBottom = 20;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    using var pdf = renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;  // Automatic cleanup with 'using'
}
Imports IronPdf

Public Function GeneratePdf(html As String) As Byte()
    Dim renderer As New ChromePdfRenderer()
    renderer.RenderingOptions.MarginTop = 20
    renderer.RenderingOptions.MarginBottom = 20
    renderer.RenderingOptions.MarginLeft = 20
    renderer.RenderingOptions.MarginRight = 20

    Using pdf = renderer.RenderHtmlAsPdf(html)
        Return pdf.BinaryData  ' Automatic cleanup with 'Using'
    End Using
End Function
$vbLabelText   $csharpLabel

고급 마이그레이션 시나리오

ASP.NET Core 웹 애플리케이션

.NET 6+으로 웹 애플리케이션을 구축하거나 2025-2026년에 .NET 10 릴리스를 계획하는 팀을 위한 권장 패턴입니다:

ABCpdf 패턴:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.AddImageHtml(request.Html);
    byte[] pdfBytes = doc.GetData();
    doc.Clear();

    return File(pdfBytes, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.AddImageHtml(request.Html);
    byte[] pdfBytes = doc.GetData();
    doc.Clear();

    return File(pdfBytes, "application/pdf", "report.pdf");
}
<HttpPost>
Public Function GeneratePdf(<FromBody> request As ReportRequest) As IActionResult
    Dim doc As New Doc()
    doc.HtmlOptions.Engine = EngineType.Chrome
    doc.AddImageHtml(request.Html)
    Dim pdfBytes As Byte() = doc.GetData()
    doc.Clear()

    Return File(pdfBytes, "application/pdf", "report.pdf")
End Function
$vbLabelText   $csharpLabel

IronPDF 패턴:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
<HttpPost>
Public Function GeneratePdf(<FromBody> request As ReportRequest) As IActionResult
    Dim renderer As New ChromePdfRenderer()
    Using pdf = renderer.RenderHtmlAsPdf(request.Html)
        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Using
End Function
$vbLabelText   $csharpLabel

비동기 PDF 생성

ABCpdf는 기본 비동기 지원이 없습니다. IronPDF는 더 나은 웹 애플리케이션 성능을 위해 비동기 메서드를 제공합니다:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
Imports IronPdf

Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
    Dim renderer As New ChromePdfRenderer()
    Using pdf = Await renderer.RenderHtmlAsPdfAsync(html)
        Return pdf.BinaryData
    End Using
End Function
$vbLabelText   $csharpLabel

의존성 주입 설정

미래 C# 14 릴리스를 호환하는 C# 12+ 패턴을 사용하여 최신 .NET 애플리케이션에서 IronPDF를 등록하세요:

// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Or create a service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}

// Register: builder.Services.AddSingleton<IPdfService, IronPdfService>();
// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Or create a service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}

// Register: builder.Services.AddSingleton<IPdfService, IronPdfService>();
Imports Microsoft.Extensions.DependencyInjection
Imports System.Threading.Tasks

' Program.vb (.NET 6+)
builder.Services.AddSingleton(Of ChromePdfRenderer)()

' Or create a service wrapper
Public Interface IPdfService
    Function GeneratePdfAsync(html As String) As Task(Of Byte())
End Interface

Public Class IronPdfService
    Implements IPdfService

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
    End Sub

    Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte()) Implements IPdfService.GeneratePdfAsync
        Using pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
            Return pdf.BinaryData
        End Using
    End Function
End Class

' Register: builder.Services.AddSingleton(Of IPdfService, IronPdfService)()
$vbLabelText   $csharpLabel

성능 최적화 팁

배치 작업을 위한 렌더러 재사용

// Good: Single renderer instance
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

// Bad: New renderer each time (slower startup)
foreach (var html in htmlList)
{
    var renderer = new ChromePdfRenderer(); // Overhead!
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
// Good: Single renderer instance
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

// Bad: New renderer each time (slower startup)
foreach (var html in htmlList)
{
    var renderer = new ChromePdfRenderer(); // Overhead!
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
Imports System

' Good: Single renderer instance
Dim renderer As New ChromePdfRenderer()
For Each html In htmlList
    Using pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs($"output_{i}.pdf")
    End Using
Next

' Bad: New renderer each time (slower startup)
For Each html In htmlList
    Dim renderer As New ChromePdfRenderer() ' Overhead!
    Using pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs($"output_{i}.pdf")
    End Using
Next
$vbLabelText   $csharpLabel

메모리 사용량 비교

시나리오 ABCPdf for .NET IronPDF
단일 10페이지 PDF ~80 MB ~50 MB
배치 100개 PDF 높음 (수동 정리 필요) ~100 MB
대형 HTML (5MB 이상) 변하기 쉬운 ~150 MB

일반적인 마이그레이션 문제 해결

PDF가 비어있음

증상: 마이그레이션 후 출력 PDF에 빈 페이지가 있습니다.

해결책: JavaScript 콘텐츠가 렌더링 전에 완전히 로드되지 않을 수 있습니다:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
// Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
// Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.RenderDelay(2000) ' Wait 2 seconds
' Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded")
$vbLabelText   $csharpLabel

머리말/꼬리말이 나타나지 않음

증상: 출력에서 TextHeader/TextFooter가 보이지 않습니다.

해결책: 머리말/꼬리말 콘텐츠를 위한 여백을 확보하세요:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 40; // mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40; // mm - leave room for footer

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Header Text",
    FontSize = 12
};
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 40; // mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40; // mm - leave room for footer

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Header Text",
    FontSize = 12
};
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 40 ' mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40 ' mm - leave room for footer

renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "Header Text",
    .FontSize = 12
}
$vbLabelText   $csharpLabel

마이그레이션 체크리스트

사전 마이그레이션

  • grep -r "WebSupergoo" --include="*.cs" .로 모든 ABCpdf 사용 감사
  • 현재 PDF 출력 요구 사항 문서화
  • 비교를 위한 샘플 PDF 출력으로 테스트 케이스 생성
  • IronPDF 라이선스 키 획득
  • 코드베이스 백업

마이그레이션 중

  • ABCpdf NuGet 패키지 제거
  • IronPdf NuGet Install-Package
  • 애플리케이션 시작 시 라이선스 키 추가
  • 모든 using 문장 업데이트
  • Doc 인스턴스화를 ChromePdfRenderer로 변환
  • doc.Clear()using 문장으로 교체
  • API 매핑에 따라 메서드 호출 업데이트
  • 좌표 기반 레이아웃을 CSS 여백으로 변환

마이그레이션 이후

  • 기존 PDF 테스트 모두 실행
  • PDF 출력 시각적 비교 (ABCpdf 대 IronPDF)
  • 스테이징에서 모든 PDF 워크플로 테스트
  • 성능 벤치마크 비교
  • ABCpdf 라이선스 구성 제거
  • CI/CD 파이프라인 종속성 업데이트
커티스 차우
기술 문서 작성자

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

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

아이언 서포트 팀

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