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

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# 코드를 사용하여 문서를 처음부터 생성해야 하는 시나리오에서 뛰어납니다.

이 라이브러리는 매출이 100만 달러 미만인 기업에게 무료로 제공되지만, 이 매출 수준을 입증해야 하는 요구 사항이 있으며, 이는 일부에게 준수 부담이 될 수 있습니다. 이 임계값을 초과하는 사용자는 장기적인 계획에 QuestPDF를 잠재적인 솔루션으로 평가할 때 고려되어야 할 라이센스를 구매해야 합니다.

핵심 문제: HTML 지원 없음

QuestPDF는 종종 HTML-to-PDF 변환을 위해 추천되지만, HTML을 전혀 지원하지 않습니다. 개발자 포럼에서 크게 홍보되었음에도 불구하고, QuestPDF는 웹 기술을 활용하는 대신 완전히 새로운 DSL을 배워야 하는 독점적인 레이아웃 언어를 사용합니다.

기능 QuestPDF IronPDF
HTML-에서-PDF 지원되지 않음 지원됨
CSS 스타일링 지원되지 않음 전체 CSS3
기존 템플릿 처음부터 다시 만들어야 함 HTML/CSS 자산 재사용
디자인 도구 호환성 없음 어떤 웹 디자인 도구나 사용 가능
학습 곡선 새로운 프로프라이어터리 DSL 웹 기술 이전
레이아웃 미리보기 IDE 플러그인 필요 어떤 브라우저에서든 미리보기 가능
PDF 조작 없음 병합, 분할, 편집

IronPDF는 QuestPDF가 완전히 제공하지 않는 네이티브 HTML-to-PDF 렌더링을 제공하여 C# 코드에서 문서를 수동으로 재구성할 필요가 없습니다. 병합, 분할, 편집, 보안 등 QuestPDF가 수행할 수 없는 포괄적인 PDF 조작 기능을 포함합니다.

QuestPDF라이센스 모델

QuestPDF의 '커뮤니티 라이센스'는 귀하의 회사가 연간 총 수익이 100만 달러 미만인 경우에만 무료입니다. 귀하의 고객(개발자인 귀하뿐만 아니라)은 수익 한도를 초과할 경우 라이센스를 구매해야 할 수도 있습니다. 단순한 개발자당 상업적 라이센스와 달리, QuestPDF의 모델은 수익 공개와 준수 추적을 요구합니다.

IronPDF는 간단한 라이센싱을 제공합니다: 개발자당 라이센스 하나, 수익 감사 없음, 고객 라이센스 요구사항 없음, 명확하고 예측 가능한 비용.

.NET 10 및 C# 14를 2025년과 2026년 동안 채택하려는 팀에게 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 <table>
.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는 유창한 API를 배우는 것을 요구합니다: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), .FontSize(20).Bold()과 같은 메소드 체이닝을 통해 스타일링을 합니다. 또한 QuestPDF.Settings.License = LicenseType.Community로 라이센스 유형을 설정해야 합니다.

IronPDF는 모든 웹 개발자가 아는 표준 HTML을 사용합니다: 제목에 <h1>, 단락에 <p>를 사용합니다. 배우기 위한 독점 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을 사용합니다: 제목에 <h1>, 단락에 <p>, 간격에 <br/>, 굵은 텍스트에 <strong>를 사용합니다.

진정한 이점: 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# DSL에서 표준 HTML/CSS로의 이동입니다:

// QuestPDF: Proprietary fluent 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: Proprietary fluent 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: Proprietary fluent 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() <table> 요소
.PaddingTop(20) padding-top: 20px 또는 <br/>
.AlignCenter() text-align: center
.FontSize(24) font-size: 24px
.Bold() font-weight: bold 또는 <strong>

페이지 설정 변환

// 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 지원되지 않음 주요 기능
학습 곡선 독점 DSL 표준 웹 기술
템플릿 미리보기 플러그인 필요 모든 브라우저
디자인 협업 개발자 전용 디자이너 + 개발자
기존 자산 다시 빌드 필요 HTML/CSS 재사용
PDF 조작 지원되지 않음 지원됨
보안/서명 지원되지 않음 지원됨
라이센스 모델 수익 기반 개발자 당
클라이언트 영향 라이선스 필요할 수 있음 없음
부트스트랩/테일윈드 지원되지 않음 지원됨
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 <table>요소로 대체하기
  • .Text().Bold().FontSize(24)<h1 style='...'>로 변환하기
  • page.Header() / page.Footer()TextHeaderFooter로 대체하기
  • .CurrentPageNumber(){page} 플레이스홀더로 대체하기
  • .GeneratePdf()pdf.SaveAs()로 변환하기
  • 애플리케이션 시작 시 라이선스 초기화 추가

마이그레이션 이후

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

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

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

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

아이언 서포트 팀

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