C#에서 Winnovative에서 IronPDF로 마이그레이션하는 방법
Winnovative는 C# 응용 프로그램에 HTML-에서 PDF로 변환 기능을 제공하며 .NET PDF 생성 분야에서 잘 알려진 이름입니다. 그러나 장기 실행 Classic 라이브러리는 이전의 독점 렌더링 엔진에 의존하며, 그것의 현대 CSS(Grid, 최근 Flexbox) 및 현대 JavaScript(ES2017+)에 대한 지원은 최신 Chromium 브라우저에 비해 일관되지 않습니다. 공급업체의 대응은 클래식을 업그레이드하는 대신, 별도 Chromium 클래스 제품 Winnovative.Pdf.Next을(를) 선적하는 것이었습니다. 이는 기존 Winnovative 고객들이 양쪽 중 어느 쪽이든 코드 마이그레이션에 직면하게 됨을 의미합니다.
이 가이드는 Winnovative에서 IronPDF로의 마이그레이션 경로를 제공하며, .NET 개발자가 이 전환을 평가하는 데 필요한 단계별 지침, 코드 비교, 실용적인 예제를 제공합니다.
Winnovative에서 마이그레이션해야 하는 이유
Winnovative의 Classic 라이브러리는 최신 웹 표준으로 업데이트되지 않은 오래 된 독점 엔진을 사용합니다:
비일관된 CSS Grid / 최신 Flexbox: CSS Grid 또는 최근 Flexbox 기능에 의존하는 레이아웃은 최신 Chromium 브라우저에 비해 잘못 렌더링될 수 있습니다.
현대 JavaScript 호환성 격차: ES2017+ 기능 (화살표 함수, 비동기/대기, 클래스)이 신뢰할 수 없게 실행되어 React, Vue 및 다른 현대적 프레임워크에 영향을 미칩니다.
느린 진행: Classic 엔진은 렌더링 엔진의 갱신을 거의 받지 않습니다; 공급업체의 대답은 클래식을 기능적으로 동결시키고 별도 Winnovative.Pdf.Next Chromium 클래스 제품을 출하하는 것이었습니다.
이중 제품 마이그레이션 부담: Winnovative.Pdf.Next로 전환하는 것 자체가 재작성입니다. 새로운 API는 다른 네임스페이스(Winnovative.Pdf.Next) 아래에 존재하며 클래식과 이진 호환되지 않습니다.
글꼴 렌더링 에지 케이스: 웹 글꼴 및 사용자 지정 타이포그래피가 가끔씩 최신 브라우저와 다르게 렌더링됩니다.
실제 영향
Winnovative Classic에서 일관되지 않게 렌더링될 수 있는 현대 CSS 및 JavaScript:
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
<div>Column 1</div>
<div>Column 2</div>
<div>Column 3</div>
</div>
<script>
const items = data.map(item => item.name);
const result = await fetchData();
class Report { }
</script>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
<div>Column 1</div>
<div>Column 2</div>
<div>Column 3</div>
</div>
<script>
const items = data.map(item => item.name);
const result = await fetchData();
class Report { }
</script>
IronPDF대 Winnovative: 기능 비교
구조적 차이를 이해하면 기술 결정을 내리는데 이주 투자를 평가하는데 도움이 됩니다:
| 측면 | Winnovative Classic | IronPDF |
|---|---|---|
| 렌더링 엔진 | 오래 된 독점 엔진 | Chromium (최신) |
| CSS Grid | 비일관됨 | 풀 서포트 |
| Flexbox | 에지 케이스에서 비일관됨 | 풀 서포트 |
| JavaScript | 제한된 최신 JS | ES2024 |
| Bootstrap 5 | 레이아웃 문제 | 풀 서포트 |
| Tailwind CSS | 제한적 | 풀 서포트 |
| React/Vue SSR | 문제 발생 | 작업 |
| 웹 폰트 | 일부 환경에서 신뢰할 수 없음 | 풀 서포트 |
| 업데이트 | 드문드문함 | 월간 |
| 가격 책정 (개발자 당) | $450 배포 / $1,200 재배포 가능 | 자세한 내용은 ironpdf.com/pricing 참조 |
빠른 시작: Winnovative에서 IronPDF로의 마이그레이션
이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.
단계 1: NuGet 패키지 교체
모든 Winnovative 패키지를 제거하십시오 (프로젝트에서 실제로 사용하는 것을 확인하십시오):
# Remove Winnovative (Classic + related utilities)
dotnet remove package Winnovative.HtmlToPdf
# Also remove any of these your project references:
# dotnet remove package Winnovative.PdfMerge
# dotnet remove package Winnovative.PdfSecurity
# dotnet remove package Winnovative.Pdf.Next.Core
# dotnet remove package Winnovative.Client
# Remove Winnovative (Classic + related utilities)
dotnet remove package Winnovative.HtmlToPdf
# Also remove any of these your project references:
# dotnet remove package Winnovative.PdfMerge
# dotnet remove package Winnovative.PdfSecurity
# dotnet remove package Winnovative.Pdf.Next.Core
# dotnet remove package Winnovative.Client
IronPDF 설치하세요:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
단계 2: 네임스페이스 업데이트
Winnovative 네임스페이스를IronPDF네임스페이스로 교체하십시오:
// Before (Winnovative)
using Winnovative;
using Winnovative.WebKit;
// After (IronPDF)
using IronPdf;
// Before (Winnovative)
using Winnovative;
using Winnovative.WebKit;
// After (IronPDF)
using 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 라이브러리 간의 API 차이점을 보여줍니다.
Winnovative 접근법:
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
Console.WriteLine("PDF created successfully");
}
}
Imports Winnovative
Imports System
Module Program
Sub Main()
' Create the HTML to PDF converter
Dim htmlToPdfConverter As New HtmlToPdfConverter()
' Set license key
htmlToPdfConverter.LicenseKey = "your-license-key"
' Convert HTML string to PDF
Dim htmlString As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertHtml(htmlString, "")
' Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes)
Console.WriteLine("PDF created successfully")
End Sub
End Module
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Convert HTML string to PDF
Dim htmlString As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
' Save to file
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
Winnovative에서는 HtmlToPdfConverter을 생성하고, 인스턴스에 라이선스 키를 설정하며, 빈 기본 URL 매개 변수로 ConvertHtml()을 호출하여 원시 바이트를 받고, 이를 수동으로 파일에 저장해야 합니다. IronPDF는 이를 간소화하여 ChromePdfRenderer을 생성하고, RenderHtmlAsPdf()을 호출하며, 내장된 SaveAs() 메소드를 사용할 수 있습니다.
고급 HTML에서 PDF로의 시나리오는 HTML to PDF 변환 가이드를 참조하십시오.
URL을 PDF로 변환
URL-에서-PDF로의 변환은 유사한 패턴을 보입니다.
Winnovative 접근법:
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert URL to PDF
string url = "https://www.example.com";
byte[] pdfBytes = htmlToPdfConverter.ConvertUrl(url);
// Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL created successfully");
}
}
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert URL to PDF
string url = "https://www.example.com";
byte[] pdfBytes = htmlToPdfConverter.ConvertUrl(url);
// Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL created successfully");
}
}
Imports Winnovative
Imports System
Module Program
Sub Main()
' Create the HTML to PDF converter
Dim htmlToPdfConverter As New HtmlToPdfConverter()
' Set license key
htmlToPdfConverter.LicenseKey = "your-license-key"
' Convert URL to PDF
Dim url As String = "https://www.example.com"
Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertUrl(url)
' Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes)
Console.WriteLine("PDF from URL created successfully")
End Sub
End Module
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert URL to PDF
string url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save to file
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert URL to PDF
string url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save to file
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Convert URL to PDF
Dim url As String = "https://www.example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
' Save to file
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF from URL created successfully")
End Sub
End Class
Winnovative는 수동으로 저장해야 하는 바이트를 반환하는 ConvertUrl()을 사용합니다. IronPDF는 SaveAs()를 포함한 PdfDocument 객체와 함께 RenderUrlAsPdf()을 제공합니다.
URL to PDF 문서에서 인증 및 사용자 정의 헤더 옵션을 탐색하십시오.
헤더 및 풋터 추가
헤더와 푸터는 중요한 구조적 차이를 드러냅니다. Winnovative는 TextElement 객체를 사용하여 프로그래밍 요소 기반 접근 방식을 사용하며, IronPDF는 자리 표시자 토큰이 있는 HTML 기반 헤더를 사용합니다.
Winnovative 접근법:
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
using System.Drawing;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Enable header
htmlToPdfConverter.PdfDocumentOptions.ShowHeader = true;
htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60;
// Add header text
TextElement headerText = new TextElement(0, 0, "Document Header", new Font("Arial", 12));
htmlToPdfConverter.PdfHeaderOptions.AddElement(headerText);
// Enable footer
htmlToPdfConverter.PdfDocumentOptions.ShowFooter = true;
htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60;
// Add footer with page number
TextElement footerText = new TextElement(0, 0, "Page &p; of &P;", new Font("Arial", 10));
htmlToPdfConverter.PdfFooterOptions.AddElement(footerText);
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("document.pdf", pdfBytes);
Console.WriteLine("PDF with header and footer created successfully");
}
}
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
using System.Drawing;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Enable header
htmlToPdfConverter.PdfDocumentOptions.ShowHeader = true;
htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60;
// Add header text
TextElement headerText = new TextElement(0, 0, "Document Header", new Font("Arial", 12));
htmlToPdfConverter.PdfHeaderOptions.AddElement(headerText);
// Enable footer
htmlToPdfConverter.PdfDocumentOptions.ShowFooter = true;
htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60;
// Add footer with page number
TextElement footerText = new TextElement(0, 0, "Page &p; of &P;", new Font("Arial", 10));
htmlToPdfConverter.PdfFooterOptions.AddElement(footerText);
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("document.pdf", pdfBytes);
Console.WriteLine("PDF with header and footer created successfully");
}
}
Imports Winnovative
Imports System
Imports System.Drawing
Module Program
Sub Main()
' Create the HTML to PDF converter
Dim htmlToPdfConverter As New HtmlToPdfConverter()
' Set license key
htmlToPdfConverter.LicenseKey = "your-license-key"
' Enable header
htmlToPdfConverter.PdfDocumentOptions.ShowHeader = True
htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60
' Add header text
Dim headerText As New TextElement(0, 0, "Document Header", New Font("Arial", 12))
htmlToPdfConverter.PdfHeaderOptions.AddElement(headerText)
' Enable footer
htmlToPdfConverter.PdfDocumentOptions.ShowFooter = True
htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60
' Add footer with page number
Dim footerText As New TextElement(0, 0, "Page &p; of &P;", New Font("Arial", 10))
htmlToPdfConverter.PdfFooterOptions.AddElement(footerText)
' Convert HTML to PDF
Dim htmlString As String = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>"
Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertHtml(htmlString, "")
' Save to file
System.IO.File.WriteAllBytes("document.pdf", pdfBytes)
Console.WriteLine("PDF with header and footer created successfully")
End Sub
End Module
IronPDF 접근법:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 12
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("document.pdf");
Console.WriteLine("PDF with header and footer created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 12
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("document.pdf");
Console.WriteLine("PDF with header and footer created successfully");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Configure header and footer
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 12
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Page {page} of {total-pages}",
.FontSize = 10
}
' Convert HTML to PDF
Dim htmlString As String = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
' Save to file
pdf.SaveAs("document.pdf")
Console.WriteLine("PDF with header and footer created successfully")
End Sub
End Module
Winnovative는 PdfDocumentOptions.ShowHeader을 통해 헤더/푸터를 활성화하고, 높이를 설정하며, 좌표 위치와 System.Drawing.Font 객체가 있는 TextElement 객체를 생성하고, &p;와 &P; 자리 표시자를 사용해야 합니다. IronPDF는 CenterText과 FontSize 같은 간단한 속성을 가진 TextHeaderFooter 객체와 {page}과 {total-pages} 같은 직관적인 자리 표시자를 사용합니다.
전체 CSS 스타일링을 지원하는 HTML 기반 헤더는 헤더와 푸터 문서를 참조하세요.
Winnovative API와IronPDF매핑 참조
이 매핑은 직접적인 API 대응을 보여주어 마이그레이션을 가속화합니다:
| Winnovative 클래스 | IronPDF 동등 |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PdfDocument |
PdfDocument |
PdfDocumentOptions |
RenderingOptions |
PdfHeaderOptions |
HtmlHeaderFooter |
PdfFooterOptions |
HtmlHeaderFooter |
TextElement |
HTML in HtmlFragment |
ImageElement |
HTML <img> |
메서드 매핑
| Winnovative 메소드 | IronPDF 메소드 |
|---|---|
ConvertUrl(url) |
RenderUrlAsPdf(url) |
ConvertUrlToFile(url, path) |
RenderUrlAsPdf(url).SaveAs(path) |
ConvertHtml(html, baseUrl) |
RenderHtmlAsPdf(html) |
ConvertHtmlToFile(html, path) |
RenderHtmlAsPdf(html).SaveAs(path) |
ConvertHtmlFile(path) |
RenderHtmlFileAsPdf(path) |
MergePdf(streams) |
PdfDocument.Merge(pdfs) |
AppendPdf(pdf) |
pdf1.AppendPdf(pdf2) |
옵션 매핑
| Winnovative 옵션 | IronPDF 옵션 |
|---|---|
PdfPageSize.A4 |
PaperSize = PdfPaperSize.A4 |
PdfPageSize.Letter |
PaperSize = PdfPaperSize.Letter |
PdfPageOrientation.Portrait |
PaperOrientation = PdfPaperOrientation.Portrait |
PdfPageOrientation.Landscape |
PaperOrientation = PdfPaperOrientation.Landscape |
TopMargin = 20 |
MarginTop = 20 |
BottomMargin = 20 |
MarginBottom = 20 |
LeftMargin = 15 |
MarginLeft = 15 |
RightMargin = 15 |
MarginRight = 15 |
ShowHeader = true |
Set HtmlHeader property |
ShowFooter = true |
Set HtmlFooter property |
JavaScriptEnabled = true |
EnableJavaScript = true |
Page number &p; |
Page number {page} |
Total pages &P; |
Total pages {total-pages} |
일반적인 마이그레이션 문제와 해결책
문제 1: CSS 레이아웃이 다르게 보입니다
증상: Winnovative에서 '괜찮다'고 보였던 레이아웃이 IronPDF에서는 다르게 보입니다.
원인: Winnovative Classic의 오래된 독점 엔진에는 개발자들이 우회해야 했던 렌더링 버릇이 있습니다. IronPDF의 최신 Chromium 엔진은 이를 올바르게 렌더링합니다.
해결책: Winnovative 전용 CSS 해킹을 제거하고 표준 CSS를 사용하세요:
// Clean up legacy CSS
string cleanedHtml = html
.Replace("-webkit-flex", "flex")
.Replace("display: -webkit-box", "display: flex");
// Clean up legacy CSS
string cleanedHtml = html
.Replace("-webkit-flex", "flex")
.Replace("display: -webkit-box", "display: flex");
Dim cleanedHtml As String = html _
.Replace("-webkit-flex", "flex") _
.Replace("display: -webkit-box", "display: flex")
문제 2: JavaScript가 실행되지 않는 문제
증상: 동적 콘텐츠가 PDF에 나타나지 않습니다.
원인: JavaScript 대기 옵션을 명확히 구성해야 합니다.
해결책:
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.JavaScript(5000);
// Or wait for specific element
renderer.RenderingOptions.WaitFor.HtmlElementById("content-ready", 10000);
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.JavaScript(5000);
// Or wait for specific element
renderer.RenderingOptions.WaitFor.HtmlElementById("content-ready", 10000);
문제 3: 기본 URL이 작동하지 않음
증상: 이미지 및 CSS를 위한 상대적 URL이 해결되지 않습니다.
원인: IronPDF는 명확한 기본 URL 구성을 필요로 합니다.
해결책:
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = New Uri("https://example.com/")
문제 4: 페이지 구분이 다르게 나타남
증상: Winnovative와 다르게 콘텐츠가 분할됩니다.
원인: 서로 다른 렌더링 엔진이 페이지 구분을 다르게 처리합니다.
해결책: 명확한 CSS 페이지 구분 제어를 사용하세요:
/* Control page breaks explicitly */
.no-break {
page-break-inside: avoid;
}
.page-break-before {
page-break-before: always;
}
.page-break-after {
page-break-after: always;
}
문제 5: 폰트가 다르게 보입니다
증상: 예상했던 것과 다른 폰트로 텍스트가 나타납니다.
원인: IronPDF는 시스템 폰트를 사용합니다; 웹 폰트는 명시적으로 로딩해야 합니다.
해결책:
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
font-family: 'Roboto', Arial, sans-serif;
}
</style>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
font-family: 'Roboto', Arial, sans-serif;
}
</style>
Winnovative 마이그레이션 체크리스트
이동 전 작업
Winnovative 사용을 모두 식별하기 위해 코드베이스를 감사하세요:
# Find all Winnovative references
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
# Find all Winnovative references
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
현재 구성(페이지 크기, 여백, 헤더/푸터 설정 포함)을 문서화하세요. 삭제할 수 있는 CSS 해킹(웹킷 접두사, 플로트 기반 그리드)을 식별하세요. JavaScript 호환성 요구 사항을 확인하세요.
코드 업데이트 작업
- Winnovative NuGet 패키지를 제거하세요 2.IronPDF NuGet Install-Package
- 모든 네임스페이스 임포트
Winnovative을(를)IronPdf로 업데이트합니다. HtmlToPdfConverter을(를)ChromePdfRenderer으로 교체합니다.ConvertHtml()호출을RenderHtmlAsPdf()으로 변환합니다.ConvertUrl()호출을RenderUrlAsPdf()으로 변환합니다.- 페이지 크기/방향 설정을
RenderingOptions으로 업데이트합니다. - 여백 구성을 변환하세요
TextElement기반 헤더/푸터를 HTML 기반의TextHeaderFooter으로 마이그레이션합니다.- 페이지 번호 자리 표시자를
&P;에서{total-pages}으로 업데이트합니다. - 시작할 때IronPDF라이선스 초기화를 추가하세요
마이그레이션 후 테스트
마이그레이션 후 다음 측면을 검증:
- 기본 HTML에서 PDF 변환을 테스트하세요
- URL을 PDF로 변환 테스트
- CSS Grid 레이아웃이 올바르게 렌더링되는지 확인하십시오
- Flexbox 레이아웃이 올바르게 렌더링되는지 확인하십시오
- 최신 ES6+ 문법으로 JavaScript 중심의 페이지를 테스트하십시오
- Bootstrap 5 호환성을 확인하십시오
- 머리글/바닥글 렌더링 테스트
- 페이지 나누기 확인
- PDF 출력 품질 비교
정리 작업
- Winnovative CSS 해결 방법(webkit 접두사)를 제거하십시오
- ES5 JavaScript를 최신 문법으로 업데이트하세요
- 플로트 기반 그리드 대체를 제거하십시오
- 문서 업데이트
IronPDF로 마이그레이션할 때의 주요 이점
Winnovative에서 IronPDF로 전환하면 여러 가지 중요한 이점이 있습니다:
현대적 렌더링 엔진: IronPDF는 현재 크로미엄 엔진을 사용하여 전체 CSS3, CSS Grid, Flexbox 및ES2024JavaScript를 지원합니다. Bootstrap 5, Tailwind CSS, React/Vue와 같은 최신 프레임워크가 올바르게 렌더링됩니다.
간소화된 API: HTML 기반의 헤더와 푸터가 프로그래밍적 TextElement 위치를 대체합니다. 직관적인 자리 표시자 {page}이(가) 불분명한 &p; 문법을 대체합니다. 내장된 SaveAs() 메소드는 수동 바이트 처리를 제거합니다.
활발한 개발: IronPDF의 월간 업데이트는 현재와 다가오는 .NET 버전과의 호환성을 보장합니다.
해결책이 없는 최신 CSS: CSS Grid, Flexbox 및 최신 타이포그래피가 webkit 접두사 없이, 플로트 기반 대체 없이 작동합니다.
최신 JavaScript: 화살표 함수, 비동기/대기, 클래스 및 모듈을 포함한 ES6+ 기능이 올바르게 실행됩니다.

