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

C#에서 Easy PDF SDK에서 IronPDF로 마이그레이션하는 방법

Easy PDF SDK는 현대 개발 환경에서 중요한 배포 및 유지보수 문제를 일으키는 여러 레거시 기술에 의존하고 있습니다.

일반적인Easy PDF SDK배포 문제

개발자는 Easy PDF SDK를 사용할 때 자주 이러한 문제에 직면합니다:

  • bcl.easypdf.interop.easypdfprinter.dll error loading
  • COM object that has been separated from its underlying RCW cannot be used
  • Timeout expired waiting for print job to complete
  • The printer operation failed because the service is not running
  • Error: Access denied (인터랙티브 세션 필요)
  • Cannot find printer: BCL easyPDF Printer

이 오류는 Easy PDF SDK의 기본 아키텍처에서 비롯됩니다—가상 프린터 드라이버, COM 상호운용성, 그리고 현대 서버 환경에는 존재하지 않는 상호작용 Windows 세션을 요구하기 때문입니다.

Easy PDF SDKvs. IronPDF: 핵심 차이점

기능 Easy PDF SDK IronPDF
플랫폼 Windows 전용 Windows, Linux, macOS, Docker
Office 의존성 필요함 없음
설치 복잡한 MSI + 프린터 드라이버 + COM 간단한 NuGet 패키지
서버 지원 대화형 세션 필요 헤드리스 실행
HTML 렌더링 기본적 (Office 기반) 전체 Chromium (CSS3, JS)
.NET 지원 제한된 .NET Core 전체 .NET 5/6/7/8/9
비동기 패턴 콜백 기반 네이티브 async/await
컨테이너 지원 실행할 수 없음 전체 Docker/Kubernetes

플랫폼 제한사항

Easy PDF SDK는 Windows 시스템에 독점적으로 의존하며, Linux, macOS 또는 Docker와 같은 컨테이너화된 환경에 대한 지원을 배제하는 Microsoft Office 설치를 필요로 합니다. 이러한 의존성 때문에 서버 설정이 번거로워지며, 다양한 플랫폼의 DevOps를 실천하거나 배포에 컨테이너를 사용하는 팀에 Windows 환경으로의 서비스 채택을 제한합니다—이는 상당한 제약입니다.

이전 준비

필수 조건

환경이 다음 요구 사항을 충족하는지 확인하세요:

  • .NET Framework 4.6.2+ 또는 .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ 또는 VS Code와 C# 확장
  • NuGet 패키지 관리자 접근 -IronPDF라이선스 키 (ironpdf.com에서 무료 체험판 제공)

Easy PDF SDK사용 감사

솔루션 디렉토리에서 다음 명령어를 실행하여 모든Easy PDF SDK참조를 식별하세요:

# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .

# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .

# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .

# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .

# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .

# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .

# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
SHELL

예상해야 할 주요 변경사항

Easy PDF SDK 패턴 변경 필요
new Printer() ChromePdfRenderer 사용
PrintOfficeDocToPDF() 다르게 처리되는 Office 변환
RenderHTMLToPDF() RenderHtmlAsPdf()
COM 상호운용성 참조 완전히 제거
프린터 드라이버 설정 필요 없음
BeginPrintToFile() 콜백 네이티브 async/await
상호작용 세션 요구 사항 헤드리스 실행
1-based 페이지 색인 생성 0 기반 인덱싱
초 단위 타임아웃 밀리초 단위 타임아웃

단계별 마이그레이션 프로세스

1단계:Easy PDF SDK제거

Easy PDF SDK는 보통 MSI 설치 프로그램, 수동 DLL 참조 또는 GAC 등록을 통해 설치됩니다. 모든 참조를 제거하십시오:

  1. 프로그램 및 기능에서 BCL EasyPDF SDK 제거
  2. 프로젝트에서 DLL 참조 제거
  3. COM 상호운용 참조 제거
  4. GAC 항목 정리(있을 경우)

