푸터 콘텐츠로 바로가기
마이그레이션 가이드

C#에서 Winnovative에서 IronPDF로 마이그레이션하는 방법

Winnovative는 C# 응용 프로그램에 HTML-에서 PDF로 변환 기능을 제공하며 .NET PDF 생성 분야에서 잘 알려진 이름입니다. 하지만 이 라이브러리는 2016년의 WebKit 엔진에 의존하여 현대 웹 개발에 상당한 도전을 제공합니다. Grid 레이아웃과 같은 현대 CSS 기능, 최신 JavaScript 구문, Bootstrap 5 및 Tailwind CSS와 같은 인기 프레임워크가 올바르게 렌더되지 않거나 전혀 렌더되지 않습니다.

이 가이드는 Winnovative에서 IronPDF로 이동하는 전체 마이그레이션 경로를 제공하며, 단계별 지침, 코드 비교 및 이 전환을 평가하는 전문 .NET 개발자를 위한 실용적인 예제를 포함하고 있습니다.

Winnovative에서 마이그레이션해야 하는 이유

Winnovative는 2016년의 WebKit 엔진에 의존하여 현대 웹 응용 프로그램에 심각한 문제를 발생시킵니다:

CSS Grid 지원 없음: Bootstrap 5, Tailwind CSS 및 현대 레이아웃이 완전히 깨집니다. CSS Grid를 사용하는 페이지는 예상대로 렌더링되지 않습니다.

버그 있는 Flexbox 구현: 현대 브라우저와 비교하여 일관되지 않은 렌더링을 합니다. 개발자들은 종종 Winnovative에만 존재하는 레이아웃 문제를 디버깅하는 데 몇 시간을 소비합니다.

ES5 JavaScript만: 현대 ES6+ JavaScript 기능 (화살표 함수, async/await, 클래스)는 조용히 실패합니다. 이로 인해 React, Vue 및 기타 현대 프레임워크는 종종 오류가 있는 출력을 생성합니다.

정체된 개발: "Winnovative"라는 이름이 혁신을 암시함에도 불구하고, 이 제품은 최근 몇 년 동안 최소한의 업데이트만 있었습니다.

폰트 렌더링 문제: 웹 폰트 및 사용자 지정 타이포그래피가 자주 부정확하게 렌더링되거나 전혀 렌더링되지 않습니다.

보안 문제: 2016년의 WebKit 엔진은 수년 간의 보안 패치와 취약점 수정이 부족합니다.

실제 영향

현대 CSS 및 JavaScript는 Winnovative에서 단순히 작동하지 않습니다:


<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); // Arrow functions: FAIL
const result = await fetchData(); // Async/await: FAIL
class Report { } // Classes: FAIL
</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); // Arrow functions: FAIL
const result = await fetchData(); // Async/await: FAIL
class Report { } // Classes: FAIL
</script>
HTML

IronPDF대 Winnovative: 기능 비교

구조적 차이를 이해하면 기술 결정을 내리는데 이주 투자를 평가하는데 도움이 됩니다:

측면 Winnovative IronPDF
렌더링 엔진 WebKit (2016) Chromium (최신)
CSS Grid 지원되지 않음 풀 서포트
Flexbox 오류가 많음 풀 서포트
JavaScript ES5만 ES2024
Bootstrap 5 깨짐 풀 서포트
Tailwind CSS 지원되지 않음 풀 서포트
React/Vue SSR 문제 발생 완벽하게 작동
웹 폰트 신뢰할 수 없음 풀 서포트
업데이트 드문드문함 월간
가격 $750-$1,600 경쟁적

빠른 시작: Winnovative에서 IronPDF로의 마이그레이션

이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.

단계 1: NuGet 패키지 교체

모든Winnovative패키지 제거:

# Remove Winnovative
dotnet remove package Winnovative.WebKitHtmlToPdf
dotnet remove package Winnovative.HtmlToPdf
dotnet remove package Winnovative.WebToPdfConverter
# Remove Winnovative
dotnet remove package Winnovative.WebKitHtmlToPdf
dotnet remove package Winnovative.HtmlToPdf
dotnet remove package Winnovative.WebToPdfConverter
SHELL

IronPDF 설치하세요:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

단계 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
$vbLabelText   $csharpLabel

단계 3: 라이선스 초기화

애플리케이션 시작 시 라이선스 초기화를 추가합니다:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

코드 마이그레이션 예제

HTML을 PDF로 변환

가장 일반적인 사용 사례는 이러한 .NET PDF 라이브러리 간의 API 차이점을 보여줍니다.

Winnovative 접근법:

// NuGet: Install-Package Winnovative.WebToPdfConverter
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.WebToPdfConverter
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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Winnovative는 HtmlToPdfConverter을 생성하고, 인스턴스에 라이선스 키를 설정하고, 빈 기본 URL 매개변수와 함께 ConvertHtml()을 호출하여 원시 바이트를 받고 파일에 수동으로 작성해야 합니다. IronPDF는 이를 단순화합니다: ChromePdfRenderer을 생성하고, RenderHtmlAsPdf()을 호출하고, 내장된 SaveAs() 메서드를 사용합니다.

고급 HTML에서 PDF로의 시나리오는 HTML to PDF 변환 가이드를 참조하십시오.

URL을 PDF로 변환

URL-에서-PDF로의 변환은 유사한 패턴을 보입니다.

Winnovative 접근법:

// NuGet: Install-Package Winnovative.WebToPdfConverter
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.WebToPdfConverter
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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Winnovative는 수동으로 저장되어야 하는 바이트를 반환하는 ConvertUrl()을 사용합니다. IronPDF는 SaveAs()를 포함하는 PdfDocument 객체와 함께 RenderUrlAsPdf()를 제공합니다.

