SelectPdf에서 IronPDF로의 마이그레이션 방법 (C#)
SelectPdf에서 IronPDF로의 마이그레이션은 오래된 렌더링 엔진을 사용하는 Windows 전용 솔루션에서 최신의, CSS3 및 JavaScript를 완벽하게 지원하는 크로스 플랫폼 라이브러리로 PDF 생성 워크플로를 변환합니다. 이 가이드는 SelectPdf가 지원할 수 없는 리눅스, Docker, Azure Functions 및 기타 클라우드 플랫폼에 배포할 수 있는 전체 단계별 마이그레이션 경로를 제공합니다.
SelectPdf에서 IronPDF로 마이그레이션해야 하는 이유
SelectPdf 이해하기
SelectPdf는 HTML 콘텐츠를 C#을 사용하여 PDF로 변환하기 위해 설계된 상업용 라이브러리입니다. 이 라이브러리는 애플리케이션 내에서 PDF 생성 기능을 원활하게 통합해야 하는 개발자를 대상으로 합니다. SelectPdf의 강점은 간단한 API에 있으며, 이를 통해 PDF 생성에 처음 접하는 사람들에게 매력적인 옵션이 됩니다.
그러나 잠재적인 사용자는 그 중요한 제한 사항을 인지해야 합니다. 크로스 플랫폼 기능을 광고하지만, SelectPdf는 Windows 환경에서만 작동합니다. 이는 Azure Functions나 Docker와 같은 컨테이너와 같은 클라우드 기반 배포 솔루션을 고려할 때 상당한 장벽을 제공합니다. 더 나아가 무료 버전은 최대 5페이지까지만 허용되며, 그 이후로는 과도한 워터마킹이 적용되어 크게 제한됩니다. SelectPdf는 구식 Blink 포크와 WebKit 기반의 아키텍처를 활용하여, CSS 그리드 및 고급 flexbox와 같은 현대 웹 기술과의 호환성 문제를 일으킵니다.
SelectPdf의 주요 제한 사항
| 문제 | 영향 | IronPDF 솔루션 |
|---|---|---|
| Windows 전용 | Linux, Docker, Azure Functions에 배포할 수 없음 | 전체 크로스 플랫폼 지원 |
| 구식 렌더링 엔진 | 현대 CSS가 실패하고 레이아웃이 깨짐 | 최신 Chromium |
| 5페이지 무료 버전 제한 | 5페이지 이후로 과도한 워터마킹 | 관대 한 체험판 |
| .NET 10 지원 없음 | 미래 대비 문제 | .NET 10 완전 지원 |
| 클라우드 배포 차단 | AWS Lambda, Azure Functions 사용 불가 | 클라우드 네이티브 |
SelectPdf vsIronPDF비교
| 기능 | SelectPdf | IronPDF |
|---|---|---|
| 플랫폼 지원 | Windows 전용 | 전체 크로스 플랫폼, 10개 이상의 배포판 |
| 최신 웹 표준 지원 | 제한적 (구식 Blink) | 전체 CSS3, 최신 Chromium |
| 최대 무료 버전 페이지 제한 | 5 페이지 | 유연함, 엄격한 제한 없음 |
| 가격 | $499부터 시작 | 투명하고 유연한 가격책정 |
| .NET 10 지원 | 없음 | 지원됨 |
| 클라우드 환경에서의 배포 | 지원되지 않음 | 완전히 지원 |
| CSS Grid | 제한적 | 지원됨 |
| Flexbox | 제한적 | 지원됨 |
| CSS Variables | 지원되지 않음 | 지원됨 |
| Docker | 지원되지 않음 | 공식 이미지 |
| Azure Functions | 지원되지 않음 | 지원됨 |
| AWS Lambda | 지원되지 않음 | 지원됨 |
.NET 10 및 C# 14 채택을 2025년 및 2026년에 계획하고 있는 팀에게, SelectPdf는 명백히 .NET 10을 지원하지 않아 미래 대비 문제를 만듭니다. IronPDF는 모든 최신 .NET 버전에 대한 완전한 지원을 제공합니다.
시작하기 전에
필수 조건
- .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9/10+
- NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
- IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요
NuGet 패키지 변경 사항
# Remove SelectPdf
dotnet remove package Select.HtmlToPdf
# Install IronPDF
dotnet add package IronPdf
# Remove SelectPdf
dotnet remove package Select.HtmlToPdf
# Install IronPDF
dotnet add package IronPdf
라이선스 구성
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
완전한 API 참조
네임스페이스 변경
// Before: SelectPdf
using SelectPdf;
// After: IronPDF
using IronPdf;
using IronPdf.Engines.Chrome;
// Before: SelectPdf
using SelectPdf;
// After: IronPDF
using IronPdf;
using IronPdf.Engines.Chrome;
' Before: SelectPdf
Imports SelectPdf
' After: IronPDF
Imports IronPdf
Imports IronPdf.Engines.Chrome
핵심 API 매핑
| SelectPdf | IronPDF | 노트 |
|---|---|---|
HtmlToPdf |
ChromePdfRenderer |
핵심 변환 클래스 |
converter.ConvertHtmlString(html) |
renderer.RenderHtmlAsPdf(html) |
HTML 문자열 변환 |
converter.ConvertUrl(url) |
renderer.RenderUrlAsPdf(url) |
URL 변환 |
doc.Save(path) |
pdf.SaveAs(path) |
파일에 저장 |
doc.Close() |
필요 없음 | IronPDF는 정리를 처리함 |
converter.Options.PdfPageSize |
renderer.RenderingOptions.PaperSize |
용지 크기 |
converter.Options.PdfPageOrientation |
renderer.RenderingOptions.PaperOrientation |
방향 |
converter.Options.MarginTop |
renderer.RenderingOptions.MarginTop |
상단 여백 |
converter.Options.MarginBottom |
renderer.RenderingOptions.MarginBottom |
하단 여백 |
converter.Options.MarginLeft |
renderer.RenderingOptions.MarginLeft |
왼쪽 여백 |
converter.Options.MarginRight |
renderer.RenderingOptions.MarginRight |
오른쪽 여백 |
PdfPageSize.A4 |
PdfPaperSize.A4 |
A4 크기 열거형 |
PdfPageOrientation.Portrait |
PdfPaperOrientation.Portrait |
세로 방향 열거형 |
PdfPageOrientation.Landscape |
PdfPaperOrientation.Landscape |
가로 방향 열거형 |
{page_number} |
{page} |
페이지 번호 플레이스홀더 |
{total_pages} |
{total-pages} |
총 페이지 플레이스홀더 |
코드 마이그레이션 예제
예제 1: HTML 문자열을 PDF로 변환
이전 (SelectPdf):
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertHtmlString(htmlContent);
doc.Save("document.pdf");
doc.Close();
Console.WriteLine("PDF generated from HTML string");
}
}
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertHtmlString(htmlContent);
doc.Save("document.pdf");
doc.Close();
Console.WriteLine("PDF generated from HTML string");
}
}
Imports SelectPdf
Imports System
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim converter As New HtmlToPdf()
Dim doc As PdfDocument = converter.ConvertHtmlString(htmlContent)
doc.Save("document.pdf")
doc.Close()
Console.WriteLine("PDF generated from HTML string")
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
Console.WriteLine("PDF generated from HTML string");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
Console.WriteLine("PDF generated from HTML string");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("document.pdf")
Console.WriteLine("PDF generated from HTML string")
End Sub
End Class
이 예제는 핵심 API 차이점을 보여줍니다. SelectPdf는 변환기 클래스로 HtmlToPdf를 사용하며, ConvertHtmlString()를 호출하여 PdfDocument를 생성하고, Save() 및 Close()로 지속시키고 정리합니다.
IronPDF는 ChromePdfRenderer와 RenderHtmlAsPdf()을 함께 사용하며, PdfDocument를 반환하여 SaveAs()으로 저장합니다. Close() 호출은 제거되었습니다—IronPDF는 자동으로 리소스 관리를 처리합니다. HTML에서 PDF로의 문서에서 포괄적인 예제를 참조하세요.
예제 2: URL에서 PDF로 변환
이전 (SelectPdf):
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertUrl("https://www.example.com");
doc.Save("output.pdf");
doc.Close();
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertUrl("https://www.example.com");
doc.Save("output.pdf");
doc.Close();
Console.WriteLine("PDF created successfully");
}
}
Imports SelectPdf
Imports System
Class Program
Shared Sub Main()
Dim converter As New HtmlToPdf()
Dim doc As PdfDocument = converter.ConvertUrl("https://www.example.com")
doc.Save("output.pdf")
doc.Close()
Console.WriteLine("PDF created successfully")
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
SelectPdf의 ConvertUrl() 메서드는 IronPDF의 RenderUrlAsPdf()와 직접적으로 매핑됩니다. 주요 차이점은 렌더링 엔진에 있습니다: SelectPdf는 최신 CSS와 잘 맞지 않는 오래된 Blink/WebKit 포크를 사용하지만, IronPDF는 CSS3 및 JavaScript를 완벽히 지원하는 최신 안정적인 Chromium을 사용합니다. 더 많은 정보를 보려면 튜토리얼을 참조하세요.
예제 3: 사용자 지정 페이지 설정 및 여백
이전 (SelectPdf):
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf converter = new HtmlToPdf();
converter.Options.PdfPageSize = PdfPageSize.A4;
converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait;
converter.Options.MarginTop = 20;
converter.Options.MarginBottom = 20;
converter.Options.MarginLeft = 20;
converter.Options.MarginRight = 20;
string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
PdfDocument doc = converter.ConvertHtmlString(html);
doc.Save("custom-settings.pdf");
doc.Close();
Console.WriteLine("PDF with custom settings created");
}
}
// NuGet: Install-Package Select.HtmlToPdf
using SelectPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf converter = new HtmlToPdf();
converter.Options.PdfPageSize = PdfPageSize.A4;
converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait;
converter.Options.MarginTop = 20;
converter.Options.MarginBottom = 20;
converter.Options.MarginLeft = 20;
converter.Options.MarginRight = 20;
string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
PdfDocument doc = converter.ConvertHtmlString(html);
doc.Save("custom-settings.pdf");
doc.Close();
Console.WriteLine("PDF with custom settings created");
}
}
Imports SelectPdf
Imports System
Module Program
Sub Main()
Dim converter As New HtmlToPdf()
converter.Options.PdfPageSize = PdfPageSize.A4
converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait
converter.Options.MarginTop = 20
converter.Options.MarginBottom = 20
converter.Options.MarginLeft = 20
converter.Options.MarginRight = 20
Dim html As String = "<html><body><h1>Custom Page Settings</h1></body></html>"
Dim doc As PdfDocument = converter.ConvertHtmlString(html)
doc.Save("custom-settings.pdf")
doc.Close()
Console.WriteLine("PDF with custom settings created")
End Sub
End Module
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom-settings.pdf");
Console.WriteLine("PDF with custom settings created");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
string html = "<html><body><h1>Custom Page Settings</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom-settings.pdf");
Console.WriteLine("PDF with custom settings created");
}
}
Imports IronPdf
Imports IronPdf.Engines.Chrome
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Dim html As String = "<html><body><h1>Custom Page Settings</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("custom-settings.pdf")
Console.WriteLine("PDF with custom settings created")
End Sub
End Module
페이지 설정 패턴은 거의 동일하며, 속성 이름 변경이 간단합니다:
converter.Options.PdfPageSize→renderer.RenderingOptions.PaperSizeconverter.Options.PdfPageOrientation→renderer.RenderingOptions.PaperOrientationPdfPageSize.A4→PdfPaperSize.A4PdfPageOrientation.Portrait→PdfPaperOrientation.Portrait
여백 속성은 동일한 이름과 단위를 유지합니다.
Windows 전용 문제점
SelectPdf의 플랫폼 제한
어떠한 마케팅 주장에도 불구하고, SelectPdf는 명확히 지원하지 않습니다:
- Linux (어떤 배포판도)
- macOS
- Docker 컨테이너
- Azure Functions
- AWS Lambda
- Google Cloud Functions
- 어떤 ARM 기반 시스템도
이는 근본적인 아키텍처 제한 사항입니다—SelectPdf는 Windows 전용 라이브러리에 의존하며 포팅할 수 없습니다.
플랫폼 지원 비교
| 플랫폼 | SelectPdf |IronPDF| | ---------- | :---: | :---: || Windows Server 2019+ | ✅ | ✅ || Windows 10/11 | ✅ | ✅ || Ubuntu 20.04+ | ❌ | ✅ || Debian 10+ | ❌ | ✅ || CentOS 7+ | ❌ | ✅ || Alpine Linux | ❌ | ✅ || Amazon Linux 2 | ❌ | ✅ || macOS 10.15+ | ❌ | ✅ || Azure App Service (Linux) | ❌ | ✅ || Azure Functions | ❌ | ✅ || AWS Lambda | ❌ | ✅ || Docker (Linux) | ❌ | ✅ || Kubernetes | ❌ | ✅ |
낡은 렌더링 엔진
CSS 기능 지원 비교
SelectPdf는 최신 웹 표준을 따라잡지 못한 오래된 Blink/WebKit 포크를 사용합니다:
| CSS 기능 | SelectPdf | IronPDF |
|---|---|---|
| CSS 그리드 | ⚠️ 부분/손상 | ✅ 전체 |
| 플렉스박스 (기본) | ✅ | ✅ |
| 플렉스박스 (간격 속성) | ❌ | ✅ |
| CSS 변수 | ❌ | ✅ |
| CSS calc() | ⚠️ 제한적 | ✅ |
| @media print | ⚠️ 제한적 | ✅ |
| @font-face | ⚠️ 제한적 | ✅ |
| 웹 폰트 | ⚠️ 제한적 | ✅ |
| SVG | ⚠️ 기본 | ✅ 전체 |
| CSS 변형 | ⚠️ 제한적 | ✅ |
| CSS 애니메이션 | ❌ | ✅ |
이동 후 새로운 기능
IronPDF로 마이그레이션한 후, SelectPdf가 제공할 수 없는 기능을 얻게 됩니다:
크로스 플랫폼 배포
// ✅IronPDF- Works everywhere
using IronPdf;
// Azure App Service (Linux) - WORKS
// Docker container - WORKS
// AWS Lambda - WORKS
// GitHub Actions on ubuntu-latest - WORKS
// macOS development - WORKS
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
pdf.SaveAs("output.pdf");
// ✅IronPDF- Works everywhere
using IronPdf;
// Azure App Service (Linux) - WORKS
// Docker container - WORKS
// AWS Lambda - WORKS
// GitHub Actions on ubuntu-latest - WORKS
// macOS development - WORKS
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
pdf.SaveAs("output.pdf");
Imports IronPdf
' ✅IronPDF- Works everywhere
' Azure App Service (Linux) - WORKS
' Docker container - WORKS
' AWS Lambda - WORKS
' GitHub Actions on ubuntu-latest - WORKS
' macOS development - WORKS
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>")
pdf.SaveAs("output.pdf")
최신 CSS 지원
// ✅IronPDF- Uses latest stable Chromium
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; --gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--gap); }
</style>
<div class='grid'>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 1</div>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 2</div>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
// ✅IronPDF- Uses latest stable Chromium
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; --gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--gap); }
</style>
<div class='grid'>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 1</div>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 2</div>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
Imports IronPdf
' ✅IronPDF- Uses latest stable Chromium
Dim renderer As New ChromePdfRenderer()
Dim html As String = "
<style>
:root { --primary: #007bff; --gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--gap); }
</style>
<div class='grid'>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 1</div>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 2</div>
<div style='background: var(--primary); color: white; padding: 1rem;'>Item 3</div>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
' All modern CSS features render correctly!
Close() 필요 없음
IronPDF는 리소스 관리를 자동으로 처리합니다:
// Option 1: Let garbage collection handle it
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No Close() needed
// Option 2: Explicit disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}
// Option 1: Let garbage collection handle it
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No Close() needed
// Option 2: Explicit disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}
' Option 1: Let garbage collection handle it
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' No Close() needed
' Option 2: Explicit disposal
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Using
마이그레이션 체크리스트
사전 마이그레이션
- 코드베이스에서 모든 SelectPdf 사용 감사
- 매핑을 위한 현재 변환기 옵션 문서화
- 헤더/푸터 구현 식별
- 페이지 번호 자리 표시자 구문 확인 (
{page_number}→{page}) - 기본 URL 처리 패턴 기록
- 대상 배포 플랫폼 검증
- ironpdf.com에서IronPDF라이선스 키 획득
코드 업데이트
Select.HtmlToPdfNuGet 패키지 제거IronPdfNuGet Install-Package- 네임스페이스 가져오기 업데이트 (
using SelectPdf;→using IronPdf;) HtmlToPdf를ChromePdfRenderer로 교체ConvertHtmlString()을RenderHtmlAsPdf()로 교체ConvertUrl()을RenderUrlAsPdf()로 교체- 옵션 속성 이름 업데이트 (
Options.PdfPageSize→RenderingOptions.PaperSize) PdfPageSize을PdfPaperSize로 변환PdfPageOrientation을PdfPaperOrientation로 변환doc.Save()을pdf.SaveAs()로 교체- 모든
doc.Close()호출 제거 - 페이지 번호 자리 표시자 수정 (
{page_number}→{page},{total_pages}→{total-pages}) - 애플리케이션 시작 시 라이선스 초기화 추가
마이그레이션 이후
- 모든 단위 테스트 실행
- CSS 렌더링 검증 (특히 Grid/Flexbox)
- JavaScript 실행 테스트
- 헤더/푸터 페이지 번호 확인
- 대상 플랫폼에서 테스트 (Linux, Docker 등)
- 성능 테스트
- PDF 출력 품질 비교
- CI/CD 파이프라인을 업데이트하세요
- 클라우드 배포 테스트 (적용 가능한 경우)