2단계:IronPDF설치

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

또는 패키지 관리자 콘솔을 통해:

Install-Package IronPdf

3단계: 네임스페이스 참조 업데이트

Easy PDF SDK 네임스페이스를 IronPDF로 교체하십시오:

// Remove these
using BCL.easyPDF;
using BCL.easyPDF.Interop;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.Printer;

// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using BCL.easyPDF;
using BCL.easyPDF.Interop;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.Printer;

// Add these
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

완전한 API 마이그레이션 참조

핵심 클래스 매핑

Easy PDF SDK 클래스 IronPDF 동등
Printer ChromePdfRenderer
PDFDocument PdfDocument
HTMLConverter ChromePdfRenderer
PrinterConfiguration ChromePdfRenderOptions
PageOrientation PdfPaperOrientation
PageSize PdfPaperSize
SecurityHandler PdfDocument.SecuritySettings

PDF 생성 메서드

Easy PDF SDK 메서드 IronPDF 메소드
printer.RenderHTMLToPDF(html, path) renderer.RenderHtmlAsPdf(html).SaveAs(path)
printer.RenderUrlToPDF(url, path) renderer.RenderUrlAsPdf(url).SaveAs(path)
htmlConverter.ConvertHTML(html, doc) renderer.RenderHtmlAsPdf(html)
htmlConverter.ConvertURL(url, doc) renderer.RenderUrlAsPdf(url)

PDF 조작 메서드

Easy PDF SDK 메서드 IronPDF 메소드
doc.Append(doc2) PdfDocument.Merge(pdf1, pdf2)
doc.ExtractPages(start, end) pdf.CopyPages(start, end)
doc.DeletePage(index) pdf.RemovePage(index)
doc.GetPageCount() pdf.PageCount
doc.Save(path) pdf.SaveAs(path)
doc.Close() pdf.Dispose() 또는 using
doc.ExtractText() pdf.ExtractAllText()

구성 옵션

Easy PDF SDK 옵션 IronPDF 옵션
config.TimeOut RenderingOptions.Timeout
config.PageOrientation = Landscape RenderingOptions.PaperOrientation = Landscape
config.PageSize = A4 RenderingOptions.PaperSize = PdfPaperSize.A4
config.MarginTop/Bottom/Left/Right RenderingOptions.MarginTop

코드 마이그레이션 예제

HTML 문자열에서 PDF로

Easy PDF SDK 구현:

// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
        pdf.Save("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
        pdf.Save("output.pdf");
        pdf.Close();
    }
}
Imports BCL.EasyPDF
Imports System

Class Program
    Shared Sub Main()
        Dim pdf As New PDFDocument()
        Dim htmlConverter As New HTMLConverter()
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf)
        pdf.Save("output.pdf")
        pdf.Close()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 구현:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF는 별도의 HTMLConverter 클래스를 제거하고 수동 Close() 호출을 제거하여 더 간결하고 유지 관리가 용이한 코드를 제공합니다.

URL을 PDF로 변환

Easy PDF SDK 구현:

// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertURL("https://example.com", pdf);
        pdf.Save("webpage.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertURL("https://example.com", pdf);
        pdf.Save("webpage.pdf");
        pdf.Close();
    }
}
Imports BCL.EasyPDF
Imports System

Module Program
    Sub Main()
        Dim pdf As New PDFDocument()
        Dim htmlConverter As New HTMLConverter()
        htmlConverter.ConvertURL("https://example.com", pdf)
        pdf.Save("webpage.pdf")
        pdf.Close()
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 구현:

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

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

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

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

여러 PDF 병합

Easy PDF SDK 구현:

// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = new PDFDocument("document1.pdf");
        var pdf2 = new PDFDocument("document2.pdf");
        pdf1.Append(pdf2);
        pdf1.Save("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = new PDFDocument("document1.pdf");
        var pdf2 = new PDFDocument("document2.pdf");
        pdf1.Append(pdf2);
        pdf1.Save("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
Imports BCL.EasyPDF
Imports System

Module Program
    Sub Main()
        Dim pdf1 As New PDFDocument("document1.pdf")
        Dim pdf2 As New PDFDocument("document2.pdf")
        pdf1.Append(pdf2)
        pdf1.Save("merged.pdf")
        pdf1.Close()
        pdf2.Close()
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 구현:

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

class Program
{
    static void Main()
    {
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim pdfs = New List(Of PdfDocument) From {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        }
        Dim merged = PdfDocument.Merge(pdfs)
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF의 정적 Merge 메서드는 여러 문서를 직접 수용하여 수동 Append 루프 패턴을 제거합니다.

비밀번호 보호

IronPDF 구현:

using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")

' Set security
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit

pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

머리말과 바닥글

Easy PDF SDK에는 네이티브 머리글/바닥글 지원이 없습니다 - 머리글과 바닥글은 소스 HTML에 포함되어야 합니다. IronPDF는 전용 기능을 제공합니다:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    .DrawDividerLine = True,
    .MaxHeight = 30
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    .DrawDividerLine = True,
    .MaxHeight = 25
}

Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
pdf.SaveAs("with_headers.pdf")
$vbLabelText   $csharpLabel

더 많은 옵션은 헤더 및 푸터 문서를 참조하세요.

비동기 PDF 생성

Easy PDF SDK는 콜백 기반 비동기 패턴을 사용합니다. IronPDF는 네이티브 async/await를 지원합니다:

Easy PDF SDK 구현:

using BCL.easyPDF;

Printer printer = new Printer();

// BCL uses callback-based async
printer.BeginPrintToFile(
    "https://example.com",
    "output.pdf",
    OnPrintComplete,
    OnPrintError
);

Console.ReadLine();
printer.Dispose();
using BCL.easyPDF;

Printer printer = new Printer();

// BCL uses callback-based async
printer.BeginPrintToFile(
    "https://example.com",
    "output.pdf",
    OnPrintComplete,
    OnPrintError
);

Console.ReadLine();
printer.Dispose();
Imports BCL.easyPDF

Dim printer As New Printer()

' BCL uses callback-based async
printer.BeginPrintToFile( _
    "https://example.com", _
    "output.pdf", _
    AddressOf OnPrintComplete, _
    AddressOf OnPrintError _
)

Console.ReadLine()
printer.Dispose()
$vbLabelText   $csharpLabel

IronPDF 구현:

using IronPdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var renderer = new ChromePdfRenderer();

        // Native async/await
        var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
        await pdf.SaveAsAsync("output.pdf");

        Console.WriteLine("PDF created: output.pdf");
    }
}
using IronPdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var renderer = new ChromePdfRenderer();

        // Native async/await
        var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
        await pdf.SaveAsAsync("output.pdf");

        Console.WriteLine("PDF created: output.pdf");
    }
}
Imports IronPdf
Imports System.Threading.Tasks

