Spire.PDF에서 IronPDF로의 마이그레이션 방법 (C#)
Spire.PDF에서 IronPDF로의 마이그레이션은 텍스트를 이미지로 렌더링하는 라이브러리에서 최신 Chromium 렌더링 엔진을 사용하여 실제 선택 가능하고 검색 가능한 텍스트를 생성하는 것으로 PDF 생성 워크플로를 변환합니다. 이 가이드는 Spire.PDF의 중요한 HTML 렌더링 제한과 폰트 임베딩 문제를 해결하는 완전하고 단계적인 마이그레이션 경로를 제공합니다.
왜 Spire.PDF에서 IronPDF로 마이그레이션해야 하는가
Spire.PDF 이해하기
Spire.PDF는 .NET 개발자가 PDF 문서를 효율적으로 처리할 수 있도록 설계된 강력한 상용 PDF 라이브러리입니다. Spire.PDF는 특히 레거시 응용 프로그램에서의 특정 기능과 E-iceblue 도구 세트의 다른 구성 요소와의 통합 능력으로 프로그래밍 커뮤니티에서 자리매김을 했습니다.
그러나 Spire.PDF는 실제 사용에 영향을 미치는 몇 가지 기본적인 문제를 가지고 있으며, 특히 HTML-to-PDF 변환과 최신 웹 표준 지원에 문제가 있습니다.
중요 기술 이슈
| 문제 | 영향 | IronPDF 솔루션 |
|---|---|---|
| 이미지로 렌더링된 텍스트 | PDF 검색 불가능, 접근 불가, 텍스트 복사 불가 | 실제 텍스트 렌더링 |
| Internet Explorer 의존성 | 구식 렌더링, 보안 위험 | 최신 Chromium 엔진 |
| 글꼴 포함 실패 | 다른 시스템에서 문서가 잘못 표시됨 | 신뢰할 수 있는 글꼴 처리 |
| 큰 배포 발자국 | 높은 메모리 사용량, 느린 시작 | 효율적인 배포 |
| 제한된 CSS 지원 | 최신 레이아웃이 올바르게 렌더링되지 않음 | 전체 CSS3 지원 |
핵심 문제: 이미지 기반 PDF
Spire.PDF의 주요 단점 중 하나는 HTML 문서 내 텍스트를 이미지로 렌더링하는 경향이 있다는 것입니다. 이로 인해 텍스트가 선택하거나 검색할 수 없는 PDF가 생성되어 검색 기능이나 문서 텍스트 상호작용이 필요한 응용 프로그램에 심각한 제한이 될 수 있습니다.
Spire.PDF의 LoadFromHTML() 메서드를 사용할 때 종종 실제 텍스트가 아닌 비트맵 이미지로 텍스트를 렌더링하여 다음과 같은 문제를 만듭니다:
- 텍스트를 선택할 수 없습니다
- 텍스트를 검색할 수 없습니다
- 텍스트를 복사할 수 없습니다
- 스크린 리더가 읽지 못함 (접근성 위반)
- 파일 크기가 훨씬 더 큽니다
- 확대 시 픽셀화 발생
Spire.PDF 대IronPDF비교
| 기능 | Spire.PDF | IronPDF |
|---|---|---|
| HTML to PDF 렌더링 | 텍스트가 이미지로 렌더링됨 | 참된 텍스트 렌더링(선택 가능하고 검색 가능) |
| 렌더링 엔진 | 일부 시스템에서 Internet Explorer에 종속됨 | Chromium 기반, 최신 웹 표준 준수 |
| 폰트 처리 | 폰트 임베딩에 관한 알려진 문제 | 신뢰할 수 있고 강력한 폰트 처리 |
| CSS3 지원 | 제한적 | 전체 |
| 플렉스박스/그리드 | 지원되지 않음 | 지원됨 |
| JavaScript | 제한적 | 전체 ES6+ |
| PDF 접근성 | 부족함 (이미지 기반) | 우수함 |
| API 설계 | 복잡함 | 간단하고 직관적임 |
| 배포 풋프린트 | 대형 | 보통 |
| 라이선스 | 프리미엄/상용 | 상업적 |
.NET 10 및 C# 14를 2025년과 2026년까지 계획하는 팀에게 IronPDF는 Spire.PDF의 HTML-to-PDF 변환 문제를 해결하여 텍스트를 이미지가 아닌 실제 선택 가능한 텍스트로 렌더링하여 PDF가 검색 가능하고 접근 가능한지 보장합니다.
시작하기 전에
필수 조건
- .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
- IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요
NuGet 패키지 변경 사항
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# 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: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
핵심 API 매핑
| Spire.PDF | IronPDF |
|---|---|
new PdfDocument() |
new ChromePdfRenderer() |
pdf.LoadFromHTML() |
renderer.RenderHtmlAsPdf() |
pdf.LoadFromFile() |
PdfDocument.FromFile() |
pdf.SaveToFile() |
pdf.SaveAs() |
pdf.Close() |
필요 없음 |
pdf.Pages.Add() |
renderer.RenderHtmlAsPdf() |
pdf.InsertPageRange() |
PdfDocument.Merge() |
page.Canvas.DrawString() |
TextStamper + ApplyStamp() |
PdfFont |
HTML에서의 CSS 스타일링 |
PdfBrush |
HTML에서의 CSS 스타일링 |
코드 마이그레이션 예제
예제 1: HTML에서 PDF로 변환
이전(Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PdfDocument()
Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()
Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
pdf.LoadFromHTML(htmlString, False, True, True)
pdf.SaveToFile("output.pdf")
pdf.Close()
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
pdf.SaveAs("output.pdf")
End Sub
End Class
이 예시는 HTML 렌더링의 근본적인 차이를 보여줍니다. Spire.PDF는 PdfHtmlLayoutFormat 객체와 함께 LoadFromHTML()를 사용하여 종종 텍스트를 비트맵 이미지로 렌더링합니다. 그 결과 사용자가 텍스트를 선택하거나 복사하거나 검색할 수 없는 PDF가 생성됩니다.
IronPDF는 ChromePdfRenderer와 RenderHtmlAsPdf()을 사용하여 완전히 선택 가능하고 검색 가능하며 접근할 수 있는 실제 텍스트를 생성합니다. IronPDF는 자동 정리를 위해 dispose 패턴을 사용하므로 Close() 호출이 필요하지 않습니다. 포괄적인 예제를 보려면 HTML to PDF 문서를 참조하십시오.
예시 2: 여러 PDF 병합
이전(Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
Imports Spire.Pdf
Imports System
Class Program
Shared Sub Main()
Dim pdf1 As New PdfDocument()
pdf1.LoadFromFile("document1.pdf")
Dim pdf2 As New PdfDocument()
pdf2.LoadFromFile("document2.pdf")
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1)
pdf1.SaveToFile("merged.pdf")
pdf1.Close()
pdf2.Close()
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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;
using System;
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
Imports System
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
Spire.PDF는 각각의 문서를 new PdfDocument() + LoadFromFile()로 수동으로 로드한 다음, InsertPageRange()를 사용하여 삽입할 페이지를 지정하고, 마지막으로 각 문서에 대해 Close()를 호출해야 합니다.
IronPDF는 간단한 PdfDocument.FromFile() 패턴과 여러 문서를 수용할 수 있는 정적 PdfDocument.Merge() 메서드를 사용합니다. Close() 호출이 필요 없습니다. 더 많은 정보를 보려면 튜토리얼을 참조하세요.
예제 3: PDF에 텍스트 추가하기
이전(Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PdfDocument()
Dim page As PdfPageBase = pdf.Pages.Add()
Dim font As New PdfFont(PdfFontFamily.Helvetica, 20)
Dim brush As PdfBrush = New PdfSolidBrush(Color.Black)
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, New PointF(50, 50))
pdf.SaveToFile("output.pdf")
pdf.Close()
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>")
Dim textStamper = New TextStamper() With {
.Text = "Hello from IronPDF!",
.FontSize = 20,
.VerticalOffset = 50,
.HorizontalOffset = 50
}
pdf.ApplyStamp(textStamper)
pdf.SaveAs("output.pdf")
End Sub
End Class
Spire.PDF는 PointF를 사용하여 특정 좌표에 텍스트를 배치하기 위해 PdfFont, PdfBrush, page.Canvas.DrawString()를 사용하는 캔버스 기반의 드로잉 모델을 사용합니다.
IronPDF는 Text, FontSize, VerticalOffset, HorizontalOffset과 같은 직관적인 속성이 있는 TextStamper 객체를 사용한 다음, 이를 ApplyStamp()으로 적용합니다. 이 접근 방식은 보다 선언적이며 유지 보수가 더 쉽습니다.
텍스트를 이미지로 렌더링 하는 문제
왜 이것이 중요한가
Spire.PDF가 이미지 기반 렌더링으로 HTML을 PDF로 변환할 때 문서는 필수 기능을 잃습니다:
1. 텍스트 검색 없음: 사용자는 Ctrl+F를 사용하여 텍스트를 찾을 수 없습니다. 문서 관리 시스템은 콘텐츠를 인덱싱할 수 없습니다.
2. 텍스트 선택/복사 없음: 인용문, 참조, 데이터를 복사하려는 사용자는 텍스트를 선택할 수 없습니다. 이것은 이미지입니다.
3. 접근성 위반: 이미지 기반 PDF는 WCAG 2.1 준수, 섹션 508 준수(미국 정부), ADA 요구 사항 및 스크린 리더 호환성을 실패합니다.
4. 큰 파일 크기: 동일한 콘텐츠 비교에서 Spire.PDF(이미지 기반)는 IronPDF(텍스트 기반)보다 최대 16배 큰 파일을 생성합니다.
감지: 당신의 PDF가 이미지 기반인가?
Spire.PDF로 생성된 문서를 열고 다음 테스트를 시도하십시오:
- 텍스트 선택: 텍스트 위에서 클릭하고 드래그하십시오. 아무것도 강조 표시되지 않으면 → 이미지 기반
- Ctrl+F 검색: 페이지의 단어를 검색하십시오. "일치 항목 없음"이 나오면 → 이미지 기반
- 복사/붙여넣기: 텍스트를 선택하고 메모장에 복사하십시오. 붙여넣기 할 내용이 없으면 → 이미지 기반
인터넷 익스플로러 문제
Spire.PDF의 렌더링 엔진
Spire.PDF는 일부 환경에서 HTML 렌더링을 위해 Internet Explorer/Edge 레거시에 의존합니다. IE는 2022년 더 이상 사용되지 않으며, 최신 CSS가 작동하지 않고, JavaScript 지원이 제한적이며, 시스템 간 렌더링이 일관되지 않습니다.
Spire.PDF에서 실패하는 최신 CSS
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
IronPDF는 최신 Chromium 렌더링을 사용하여 모든 CSS 기능이 올바르게 작동합니다.
이동 후 새로운 기능
IronPDF로 마이그레이션한 후 Spire.PDF가 제공할 수 없는 기능을 얻게 됩니다:
선택 가능하고 검색 가능한 텍스트
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>")
pdf.SaveAs("contract.pdf")
' Result:
' ✅ Text is fully selectable
' ✅ Text is searchable with Ctrl+F
' ✅ Text can be copied to clipboard
' ✅ Screen readers work perfectly
' ✅ File size is compact
' ✅ Zooming is crystal clear
최신 CSS 지원
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
Dim renderer = New ChromePdfRenderer()
Dim html = "
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
' All modern CSS features render correctly!
HTML 기반 워터마크
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.ApplyWatermark("
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>")
마이그레이션 체크리스트
사전 마이그레이션
- 코드베이스의 모든 Spire.PDF 사용 내역 조사
- 텍스트 선택 가능성에 대한 기존 PDF 테스트 (중요 문제 감지)
- 문서
LoadFromHTML()호출 (우선적으로 수정이 필요합니다) - ironpdf.com에서IronPDF라이선스 키 획득
코드 업데이트
Spire.PDFNuGet 패키지 제거 (무료 버전을 사용하는 경우에는FreeSpire.PDF도 함께)IronPdfNuGet Install-Package- 네임스페이스 가져오기 업데이트 (
using Spire.Pdf;→using IronPdf;) RenderHtmlAsPdf()으로LoadFromHTML()대체 (중요 수정)new PdfDocument()+LoadFromFile()을PdfDocument.FromFile()으로 대체InsertPageRange()을PdfDocument.Merge()으로 대체Canvas.DrawString()을TextStamper+ApplyStamp()으로 대체SaveToFile()을SaveAs()으로 대체- 모든
Close()호출 제거 (IronPDF에서는 필요 없습니다) - 애플리케이션 시작 시 라이선스 초기화 추가
테스트
- 생성된 PDF에서 텍스트가 선택 가능한지 확인 (중요한 테스트)
- CSS 렌더링 개선 사항 확인 (Flexbox/Grid가 이제 작동합니다)
- 파일 크기가 작은지 확인
- 화면 읽기 프로그램으로 접근성 테스트
- 성능 비교

