TuesPechkin에서 IronPDF로의 마이그레이션 방법 (C#)
TuesPechkin은 wkhtmltopdf 라이브러리를 감싸는 스레드 안전 래퍼로 .NET 개발자가 HTML을 PDF로 변환하는 데 수년간 도움을 주었습니다. 그러나 기초 wkhtmltopdf 기술은 2015년에 마지막으로 업데이트되었으며 2022년 12월에 공식적으로 중단되었습니다. 이는 개발 팀이 더 이상 무시할 수 없는 치명적인 보안, 안정성 및 렌더링 제한을 만듭니다.
이 가이드는 전문 .NET 개발자가 이 전환을 평가할 때, 단계별 지침, 코드 비교 및 실용적인 예를 통해 TuesPechkin에서 IronPDF로 완전한 마이그레이션 경로를 제공합니다.
지금 TuesPechkin에서 마이그레이션해야 하는 이유
TuesPechkin에서 마이그레이션하는 결정은 이제 보안을 중시하는 개발 팀에게 더 이상 선택 사항이 아닙니다. 기초 wkhtmltopdf 라이브러리는 절대로 수정되지 않을 치명적인 패치되지 않은 취약점을 가지고 있습니다.
치명적인 보안 취약점: CVE-2022-35583
| 속성 | 값 |
|---|---|
| CVE ID | CVE-2022-35583 |
| 심각도 | 치명적 (9.8/10) |
| 공격 벡터 | 네트워크 |
| 상태 | 절대로 패치되지 않음 |
| 영향을 받음 | 모든TuesPechkin버전 |
wkhtmltopdf 관리자는 보안 취약점을 수정하지 않을 것이라고 명시적으로 밝혔습니다. TuesPechkin을 사용하는 모든 애플리케이션은 영구적으로 서버 사이드 요청 위조(SSRF) 공격에 노출됩니다.
공격 작동 방식
사용자가 제공한 HTML을 처리할 때 공격자가 악성 콘텐츠를 주입할 수 있습니다:
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" />
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" />
이는 공격자가 AWS/Azure/GCP 메타데이터 엔드포인트에 접근하고 내부 API 데이터를 훔치고 내부 네트워크 포트를 스캔하며 민감한 설정을 유출하는 것을 허용합니다.
기술 위기
TuesPechkin은 Qt WebKit 4.8—고대, Chrome 이전 시대 기술을 사용하는 wkhtmltopdf를 감쌉니다. 이는 다음을 의미합니다.
- Flexbox 지원 없음
- CSS Grid 지원 없음
- JavaScript 실행 오류
- ES6+ 지원 없음
안정성 위기
광고된 ThreadSafeConverter에도 불구하고, TuesPechkin은 높은 부하에서 충돌합니다:
// ❌TuesPechkin- "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
new TuesPechkin.RemotingToolset<PechkinBindings>());
// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitely
// ❌TuesPechkin- "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
new TuesPechkin.RemotingToolset<PechkinBindings>());
// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitely
' ❌TuesPechkin- "ThreadSafeConverter" still crashes
Dim converter = New TuesPechkin.ThreadSafeConverter(
New TuesPechkin.RemotingToolset(Of PechkinBindings)())
' Under high load, you'll see:
' System.AccessViolationException: Attempted to read or write protected memory
' Process terminated unexpectedly
' Converter hangs indefinitely
IronPDF대 TuesPechkin: 기능 비교
구조적 차이를 이해하면 기술 결정을 내리는데 이주 투자를 평가하는데 도움이 됩니다:
| 기능 | TuesPechkin | IronPDF |
|---|---|---|
| 라이선스 | 무료 (MIT 라이선스) | 상업적 |
| 스레드 안전성 | 수동 관리 필요 | 네이티브 지원 |
| 동시성 | 제한적이며, 부하 중에 충돌할 수 있음 | 견고하며, 높은 동시성을 처리함 |
| 개발 | 비활성, 마지막 업데이트 2015 | 활성, 지속적인 개선 |
| 사용 용이성 | 복잡한 설정 | 가이드와 함께 사용하기 편리함 |
| 문서화 | 기초적인 | 예시가 풍부함 |
| 보안 | ❌ 치명적인 CVEs | ✅ 알려진 취약점 없음 |
| HTML to PDF | ⚠️ 오래된 WebKit | ✅ 최신 Chromium |
| CSS3 | ❌ 부분적 | ✅ 지원됨 |
| 플렉스박스/그리드 | ❌ 지원되지 않음 | ✅ 지원됨 |
| JavaScript | ⚠️ 신뢰할 수 없음 | ✅ 전체 ES6+ |
| PDF 조작 | ❌ 사용 불가 | ✅ 전체 |
| 디지털 서명 | ❌ 사용 불가 | ✅ 전체 |
| PDF/A 준수 | ❌ 사용 불가 | ✅ 전체 |
| 양식 채우기 | ❌ 사용 불가 | ✅ 전체 |
| 워터마크 | ❌ 사용 불가 | ✅ 전체 |
| 병합/분할 | ❌ 사용 불가 | ✅ 전체 |
빠른 시작: TuesPechkin에서 IronPDF로의 마이그레이션
이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.
단계 1: NuGet 패키지 교체
모든TuesPechkin패키지를 제거하십시오:
# RemoveTuesPechkinand all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32
# RemoveTuesPechkinand all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32
IronPDF 설치하세요:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
2단계: 네이티브 이진 파일 제거
해당 프로젝트에서 다음 파일 및 폴더를 삭제하십시오:
wkhtmltox.dllwkhtmltopdf.exe- 모든
wkhtmlto*파일 TuesPechkin.Wkhtmltox폴더
3단계: 네임스페이스 업데이트
TuesPechkin 네임스페이스를 IronPdf 네임스페이스로 교체하십시오:
// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;
// After (IronPDF)
using IronPdf;
// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;
// After (IronPDF)
using IronPdf;
' Before (TuesPechkin)
Imports TuesPechkin
Imports TuesPechkin.Wkhtmltox.Win64
' After (IronPDF)
Imports IronPdf
4단계: 라이센스 초기화
애플리케이션 시작 시 라이선스 초기화를 추가합니다:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
코드 마이그레이션 예제
HTML을 PDF로 변환
가장 흔한 사용 사례는 이러한 .NET PDF 라이브러리 간의 복잡도 차이를 보여줍니다.
TuesPechkin 접근 방식:
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = { new ObjectSettings { HtmlText = html } }
});
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = { new ObjectSettings { HtmlText = html } }
});
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
Imports TuesPechkin
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdfBytes As Byte() = converter.Convert(New HtmlToPdfDocument With {
.Objects = {New ObjectSettings With {.HtmlText = html}}
})
File.WriteAllBytes("output.pdf", pdfBytes)
End Sub
End Class
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
TuesPechkin 버전은 StandardConverter을(를) 생성하고, 복잡한 초기화 체인을 필요로 합니다: RemotingToolset, Win64EmbeddedDeployment, 및 TempFolderDeployment. 또한 바이트를 파일에 수동으로 기록해야 합니다.
IronPDF는 이 의식을 전적으로 제거합니다. ChromePdfRenderer을(를) 생성하고, HTML을 렌더링하고 저장합니다. 코드는 자체적으로 문서화되어 있으며 배포 툴셋이나 플랫폼별 바이너리 관리에 대한 이해가 필요하지 않습니다.
고급 HTML에서 PDF로의 시나리오는 HTML to PDF 변환 가이드를 참조하십시오.
URL을 PDF로 변환
URL-to-PDF 변환은 유사한 복잡도 차이를 보여줍니다.
TuesPechkin 접근 방식:
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = {
new ObjectSettings {
PageUrl = "https://www.example.com"
}
}
});
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = {
new ObjectSettings {
PageUrl = "https://www.example.com"
}
}
});
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}
Imports TuesPechkin
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
Dim pdfBytes As Byte() = converter.Convert(New HtmlToPdfDocument With {
.Objects = {
New ObjectSettings With {
.PageUrl = "https://www.example.com"
}
}
})
File.WriteAllBytes("webpage.pdf", pdfBytes)
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("webpage.pdf");
}
}
// 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("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
TuesPechkin은 ObjectSettings.PageUrl을(를) HtmlToPdfDocument 내에 중첩하여 사용합니다. IronPDF는 사용 의도를 명확하게 표현하는 전용 RenderUrlAsPdf 메서드를 제공합니다.
URL to PDF 문서에서 인증 및 사용자 정의 헤더 옵션을 탐색하십시오.
맞춤 렌더링 설정
페이지 방향, 용지 크기 및 여백은 다른 설정 접근 방식을 필요로 합니다.
TuesPechkin 접근 방식:
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var document = new HtmlToPdfDocument
{
GlobalSettings = {
Orientation = GlobalSettings.PdfOrientation.Landscape,
PaperSize = GlobalSettings.PdfPaperSize.A4,
Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
},
Objects = {
new ObjectSettings { HtmlText = html }
}
};
byte[] pdfBytes = converter.Convert(document);
File.WriteAllBytes("custom.pdf", pdfBytes);
}
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var document = new HtmlToPdfDocument
{
GlobalSettings = {
Orientation = GlobalSettings.PdfOrientation.Landscape,
PaperSize = GlobalSettings.PdfPaperSize.A4,
Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
},
Objects = {
new ObjectSettings { HtmlText = html }
}
};
byte[] pdfBytes = converter.Convert(document);
File.WriteAllBytes("custom.pdf", pdfBytes);
}
}
Imports TuesPechkin
Imports System.IO
Module Program
Sub Main()
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
Dim html As String = "<html><body><h1>Custom PDF</h1></body></html>"
Dim document = New HtmlToPdfDocument With {
.GlobalSettings = New GlobalSettings With {
.Orientation = GlobalSettings.PdfOrientation.Landscape,
.PaperSize = GlobalSettings.PdfPaperSize.A4,
.Margins = New MarginSettings With {.Unit = Unit.Millimeters, .Top = 10, .Bottom = 10}
},
.Objects = {
New ObjectSettings With {.HtmlText = html}
}
}
Dim pdfBytes As Byte() = converter.Convert(document)
File.WriteAllBytes("custom.pdf", pdfBytes)
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.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}
Imports IronPdf
Imports IronPdf.Engines.Chrome
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
Dim html As String = "<html><body><h1>Custom PDF</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("custom.pdf")
End Sub
End Module
TuesPechkin은 설정을 문서 전체 옵션을 위한 GlobalSettings과(와) 콘텐츠를 위한 ObjectSettings으로 분리합니다. IronPDF는 명확하고 찾기 쉬운 속성 이름으로 모든 것을 RenderingOptions에 통합합니다.
TuesPechkinAPI에서 IronPDF로의 매핑 참조
이 매핑은 직접적인 API 대응을 보여주어 마이그레이션을 가속화합니다:
| TuesPechkin | IronPDF |
|---|---|
StandardConverter |
ChromePdfRenderer |
ThreadSafeConverter |
ChromePdfRenderer |
HtmlToPdfDocument |
메서드 매개변수 |
GlobalSettings |
RenderingOptions |
ObjectSettings.HtmlText |
RenderHtmlAsPdf(html) |
ObjectSettings.PageUrl |
RenderUrlAsPdf(url) |
GlobalSettings.PaperSize |
RenderingOptions.PaperSize |
GlobalSettings.Orientation |
RenderingOptions.PaperOrientation |
MarginSettings |
MarginTop, MarginBottom 등 |
[page] 자리표시자 |
{page} 자리표시자 |
[toPage] 자리표시자 |
{total-pages} 자리표시자 |
RemotingToolset |
필요 없음 |
Win64EmbeddedDeployment |
필요 없음 |
TempFolderDeployment |
필요 없음 |
일반적인 마이그레이션 문제와 해결책
문제 1: 복잡한 초기화 코드
문제: TuesPechkin은 배포 툴셋과 함께 복잡한 변환기 설정을 필요로 합니다.
해결책: IronPDF는 간단합니다:
// Before (TuesPechkin)
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!
// Before (TuesPechkin)
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!
' Before (TuesPechkin)
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
' After (IronPDF)
Dim renderer = New ChromePdfRenderer()
' That's it!
문제 2: 스레드 안전성 충돌
문제: TuesPechkin의 ThreadSafeConverter은(는) 여전히 AccessViolationException에서 높은 부하로 충돌합니다.
해결책: IronPDF는 본래의 스레드 안전성을 갖추고 있으며 특별한 구성 없이 가능합니다:
//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes
//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes
'IronPDF is inherently thread-safe
Dim renderer As New ChromePdfRenderer()
' Use from any thread without crashes
문제 3: 페이지 번호 자리 표시자 구문
문제: TuesPechkin은 [page] 및 [toPage] 자리표시자를 사용합니다.
해결책: IronPDF의 자리 표시자 구문으로 업데이트하십시오:
// Before (TuesPechkin)
"Page [page] of [toPage]"
// After (IronPDF)
"Page {page} of {total-pages}"
// Before (TuesPechkin)
"Page [page] of [toPage]"
// After (IronPDF)
"Page {page} of {total-pages}"
문제 4: CSS 레이아웃 깨짐
문제: wkhtmltopdf가 Qt WebKit 4.8을 사용하기 때문에 Flexbox 및 Grid 레이아웃이 TuesPechkin에서 작동하지 않습니다.
해결책: IronPDF를 사용하여 적절한 최신 CSS를 사용하십시오:
// Remove table-based workarounds, use modern CSS
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!
// Remove table-based workarounds, use modern CSS
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!
' Remove table-based workarounds, use modern CSS
Dim html As String = "
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Works correctly with Chromium!
문제 5: 본래의 바이너리 관리
문제: TuesPechkin은 플랫폼별 wkhtmltopdf 바이너리 및 경로 구성을 필요로 합니다.
해결책: IronPDF는 NuGet을 통해 모든 종속성을 처리하므로 관리할 본래의 바이너리가 없습니다:
# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed
# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed
TuesPechkin마이그레이션 체크리스트
이동 전 작업
TuesPechkin 사용을 식별하기 위해 코드베이스를 감사하십시오:
grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .
grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .
현재 GlobalSettings 구성(용지 크기, 방향, 여백)을 문서화합니다. ObjectSettings 구성(HTML 콘텐츠, URL)을 문서화합니다. 변환을 위한 머리글/바닥글 구현을 식별하십시오. 제거를 위한 모든 wkhtmltopdf 바이너리를 찾으십시오.
코드 업데이트 작업
1.TuesPechkinNuGet 패키지 제거
- 네이티브 wkhtmltopdf 바이너리 제거
- IronPdf NuGet Install-Package
TuesPechkin에서IronPdf로 using 문 업데이트- 시작 시 라이선스 키 초기화 추가
- 변환기를
ChromePdfRenderer로 교체 GlobalSettings을(를)RenderingOptions으로 변환ObjectSettings을(를) 메서드 매개변수로 변환- 여백 구성을 개별 속성으로 업데이트
- HTML 기반
HtmlHeaderFooter으로 머리말/꼬리말 문법 업데이트 - 페이지 자리표시자 문법 수정 (
[page]→{page}) - 모든 배포/도구세트 코드 제거
마이그레이션 후 테스트
마이그레이션 후 다음 측면을 검증:
- 모든 단위 테스트 실행
- 스레드 안전 시나리오 테스트 (IronPDF는 다중 스레딩을 지원하여 크래시 없이 처리)
- PDF 출력 품질 비교 (Chromium은 더 정확하게 렌더링합니다)
- CSS 렌더링 확인 (Flexbox와 Grid가 이제 작동)
- JavaScript 실행 테스트 (ES6+ 이제 지원)
- 머리글/바닥글 렌더링 테스트
- 묶음 작업에 대한 성능 테스트
- wkhtmltopdf 바이너리가 남아 있지 않은지 확인하기 위한 보안 검사
IronPDF로 마이그레이션할 때의 주요 이점
TuesPechkin에서 IronPDF로 이동하면 여러 중요한 장점이 있습니다:
보안:CVE-2022-35583및 다른 wkhtmltopdf 취약점이 제거됨. IronPDF의 Chromium 엔진은 정기적인 보안 업데이트를 받습니다.
네이티브 스레드 안전성: 더 이상 복잡한 ThreadSafeConverter 설정이 필요하지 않습니다. 더 이상 부하 시 AccessViolationException 충돌이 없습니다. IronPDF는 동시성을 자동으로 처리합니다.
최신 렌더링 엔진: 전체 CSS3, Flexbox, Grid 및 ES6+ JavaScript 지원. PDF는 현대 브라우저에 나타나는 방식 그대로 렌더링됩니다.
간소화된 배포: 플랫폼별 바이너리를 관리할 필요가 없습니다. RemotingToolset, Win64EmbeddedDeployment 또는 TempFolderDeployment 의식이 없습니다. 단지 NuGet 패키지를 설치하세요.
활발한 개발: .NET 10 및 C# 14의 채택이 2026년까지 증가함에 따라 IronPDF의 정기 업데이트는 현재 및 미래의 .NET 버전과의 호환성을 보장합니다.
확장된 기능: TuesPechkin은 HTML을 PDF로 변환만 합니다. IronPDF는 PDF 조작, 디지털 서명, PDF/A 규격 준수, 양식 작성, 워터마크 및 병합/분할 작업을 추가합니다.