Class Program
    Shared Async Function Main() As Task
        Dim renderer = New ChromePdfRenderer()

        ' Native async/await
        Dim pdf = Await renderer.RenderUrlAsPdfAsync("https://example.com")
        Await pdf.SaveAsAsync("output.pdf")

        Console.WriteLine("PDF created: output.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

중요한 마이그레이션 노트

페이지 인덱스 변경

Easy PDF SDK는 1 기반 인덱싱을 사용합니다. IronPDF는 0-based 색인을 사용합니다:

// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);

// IronPDF: 0-based
pdf.CopyPages(0, 4);
// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);

// IronPDF: 0-based
pdf.CopyPages(0, 4);
' Easy PDF SDK: 1-based
doc.ExtractPages(1, 5)

' IronPDF: 0-based
pdf.CopyPages(0, 4)
$vbLabelText   $csharpLabel

밀리초 단위 타임아웃

Easy PDF SDK는 타임아웃 값을 초 단위로 사용합니다. IronPDF는 밀리초를 사용합니다:

// Easy PDF SDK: seconds
config.TimeOut = 120;

// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
// Easy PDF SDK: seconds
config.TimeOut = 120;

// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
' Easy PDF SDK: seconds
config.TimeOut = 120

' IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000
$vbLabelText   $csharpLabel

ASP.NET Core 통합

Easy PDF SDK는 상호작용 세션 요구 사항 때문에 웹 컨텍스트에서 어려움을 겪습니다.

IronPDF 패턴:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class PdfController
    Inherits ControllerBase

    <HttpGet("generate")>
    Public Function GeneratePdf() As IActionResult
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")

        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Function

    <HttpGet("generate-async")>
    Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")

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

Docker 배포

Easy PDF SDK는 Docker 컨테이너에서 실행될 수 없습니다 - Windows 컨테이너, Microsoft Office, 가상 프린터 드라이버 및 상호작용 데스크탑 세션이 필요합니다. 이는 본질적으로 컨테이너화와 호환되지 않습니다.

IronPDF Docker 구성:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

# Install Chromium dependencies
RUN apt-get update && apt-get install -y \
    libc6 libgdiplus libx11-6 libxcomposite1 \
    libxdamage1 libxrandr2 libxss1 libxtst6 \
    libnss3 libatk-bridge2.0-0 libgtk-3-0 \
    libgbm1 libasound2 fonts-liberation \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "MyApp.dll"]

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

문제: 프린터를 찾을 수 없음

증상: Cannot find printer: BCL easyPDF Printer

해결책: IronPDF는 프린터 드라이버가 필요 없습니다:

// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

문제: COM 상호운용 오류

증상: DLL error loading 또는 RCW 오류

해결책: 모든 COM 참조를 제거하고 IronPDF의 관리 API를 사용하십시오.

문제: 서버에서 타임아웃

증상: 웹 서버에서 PDF 생성이 멈춤

해결책: IronPDF는 상호작용 세션 없이 헤드리스로 실행됩니다:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.Timeout = 60000 ' Reliable timeout
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

문제: 배경이 인쇄되지 않음

증상: CSS 배경 누락

해결책: 배경 인쇄 활성화:

renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = True
$vbLabelText   $csharpLabel

마이그레이션 후 점검 목록

코드 마이그레이션을 완료한 후, 다음을 확인하십시오:

  • IronPDF의 Chromium 엔진으로 PDF 출력 품질 확인
  • 복잡한 HTML/CSS로 모든 엣지 케이스 테스트
  • 서버 배포가 상호 작용 없는 세션에서도 작동하는지 검증합니다
  • Docker/컨테이너 배포 테스트
  • 배포에서 BCL EasyPDF 설치 파일 제거
  • 서버에서 Office 설치 제거 (더 이상 필요하지 않음)
  • 새로운 NuGet 패키지를 사용하여 CI/CD 파이프라인 업데이트

PDF 인프라의 미래 대비

.NET 10이 곧 도래하고 C# 14가 새로운 언어 기능을 도입함에 따라, 크로스 플랫폼 PDF 라이브러리를 선택하는 것은 진화하는 배포 모델과의 호환성을 보장합니다. IronPDF의 Linux, Docker 및 클라우드 네이티브 아키텍처 지원은 Windows 전용 Easy PDF SDK의 제한 없이 2025년과 2026년까지 프로젝트가 확장되며 투자 수익을 가져다줍니다.

추가 리소스


Easy PDF SDK에서 IronPDF로의 마이그레이션은 가상 프린터 의존성, COM 상호 운용성 문제, Windows 전용 제한을 제거합니다. Chromium 기반 렌더링으로의 전환은 Docker, Kubernetes 및 Easy PDF SDK의 구형 아키텍처로 인해 이전에는 불가능했던 클라우드 환경에 배포할 수 있도록 하면서 우수한 CSS3 및 JavaScript 지원을 제공합니다.

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

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

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

아이언 서포트 팀

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