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

QuestPDF에서 IronPDF로의 마이그레이션 방법 (C#)

Full Comparison

Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against QuestPDF on pricing, HTML support, and licensing.

View Full Comparison

QuestPDF에서 IronPDF로의 마이그레이션은 PDF 생성 워크플로우를 C# 유창한 레이아웃 API에서 더 넓은 PDF 조작 기능을 갖춘 표준 HTML/CSS 기반 접근 방식으로 이동시킵니다. 이 가이드는 기존 웹 기술을 활용하고, HTML 템플릿을 재사용하며,QuestPDF코어 라이브러리가 포함하지 않은 기능을 사용할 수 있도록 하는 단계별 마이그레이션 경로를 제공합니다.

QuestPDF에서 IronPDF로 마이그레이션하는 이유

QuestPDF이해하기

QuestPDF는 C#에서 프로그래밍 방식으로 PDF를 생성하기 위해 특수하게 제작된 현대적인 유창한 API입니다. 포괄적인 HTML-to-PDF 변환을 제공하는 라이브러리와 달리 QuestPDF의 코어 라이브러리는 프로그래매틱 레이아웃 API로 제한됩니다. QuestPDF는 개발자가 HTML에 의존하지 않고 C# 코드를 사용하여 문서를 처음부터 생성해야 하는 시나리오에서 뛰어납니다.

커뮤니티 티어는 개인, 비영리 단체, FOSS 프로젝트 및 연간 총 수익이 100만 달러 미만인 조직에 MIT 조건 하에서 무료입니다. 이 임계값을 초과하는 경우 QuestPDF는 $999(영구적으로 최대 10명의 개발자)에서 시작하는 Professional 라이선스와 $2,999(영구적으로 조직 전반)의 Enterprise 라이선스를 제공하며, 장기 계획에 고려해야 합니다.

핵심 문제: 코어 라이브러리에 HTML 엔진 없음

QuestPDF는 때때로 HTML-to-PDF 변환을 위해 추천되지만, 코어 라이브러리는 HTML을 렌더링하지 않습니다. 커뮤니티에서 유지 관리되는 QuestPDF.HTML 확장자는 HTML/CSS의 제한된 부분을 다루며, 핵심 엔진은 프로그래밍 방식으로만 작동하고 실제 브라우저 엔진을 실행하지 않습니다. 이미 HTML/CSS 템플릿을 보유한 팀은 일반적으로 유창한 API에서 이를 재구축해야 합니다.

기능 QuestPDF IronPDF
HTML-to-PDF (코어) 지원되지 않음 (유연한 API만) 전체 지원
HTML-to-PDF (확장) 부분적으로 QuestPDF.HTML (제한된 부분) 전체 지원
CSS 스타일링 확장을 통한 제한적 지원 전체 CSS3
기존 템플릿 처음부터 다시 만들어야 함 HTML/CSS 자산 재사용
디자인 도구 호환성 None 어떤 웹 디자인 도구나 사용 가능
학습 곡선 새로운 유연한 C# API 웹 기술 이전
레이아웃 미리보기 동반 앱 어떤 브라우저에서든 미리보기 가능
PDF 조작 병합 / 추출 / 오버레이 / 암호화 (문서 작업 API, 2024.12.0+) 병합, 분할, 편집, 서명

IronPDF는QuestPDF코어에 포함되지 않은 네이티브 HTML-to-PDF 렌더링을 제공하여 C# 코드에서 문서를 수동으로 재구성할 필요를 제거합니다. 병합, 분할, 편집, 보안, 디지털 서명 같은 PDF 조작 기능도 다루는데, QuestPDF의 문서 작업 API(2024.12.0+)는 병합, 페이지 추출, 오버레이/언더레이, 첨부 파일 및 암호화를 다루지만, 기존 페이지 콘텐츠 편집, OCR, 디지털 서명은 다루지 않습니다.

QuestPDF라이센스 모델

QuestPDF의 커뮤니티 라이선스(MIT 조건)는 개인, 비영리 단체, FOSS 프로젝트 및 연간 총 수익이 100만 달러 미만인 조직에게 무료입니다. 이 임계값을 초과하는 경우, $999(영구적으로 최대 10명의 개발자)의 Professional 라이선스나 조직 전반을 대상으로 하는 Enterprise 라이선스가 필요합니다. 트리거는 좌석 수가 아닌 조직의 수익이기 때문에, 이는 하류 클라이언트 대화를 변경할 수 있으며, 자신의 라이선스도 변경할 수 있습니다.

IronPDF는 수익 감사를 하지 않고, 클라이언트 라이선스 요구 사항이 없으며, 예측 가능한 비용을 가진 개발자별 상업용 라이선스를 제공합니다.

최신 .NET 버전을 채택하는 팀에게는 IronPDF가 수익 기반 트리거 없이 개발자별 라이선스를 제공하며, 기존 웹 개발 기술을 활용하는 표준 HTML/CSS 접근 방식을 제공합니다.


시작하기 전에

필수 조건

  1. .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
  3. IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요

NuGet 패키지 변경 사항

# Remove QuestPDF
dotnet remove package QuestPDF

# Add IronPDF
dotnet add package IronPdf
# Remove QuestPDF
dotnet remove package QuestPDF

# Add IronPDF
dotnet add package IronPdf
SHELL

라이선스 구성

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

QuestPDF사용 찾기

# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
SHELL

완전한 API 참조

네임스페이스 변경

// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

// After: IronPDF
using IronPdf;
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

// After: IronPDF
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

핵심 API 매핑

QuestPDF 개념 IronPDF 동등
Document.Create() new ChromePdfRenderer()
.Page() RenderHtmlAsPdf()
.Text() HTML <p>, <h1>, <span>
.Bold() CSS font-weight: bold
.FontSize(24) CSS font-size: 24px
.Image() HTML <img src="...">
.Table() HTML
.Column() CSSdisplay: flex; flex-direction: column
.Row() CSSdisplay: flex; flex-direction: row
PageSizes.A4 RenderingOptions.PaperSize
.Margin() RenderingOptions.Margin*
.GeneratePdf() pdf.SaveAs()
해당 없음 PdfDocument.Merge()
해당 없음 PdfDocument.FromFile()
해당 없음 pdf.SecuritySettings

코드 마이그레이션 예제

예제 1: 기본 문서 생성 (HTML-to-PDF)

이전 (QuestPDF):

// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

class Program
{
    static void Main()
    {
        QuestPDF.Settings.License = LicenseType.Community;

        Document.Create(container =>
        {
            container.Page(page =>
            {
                page.Size(PageSizes.A4);
                page.Margin(2, Unit.Centimetre);
                page.Content().Column(column =>
                {
                    column.Item().Text("Hello World").FontSize(20).Bold();
                    column.Item().Text("This is a paragraph of text.");
                });
            });
        }).GeneratePdf("output.pdf");
    }
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

class Program
{
    static void Main()
    {
        QuestPDF.Settings.License = LicenseType.Community;

        Document.Create(container =>
        {
            container.Page(page =>
            {
                page.Size(PageSizes.A4);
                page.Margin(2, Unit.Centimetre);
                page.Content().Column(column =>
                {
                    column.Item().Text("Hello World").FontSize(20).Bold();
                    column.Item().Text("This is a paragraph of text.");
                });
            });
        }).GeneratePdf("output.pdf");
    }
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure

Module Program
    Sub Main()
        QuestPDF.Settings.License = LicenseType.Community

        Document.Create(Sub(container)
                            container.Page(Sub(page)
                                               page.Size(PageSizes.A4)
                                               page.Margin(2, Unit.Centimetre)
                                               page.Content().Column(Sub(column)
                                                                         column.Item().Text("Hello World").FontSize(20).Bold()
                                                                         column.Item().Text("This is a paragraph of text.")
                                                                     End Sub)
                                           End Sub)
                        End Sub).GeneratePdf("output.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예제는 패러다임 차이를 보여줍니다. QuestPDF는 Document.Create(), container.Page(), page.Content().Column(), column.Item().Text()과 같은 유창한 API를 배우는 것이 요구되며, .FontSize(20).Bold()와 같은 메서드 체인을 통해 스타일링을 합니다. 또한 QuestPDF.Settings.License = LicenseType.Community와 함께 라이선스 유형을 설정해야 합니다.

IronPDF는 모든 웹 개발자가 아는 표준 HTML을 사용합니다: 제목에는

를, 문단에는

를 사용합니다. 새로운 레이아웃 DSL을 배울 필요가 없습니다. IronPDF의 접근 방식은 더 간결한 문법을 제공하며, 현대 .NET 웹 스택의 나머지와 통합됩니다. HTML에서 PDF로의 문서에서 포괄적인 예제를 참조하세요.

예제 2: 송장 생성

이전 (QuestPDF):

// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

class Program
{
    static void Main()
    {
        QuestPDF.Settings.License = LicenseType.Community;

        Document.Create(container =>
        {
            container.Page(page =>
            {
                page.Size(PageSizes.A4);
                page.Margin(2, Unit.Centimetre);
                page.Content().Column(column =>
                {
                    column.Item().Text("INVOICE").FontSize(24).Bold();
                    column.Item().Text("Invoice #: 12345").FontSize(12);
                    column.Item().PaddingTop(20);
                    column.Item().Text("Customer: John Doe");
                    column.Item().Text("Total: $100.00").Bold();
                });
            });
        }).GeneratePdf("invoice.pdf");
    }
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

class Program
{
    static void Main()
    {
        QuestPDF.Settings.License = LicenseType.Community;

        Document.Create(container =>
        {
            container.Page(page =>
            {
                page.Size(PageSizes.A4);
                page.Margin(2, Unit.Centimetre);
                page.Content().Column(column =>
                {
                    column.Item().Text("INVOICE").FontSize(24).Bold();
                    column.Item().Text("Invoice #: 12345").FontSize(12);
                    column.Item().PaddingTop(20);
                    column.Item().Text("Customer: John Doe");
                    column.Item().Text("Total: $100.00").Bold();
                });
            });
        }).GeneratePdf("invoice.pdf");
    }
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure

Module Program
    Sub Main()
        QuestPDF.Settings.License = LicenseType.Community

        Document.Create(Sub(container)
                            container.Page(Sub(page)
                                               page.Size(PageSizes.A4)
                                               page.Margin(2, Unit.Centimetre)
                                               page.Content().Column(Sub(column)
                                                                         column.Item().Text("INVOICE").FontSize(24).Bold()
                                                                         column.Item().Text("Invoice #: 12345").FontSize(12)
                                                                         column.Item().PaddingTop(20)
                                                                         column.Item().Text("Customer: John Doe")
                                                                         column.Item().Text("Total: $100.00").Bold()
                                                                     End Sub)
                                           End Sub)
                        End Sub).GeneratePdf("invoice.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = @"
            <h1>INVOICE</h1>
            <p>Invoice #: 12345</p>
            <br/>
            <p>Customer: John Doe</p>
            <p><strong>Total: $100.00</strong></p>
        ";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("invoice.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = @"
            <h1>INVOICE</h1>
            <p>Invoice #: 12345</p>
            <br/>
            <p>Customer: John Doe</p>
            <p><strong>Total: $100.00</strong></p>
        ";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("invoice.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim htmlContent As String = "
            <h1>INVOICE</h1>
            <p>Invoice #: 12345</p>
            <br/>
            <p>Customer: John Doe</p>
            <p><strong>Total: $100.00</strong></p>
        "

        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("invoice.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

QuestPDF는 레이아웃에 .Column().Item()를 사용하고, 간격에는 .PaddingTop(20)를 사용합니다. IronPDF는 표준 HTML을 사용합니다: 제목에는

를, 문단에는

를, 간격에는
를, 굵은 텍스트에는 를 사용합니다.

진정한 이점: IronPDF를 사용하면 디자이너가 HTML 템플릿을 독립적으로 생성하고 수정할 수 있습니다. QuestPDF를 사용하면 모든 디자인 변경에 C# 개발자가 코드를 수정해야 합니다. 더 많은 정보를 보려면 튜토리얼을 참조하세요.

예제 3: 페이지 번호가 있는 헤더와 푸터

이전 (QuestPDF):

// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

class Program
{
    static void Main()
    {
        QuestPDF.Settings.License = LicenseType.Community;

        Document.Create(container =>
        {
            container.Page(page =>
            {
                page.Size(PageSizes.A4);
                page.Margin(2, Unit.Centimetre);

                page.Header().Text("Document Header").FontSize(14).Bold();

                page.Content().Text("Main content of the document.");

                page.Footer().AlignCenter().Text(text =>
                {
                    text.Span("Page ");
                    text.CurrentPageNumber();
                });
            });
        }).GeneratePdf("document.pdf");
    }
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

class Program
{
    static void Main()
    {
        QuestPDF.Settings.License = LicenseType.Community;

        Document.Create(container =>
        {
            container.Page(page =>
            {
                page.Size(PageSizes.A4);
                page.Margin(2, Unit.Centimetre);

                page.Header().Text("Document Header").FontSize(14).Bold();

                page.Content().Text("Main content of the document.");

                page.Footer().AlignCenter().Text(text =>
                {
                    text.Span("Page ");
                    text.CurrentPageNumber();
                });
            });
        }).GeneratePdf("document.pdf");
    }
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure

Module Program
    Sub Main()
        QuestPDF.Settings.License = LicenseType.Community

        Document.Create(Sub(container)
                            container.Page(Sub(page)
                                               page.Size(PageSizes.A4)
                                               page.Margin(2, Unit.Centimetre)

                                               page.Header().Text("Document Header").FontSize(14).Bold()

                                               page.Content().Text("Main content of the document.")

                                               page.Footer().AlignCenter().Text(Sub(text)
                                                                                    text.Span("Page ")
                                                                                    text.CurrentPageNumber()
                                                                                End Sub)
                                           End Sub)
                        End Sub).GeneratePdf("document.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = "<p>Main content of the document.</p>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        pdf.Header = new TextHeaderFooter()
        {
            CenterText = "Document Header",
            FontSize = 14
        };

        pdf.Footer = new TextHeaderFooter()
        {
            CenterText = "Page {page}"
        };

        pdf.SaveAs("document.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = "<p>Main content of the document.</p>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        pdf.Header = new TextHeaderFooter()
        {
            CenterText = "Document Header",
            FontSize = 14
        };

        pdf.Footer = new TextHeaderFooter()
        {
            CenterText = "Page {page}"
        };

        pdf.SaveAs("document.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim htmlContent As String = "<p>Main content of the document.</p>"

        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

        pdf.Header = New TextHeaderFooter() With {
            .CenterText = "Document Header",
            .FontSize = 14
        }

        pdf.Footer = New TextHeaderFooter() With {
            .CenterText = "Page {page}"
        }

        pdf.SaveAs("document.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

QuestPDF는 page.Header()page.Footer()를 사용하며, .AlignCenter().CurrentPageNumber()와 같은 유창한 메서드를 사용합니다. IronPDF는 TextHeaderFooter 객체를 사용하며, 속성으로 CenterTextFontSize를 사용합니다. {page} 자리 표시자는 현재 페이지 번호를 자동으로 삽입합니다.


중요한 마이그레이션 노트

패러다임 전환

핵심적인 변화는 사용자 지정 C# 유창한 레이아웃 API에서 표준 HTML/CSS로의 이동입니다:

// QuestPDF: Fluent C# layout API
container.Page(page =>
{
    page.Content().Column(column =>
    {
        column.Item().Text("Invoice").Bold().FontSize(24);
        column.Item().Row(row =>
        {
            row.RelativeItem().Text("Customer:");
            row.RelativeItem().Text("Acme Corp");
        });
    });
});

// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
    <h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
    <div style='display: flex; justify-content: space-between;'>
        <span>Customer:</span>
        <span>Acme Corp</span>
    </div>
</div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// QuestPDF: Fluent C# layout API
container.Page(page =>
{
    page.Content().Column(column =>
    {
        column.Item().Text("Invoice").Bold().FontSize(24);
        column.Item().Row(row =>
        {
            row.RelativeItem().Text("Customer:");
            row.RelativeItem().Text("Acme Corp");
        });
    });
});

// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
    <h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
    <div style='display: flex; justify-content: space-between;'>
        <span>Customer:</span>
        <span>Acme Corp</span>
    </div>
</div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' QuestPDF: Fluent VB.NET layout API
container.Page(Sub(page)
    page.Content().Column(Sub(column)
        column.Item().Text("Invoice").Bold().FontSize(24)
        column.Item().Row(Sub(row)
            row.RelativeItem().Text("Customer:")
            row.RelativeItem().Text("Acme Corp")
        End Sub)
    End Sub)
End Sub)

' IronPDF: Standard HTML/CSS
Dim html As String = "
<div style='font-family: Arial; padding: 40px;'>
    <h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
    <div style='display: flex; justify-content: space-between;'>
        <span>Customer:</span>
        <span>Acme Corp</span>
    </div>
</div>"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

레이아웃 패턴 변환

QuestPDF패턴 HTML/CSS 상응
.Column() display: flex; flex-direction: column
.Row() display: flex; flex-direction: row
.RelativeItem() flex: 1
.Table() 요소
.PaddingTop(20) padding-top: 20px 또는
.AlignCenter() text-align: center
.FontSize(24) font-size: 24px
.Bold() font-weight: bold 또는

페이지 설정 변환

// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);

// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;    // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);

// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;    // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
' QuestPDF
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)

' IronPDF
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20 ' mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
$vbLabelText   $csharpLabel

이동 후 새로운 기능

IronPDF로 마이그레이션 후, QuestPDF가 제공하지 않는 기능을 얻습니다:

PDF 병합

var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");

var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");

var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
Dim cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>")
Dim content = renderer.RenderHtmlAsPdf(reportHtml)
Dim existing = PdfDocument.FromFile("appendix.pdf")

Dim merged = PdfDocument.Merge(cover, content, existing)
merged.SaveAs("complete.pdf")
$vbLabelText   $csharpLabel

PDF 보안

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "reader"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

URL에서 PDF로

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;

var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;

var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True

Dim pdf = renderer.RenderUrlAsPdf("https://example.com/report")
pdf.SaveAs("webpage.pdf")
$vbLabelText   $csharpLabel

기존 PDF 로드 및 편집

var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
Dim pdf = PdfDocument.FromFile("existing.pdf")
' Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf")
$vbLabelText   $csharpLabel

기능 비교 요약

기능 QuestPDF IronPDF
HTML-에서-PDF 코어: 지원되지 않음 (QuestPDF.HTML 확장을 통해 제한됨) 주요 기능
학습 곡선 유연한 C# API 표준 웹 기술
템플릿 미리보기 동반 앱 모든 브라우저
디자인 협업 개발자 전용 디자이너 + 개발자
기존 자산 다시 빌드 필요 HTML/CSS 재사용
PDF 조작 병합 / 추출 / 오버레이 (문서 작업 API, 2024.12.0+) 지원됨
보안/서명 암호화 + 권한 (디지털 서명 없음) 암호화 + 디지털 서명
라이센스 모델 수익 기반 (100만 달러 임계값) 개발자 당
클라이언트 영향 수익이 100만 달러 이상일 경우 라이선스가 필요할 수 있음 None
부트스트랩/테일윈드 지원되지 않음 지원됨
URL을 PDF로 지원되지 않음 지원됨

마이그레이션 체크리스트

사전 마이그레이션

  • 모든QuestPDF문서 템플릿 식별 (Document.Create, .GeneratePdf)
  • 사용된 DSL 패턴 문서 (.Column(), .Row(), .Table(), .Text())
  • 스타일링 메서드를 CSS 등가로 매핑
  • ironpdf.com에서IronPDF라이선스 키 획득

패키지 변경 사항

  • QuestPDF NuGet 패키지를 제거합니다
  • IronPdf NuGet Install-Package: dotnet add package IronPdf

코드 변경 사항

  • 네임스페이스 가져오기 업데이트
  • QuestPDF.Settings.License = LicenseType.Community 제거
  • Document.Create() 패턴을 ChromePdfRenderer + HTML로 변환
  • .Column() / .Row()를 CSS Flexbox로 대체
  • .Table()을 HTML 요소로 대체
  • .Text().Bold().FontSize(24)<h1 style='...'>로 변환
  • page.Header() / page.Footer()TextHeaderFooter로 대체
  • .CurrentPageNumber(){page} 자리 표시자로 대체
  • .GeneratePdf()pdf.SaveAs()로 변환
  • 애플리케이션 시작 시 라이선스 초기화 추가
  • 마이그레이션 이후

    • PDF 출력의 시각적 비교
    • 올바른 페이지 구분을 위한 다중 페이지 문서 테스트
    • 필요에 따라 새 기능 추가(보안, 병합, URL-to-PDF)

    참고해 주세요QuestPDF는 해당 소유자의 상표입니다. 이 사이트는 Codeux Software 또는QuestPDF유지보수자와 관련이 없으며, 그들로부터 승인받거나 후원받지 않았습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

    Curtis Chau
    기술 문서 작성자

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

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

    아이언 서포트 팀

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