TextControl에서 IronPDF로의 마이그레이션 방법 (C#)
TX Text Control은 .NET 생태계에서 포괄적인 문서 편집기 구성 요소로 자리 잡고 있으며, UI 컨트롤이 포함된 강력한 DOCX 편집 기능을 제공합니다. 그러나 각 팀의 주요 요구 사항이 전체 문서 편집이 아닌 PDF 생성인 경우 TextControl의 아키텍처는 라이선스 비용, 복잡성 및 런타임 종속성에서 큰 부담이 됩니다.
이 가이드는 TextControl에서 IronPDF로의 완전한 마이그레이션 경로를 제공하며, 전문 .NET 개발자가 이 전환을 평가하기 위한 단계별 지침, 코드 비교, 실제 예제를 포함하고 있습니다.
TextControl에서 마이그레이션하는 이유
TextControl에서 마이그레이션을 결정하는 것은 일반적으로 툴링을 실제 요구 사항에 맞추는 것에 중점을 둡니다. TX Text Control은 기본적으로 PDF 생성을 부수적인 기능으로 취급하는 문서 편집기입니다. 개발 팀이 마이그레이션을 고려하는 주요 이유는 다음과 같습니다:
비싼 라이선스: TextControl은 개발자당 최소 $3,398의 상업용 라이선스로 운영됩니다. 한 팀이 연 $6,749 정도의 투자를 예상할 수 있으며, 서버 배포 런타임 라이선스에는 추가 비용이 발생합니다. 갱신 비용은 연 40%로, 업데이트 접근을 유지하기 위해 필수적입니다.
PDF 부수적 고려사항: 핵심 아키텍처는 문서 작성이며, PDF가 아닙니다. PDF 생성이 가능하지만, 이는 핵심 초점이라기보다는 부가적인 기능에 가까워 최적의 출력 품질을 제공하지 않습니다.
하드웨어 버그: Intel Iris Xe Graphics 버그는 새로운 Intel 프로세서(11세대)에서 문서 렌더링에 영향을 미치며, 레지스트리 우회 조치를 필요로 합니다.
과도한 종속성: TextControl은 문서 편집 UI 구성 요소를 포함하고 있으며, 순수한 PDF 생성에 집중할 경우 필요하지 않을 수 있습니다.
문서 프로세서 아키텍처: 현대 웹 애플리케이션이 요구하는 HTML-to-PDF 작업에 최적화되지 않았습니다.
복잡한 API: ServerTextControl 문맥 관리 및 선택 모델은 단순한 PDF 생성 작업에 불필요한 복잡성을 더하고 있습니다.
비용 비교
| 측면 | TX Text Control | IronPDF |
|---|---|---|
| 기본 라이센스 | $3,398+ | 상당히 낮음 |
| 연간 갱신 | 40% 필수 | 선택적 지원 |
| 개발자 당 | 예 | 예 |
| UI 구성 요소 | 번들(과잉) | PDF 중심 |
| 총 3년 비용 | $5,750+ | 훨씬 낮음 |
IronPDF대 TextControl: 기능 비교
구조적 차이를 이해하면 기술 결정을 내리는데 이주 투자를 평가하는데 도움이 됩니다:
| 기능 | TX Text Control | IronPDF |
|---|---|---|
| 주된 초점 | DOCX 편집 | PDF 생성 |
| 라이선스 비용 | 연 개발자 당 $3,398 | 개발자당 $749 한 번 |
| PDF 품질 | 기본, 부가 기능 | 고품질, 핵심 기능 |
| 하드웨어 호환성 | Intel Iris와의 알려진 문제 | 모든 기기에서 안정적임 |
| UI와의 통합 | UI 구성 요소 필요 | UI 구성 요소 과잉 없음 |
| HTML/CSS 렌더링 | HTML과의 버그 | 최신 HTML5/CSS3 |
| HTML to PDF | 예 (부차적) | 예 (주요한) |
| CSS 지원 | 제한적 | 전체 CSS3 |
| JavaScript | 제한적 | 전체 ES2024 |
| URL을 PDF로 변환 | 복잡한 설정 | 내부 지원 |
| 헤더/푸터 | 복잡한 API | 간단한 HTML |
| 메일 머지 | 독점적 | HTML 템플릿 |
| PDF/A | 예 | 예 |
| 비밀번호 보호 | 예 | 예 |
| 디지털 서명 | 예 | 예 |
| PDF 병합 | 제한적 | 예 |
| PDF 분할 | 제한적 | 예 |
| 문맥 관리 | 필요함 | 필요 없음 |
| 크로스 플랫폼 | Windows 초점 | 예 |
빠른 시작: TextControl에서 IronPDF로의 마이그레이션
이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.
단계 1: NuGet 패키지 교체
모든 TextControl 패키지 제거:
# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
IronPDF 설치하세요:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
단계 2: 네임스페이스 업데이트
TextControl 네임스페이스를 IronPdf 네임스페이스로 교체:
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;
// After (IronPDF)
using IronPdf;
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;
// After (IronPDF)
using IronPdf;
Imports TXTextControl
Imports TXTextControl.DocumentServer
' After (IronPDF)
Imports IronPdf
단계 3: 라이선스 초기화
애플리케이션 시작 시 라이선스 초기화를 추가합니다:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
코드 마이그레이션 예제
HTML을 PDF로 변환
가장 일반적인 사용 사례는 이러한 .NET PDF 라이브러리 간의 아키텍처적 차이를 보여줍니다.
TextControl 접근 방식:
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;
namespace TextControlExample
{
class Program
{
static void Main(string[] args)
{
using (ServerTextControl textControl = new ServerTextControl())
{
textControl.Create();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
textControl.Load(html, StreamType.HTMLFormat);
textControl.Save("output.pdf", StreamType.AdobePDF);
}
}
}
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;
namespace TextControlExample
{
class Program
{
static void Main(string[] args)
{
using (ServerTextControl textControl = new ServerTextControl())
{
textControl.Create();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
textControl.Load(html, StreamType.HTMLFormat);
textControl.Save("output.pdf", StreamType.AdobePDF);
}
}
}
}
Imports TXTextControl
Imports System.IO
Namespace TextControlExample
Class Program
Shared Sub Main(ByVal args As String())
Using textControl As New ServerTextControl()
textControl.Create()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
textControl.Load(html, StreamType.HTMLFormat)
textControl.Save("output.pdf", StreamType.AdobePDF)
End Using
End Sub
End Class
End Namespace
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
namespace IronPdfExample
{
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
namespace IronPdfExample
{
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
}
Imports IronPdf
Namespace IronPdfExample
Class Program
Shared Sub Main(ByVal args As String())
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
End Namespace
TextControl 버전은 ServerTextControl 인스턴스를 생성하고, Create()를 호출하여 컨텍스트를 초기화하며, StreamType.HTMLFormat로 HTML을 로드하고, StreamType.AdobePDF로 저장해야 합니다. 적절한 리소스 처리를 위해 using 블록이 필수적입니다.
IronPDF는 컨텍스트 관리를 완전히 제거합니다. ChromePdfRenderer는 초기화 과정이 필요하지 않습니다. 생성하여 HTML을 렌더링하고 저장하세요. 이 아키텍처 단순화는 인지 부하와 잠재적 리소스 관리 버그를 줄입니다.
고급 HTML에서 PDF로의 시나리오는 HTML to PDF 변환 가이드를 참조하십시오.
여러 PDF 병합
PDF 병합은 이 라이브러리들 간의 또 다른 중요한 복잡성 차이를 보여줍니다.
TextControl 접근 방식:
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;
namespace TextControlExample
{
class Program
{
static void Main(string[] args)
{
using (ServerTextControl textControl = new ServerTextControl())
{
textControl.Create();
byte[] pdf1 = File.ReadAllBytes("document1.pdf");
textControl.Load(pdf1, StreamType.AdobePDF);
byte[] pdf2 = File.ReadAllBytes("document2.pdf");
textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);
textControl.Save("merged.pdf", StreamType.AdobePDF);
}
}
}
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;
namespace TextControlExample
{
class Program
{
static void Main(string[] args)
{
using (ServerTextControl textControl = new ServerTextControl())
{
textControl.Create();
byte[] pdf1 = File.ReadAllBytes("document1.pdf");
textControl.Load(pdf1, StreamType.AdobePDF);
byte[] pdf2 = File.ReadAllBytes("document2.pdf");
textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);
textControl.Save("merged.pdf", StreamType.AdobePDF);
}
}
}
}
Imports TXTextControl
Imports System.IO
Namespace TextControlExample
Class Program
Shared Sub Main(ByVal args As String())
Using textControl As New ServerTextControl()
textControl.Create()
Dim pdf1 As Byte() = File.ReadAllBytes("document1.pdf")
textControl.Load(pdf1, StreamType.AdobePDF)
Dim pdf2 As Byte() = File.ReadAllBytes("document2.pdf")
textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append)
textControl.Save("merged.pdf", StreamType.AdobePDF)
End Using
End Sub
End Class
End Namespace
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
namespace IronPdfExample
{
class Program
{
static void Main(string[] args)
{
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;
namespace IronPdfExample
{
class Program
{
static void Main(string[] args)
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
}
Imports IronPdf
Namespace IronPdfExample
Class Program
Shared Sub Main(ByVal args As String())
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
End Namespace
TextControl은 파일을 바이트 배열로 읽고, ServerTextControl 컨텍스트를 관리하며, LoadAppendMode.Append를 사용해 문서를 병합해야 합니다. IronPDF의 PdfDocument.Merge() 메소드는 단일 명시적 호출로 모든 것을 처리합니다.
선택적 페이지 추출을 포함한 고급 병합 시나리오에 대해서는 병합 및 분할 PDF 가이드를 참조하십시오.
헤더 및 풋터 추가
동적 페이지 번호가 있는 헤더와 푸터는 API 복잡성 차이를 보여줍니다.
TextControl 접근 방식:
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;
namespace TextControlExample
{
class Program
{
static void Main(string[] args)
{
using (ServerTextControl textControl = new ServerTextControl())
{
textControl.Create();
string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
textControl.Load(html, StreamType.HTMLFormat);
HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
header.Text = "Document Header";
textControl.Sections[0].HeadersAndFooters.Add(header);
HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
footer.Text = "Page {page} of {numpages}";
textControl.Sections[0].HeadersAndFooters.Add(footer);
textControl.Save("output.pdf", StreamType.AdobePDF);
}
}
}
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;
namespace TextControlExample
{
class Program
{
static void Main(string[] args)
{
using (ServerTextControl textControl = new ServerTextControl())
{
textControl.Create();
string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
textControl.Load(html, StreamType.HTMLFormat);
HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
header.Text = "Document Header";
textControl.Sections[0].HeadersAndFooters.Add(header);
HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
footer.Text = "Page {page} of {numpages}";
textControl.Sections[0].HeadersAndFooters.Add(footer);
textControl.Save("output.pdf", StreamType.AdobePDF);
}
}
}
}
Imports TXTextControl
Imports System.IO
Namespace TextControlExample
Class Program
Shared Sub Main(ByVal args As String())
Using textControl As New ServerTextControl()
textControl.Create()
Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"
textControl.Load(html, StreamType.HTMLFormat)
Dim header As New HeaderFooter(HeaderFooterType.Header)
header.Text = "Document Header"
textControl.Sections(0).HeadersAndFooters.Add(header)
Dim footer As New HeaderFooter(HeaderFooterType.Footer)
footer.Text = "Page {page} of {numpages}"
textControl.Sections(0).HeadersAndFooters.Add(footer)
textControl.Save("output.pdf", StreamType.AdobePDF)
End Using
End Sub
End Class
End Namespace
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
namespace IronPdfExample
{
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.AddTextHeader("Document Header");
pdf.AddTextFooter("Page {page} of {total-pages}");
pdf.SaveAs("output.pdf");
}
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
namespace IronPdfExample
{
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.AddTextHeader("Document Header");
pdf.AddTextFooter("Page {page} of {total-pages}");
pdf.SaveAs("output.pdf");
}
}
}
Imports IronPdf
Imports IronPdf.Rendering
Namespace IronPdfExample
Class Program
Shared Sub Main(args As String())
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.AddTextHeader("Document Header")
pdf.AddTextFooter("Page {page} of {total-pages}")
pdf.SaveAs("output.pdf")
End Sub
End Class
End Namespace
TextControl은 특정 HeaderFooterType 열거형을 가진 HeaderFooter 객체를 생성하고, textControl.Sections[0]를 통해 문서 섹션에 접근하며, HeadersAndFooters 컬렉션에 추가해야 합니다. IronPDF는 단순한 플레이스홀더 구문을 사용하여 직접적인 AddTextHeader 및 AddTextFooter 메소드를 제공합니다.
IronPDF는 모든 스타일 제어가 가능한 HTML 기반 헤더를 위한 HtmlHeaderFooter도 지원합니다:
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 12pt;'>
Company Report
</div>",
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: right; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 12pt;'>
Company Report
</div>",
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: right; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='width: 100%; text-align: center; font-size: 12pt;'>
Company Report
</div>",
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='width: 100%; text-align: right; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
.MaxHeight = 25
}
더 많은 헤더와 푸터 옵션에 대해 알아보세요 헤더와 푸터 문서에서.
TextControl API에서 IronPDF로의 매핑 참조
이 매핑은 직접적인 API 대응을 보여주어 마이그레이션을 가속화합니다:
| TX Text Control | IronPDF |
|---|---|
ServerTextControl.Create() |
new ChromePdfRenderer() |
tx.Load(html, StreamType.HTMLFormat) |
renderer.RenderHtmlAsPdf(html) |
tx.Load(url, StreamType.HTMLFormat) |
renderer.RenderUrlAsPdf(url) |
tx.Save(path, StreamType.AdobePDF) |
pdf.SaveAs(path) |
SaveSettings.PDFAConformance |
RenderingOptions.PdfAFormat |
DocumentServer.MailMerge |
HTML 템플릿 + Razor |
DocumentTarget.HeadersAndFooters |
HtmlHeaderFooter |
LoadSettings |
RenderingOptions |
StreamType.AdobePDF |
기본 출력 |
일반적인 마이그레이션 문제와 해결책
문제 1: ServerTextControl 문맥
TextControl은 모든 작업에 대해 Create() 및 using 블록이 필요합니다.
해결책: IronPDF는 문맥 관리가 필요 없습니다:
// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' Just create and use
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
문제 2: StreamType 변환
TextControl은 다양한 형식을 로드하고 StreamType 열거형을 통해 PDF로 변환합니다.
해결책: IronPDF는 중간 형식 변환 없이 HTML을 직접 렌더링합니다:
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
Dim pdf = renderer.RenderHtmlAsPdf(html)
문제 3: DOCX 템플릿
TextControl은 메일 머지가 있는 템플릿에 DOCX 파일을 사용합니다.
해결책: C# 문자열 보간법 또는 Razor를 사용하여 HTML 템플릿으로 변환하세요:
var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial; padding: 40px; }}
h1 {{ color: #333; }}
.total {{ font-size: 24px; color: green; }}
</style>
</head>
<body>
<h1>Invoice #{data.InvoiceNumber}</h1>
<p>Customer: {data.CustomerName}</p>
<p class='total'>Total: {data.Total}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial; padding: 40px; }}
h1 {{ color: #333; }}
.total {{ font-size: 24px; color: green; }}
</style>
</head>
<body>
<h1>Invoice #{data.InvoiceNumber}</h1>
<p>Customer: {data.CustomerName}</p>
<p class='total'>Total: {data.Total}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
Option Strict On
Dim data = New With {Key .CustomerName = "John Doe", Key .InvoiceNumber = "12345", Key .Total = "$1,500.00"}
Dim html = $"
<html>
<head>
<style>
body {{ font-family: Arial; padding: 40px; }}
h1 {{ color: #333; }}
.total {{ font-size: 24px; color: green; }}
</style>
</head>
<body>
<h1>Invoice #{data.InvoiceNumber}</h1>
<p>Customer: {data.CustomerName}</p>
<p class='total'>Total: {data.Total}</p>
</body>
</html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
문제 4: Intel Iris Xe 그래픽 버그
TextControl은 11세대 인텔 프로세서와 관련된 렌더링 문제를 문서화했으며, 레지스트리 해결 방법이 필요합니다.
해결책: IronPDF는 Chromium 렌더링을 사용하기 때문에 하드웨어 가속 버그 또는 레지스트리 수정이 필요 없습니다.
TextControl 마이그레이션 체크리스트
이동 전 작업
모든 TextControl 사용을 식별하기 위해 코드베이스를 감사하세요:
grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
메일 병합 템플릿을 HTML로 변환하기 위해 문서화하세요. HtmlHeaderFooter로 구현할 때 헤더/푸터 요구사항을 참조하세요. 대체 솔루션이 필요할 수 있는 DOCX 편집 기능을 식별하세요.
코드 업데이트 작업
1.TX Text ControlNuGet 패키지를 제거하세요
- IronPdf NuGet 패키지를 설치하세요
ServerTextControl컨텍스트 관리를 제거합니다 (더 이상Create()호출이 필요 없습니다)StreamType.HTMLFormat로드를RenderHtmlAsPdf로 변환합니다- 문자열 보간법 또는 Razor로 메일 병합을 HTML 템플릿으로 변환하세요
- 헤더/푸터를
HtmlHeaderFooter또는AddTextFooter를 사용하도록 업데이트합니다 RenderingOptions을 사용하여 페이지 설정을 단순화합니다- 시작 시 라이선스 초기화를 추가
마이그레이션 후 테스트
마이그레이션 후 다음 측면을 검증:
- 모든 문서 템플릿이 올바르게 렌더링되는지 테스트하세요
- 필요 시PDF/A준수를 확인하세요
- 비밀번호 보호 기능을 테스트하세요
- 모든 페이지에 헤더/바닥글이 나타나는지 확인하세요
- Intel 11세대 하드웨어에서 확인하세요—IronPDF를 사용하면 더 이상 레지스트리 해결 방법이 필요 없습니다
IronPDF로 마이그레이션할 때의 주요 이점
TextControl에서 IronPDF로 이동하는 것은 PDF 생성에 집중하는 팀에게 여러 가지 장점을 제공합니다:
PDF 우선 아키텍처: IronPDF는 PDF 생성을 위해 특별히 맞춤화되어 있으며, 최신 HTML5 및 CSS3 표준을 활용하여 강력한 문서 생성 및 렌더링 기능을 제공합니다.
비용 효율성: IronPDF의 일회성 가격은 시간이 지남에 따라 훨씬 더 저렴하며, 특히 40% 연간 갱신이 필수적인 TextControl의 구독 기반 서비스와 비교됩니다.
입증된 안정성: 다양한 하드웨어에서 문서화된 신뢰성으로 인해 Intel 그래픽과 관련된 TextControl의 문제를 피할 수 있습니다.
컨텍스트 관리 없음: ServerTextControl 생성 절차 및 리소스 처리 패턴을 제거합니다. IronPDF의 무상태 렌더링은 코드를 간소화하고 잠재적인 메모리 누수를 줄입니다.
최신 렌더링 엔진: .NET 10과 C# 14 채택이 2026년까지 증가함에 따라, IronPDF의 Chromium 기반 렌더링은 현재 및 미래의 웹 표준과 호환을 보장합니다.