URL to PDF 문서에서 인증 및 사용자 정의 헤더 옵션을 탐색하십시오.

헤더 및 풋터 추가

헤더와 푸터는 중요한 구조적 차이를 드러냅니다. Winnovative는 TextElement 객체를 사용하여 프로그램적 요소 기반 접근 방식을 사용하고, IronPDF는 자리 표시자 토큰이 있는 HTML 기반의 헤더를 사용합니다.

Winnovative 접근법:

// NuGet: Install-Package Winnovative.WebToPdfConverter
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.WebToPdfConverter
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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Winnovative는 PdfDocumentOptions.ShowHeader를 통해 헤더/푸터를 활성화하고, 높이를 설정하고, 좌표 위치와 System.Drawing.Font 객체가 있는 TextElement 객체를 생성하고, &p;&P; 자리 표시자를 사용해야 합니다. IronPDF는 TextHeaderFooter 객체와 같이 CenterTextFontSize 같은 간단한 속성을 사용하고, {page}{total-pages}처럼 직관적인 자리 표시자를 사용합니다.

전체 CSS 스타일링을 지원하는 HTML 기반 헤더는 헤더와 푸터 문서를 참조하세요.

WinnovativeAPI와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의 2016 WebKit에 개발자들이 해결책을 찾던 렌더링 버그가 있었습니다. IronPDF는 현대 표준에 따라 정확하게 렌더링합니다.

해결책: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")
$vbLabelText   $csharpLabel

문제 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);
$vbLabelText   $csharpLabel

문제 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/")
$vbLabelText   $csharpLabel

문제 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>
HTML

Winnovative마이그레이션 체크리스트

이동 전 작업

Winnovative 사용을 모두 식별하기 위해 코드베이스를 감사하세요:

# Find allWinnovativereferences
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
# Find allWinnovativereferences
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
SHELL

현재 구성(페이지 크기, 여백, 헤더/푸터 설정 포함)을 문서화하세요. 삭제할 수 있는 CSS 해킹(웹킷 접두사, 플로트 기반 그리드)을 식별하세요. JavaScript 호환성 요구 사항을 확인하세요.

코드 업데이트 작업

1.WinnovativeNuGet 패키지를 제거하세요

  1. IronPdf NuGet 패키지를 설치하세요
  2. Winnovative에서 IronPdf로 모든 네임스페이스 가져오기를 업데이트합니다.
  3. HtmlToPdfConverterChromePdfRenderer로 교체합니다.
  4. ConvertHtml() 호출을 RenderHtmlAsPdf()로 변환합니다.
  5. ConvertUrl() 호출을 RenderUrlAsPdf()로 변환합니다.
  6. 페이지 크기/방향 설정을 RenderingOptions로 업데이트합니다.
  7. 여백 구성을 변환하세요
  8. TextElement 기반 헤더/푸터를 HTML 기반 TextHeaderFooter로 마이그레이션합니다.
  9. 페이지 번호 자리 표시자를 &P;에서 {total-pages}로 업데이트합니다.
  10. 시작할 때IronPDF라이선스 초기화를 추가하세요

마이그레이션 후 테스트

마이그레이션 후 다음 측면을 검증:

  • 기본 HTML에서 PDF 변환을 테스트하세요
  • URL을 PDF로 변환 테스트
  • CSS 그리드 레이아웃을 올바르게 렌더링하는지 확인하세요 (이제 작동합니다)
  • Flexbox 레이아웃이 제대로 렌더링되는지 확인하십시오 (이제 작동할 것입니다)
  • 최신 ES6+ 문법으로 JavaScript 중심의 페이지를 테스트하십시오
  • Bootstrap 5 호환성을 확인하십시오
  • 머리글/바닥글 렌더링 테스트
  • 페이지 나누기 확인
  • PDF 출력 품질 비교

정리 작업

-WinnovativeCSS 해결 방법(webkit 접두사)를 제거하십시오

  • ES5 JavaScript를 최신 문법으로 업데이트하세요
  • 플로트 기반 그리드 대체를 제거하십시오
  • 문서 업데이트

IronPDF로 마이그레이션할 때의 주요 이점

Winnovative에서 IronPDF로 전환하면 여러 가지 중요한 이점이 있습니다:

현대적 렌더링 엔진: IronPDF는 현재 크로미엄 엔진을 사용하여 전체 CSS3, CSS Grid, Flexbox 및ES2024JavaScript를 지원합니다. Bootstrap 5, Tailwind CSS, React/Vue와 같은 최신 프레임워크가 올바르게 렌더링됩니다.

간소화된 API: HTML 기반 헤더와 푸터가 프로그램적 TextElement 위치 지정을 대체합니다. {page}와 같은 직관적인 자리 표시자는 &p; 구문의 불명확함을 대체합니다. 내장된 SaveAs() 메서드는 수동 바이트 처리를 제거합니다.

활발한 개발: .NET 10 및 C# 14 채택이 2026년까지 증가함에 따라 IronPDF의 월간 업데이트는 현재 및 미래의 .NET 버전과의 호환성을 보장합니다.

해결책이 없는 최신 CSS: CSS Grid, Flexbox 및 최신 타이포그래피가 webkit 접두사 없이, 플로트 기반 대체 없이 작동합니다.

최신 JavaScript: 화살표 함수, 비동기/대기, 클래스 및 모듈을 포함한 ES6+ 기능이 올바르게 실행됩니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해