Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z QuestPDF do IronPDF w języku 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

Migracja zQuestPDFdo IronPDF przenosi twój workflow generowania PDF z C# API płynnego układu na standardowe podejście oparte na HTML/CSS z szerszymi możliwościami manipulacji PDF. Ten przewodnik dostarcza krok po kroku ścieżkę migracji, abyś mógł wykorzystać istniejące umiejętności webowe, ponownie użyć szablonów HTML i dodać funkcje, których rdzenna bibliotekaQuestPDFnie obejmuje.

Dlaczego warto przejść zQuestPDFna IronPDF

Zrozumienie QuestPDF

QuestPDF to nowoczesny, płynnie działający interfejs API stworzony specjalnie do programowego generowania plików PDF w języku C#. W przeciwieństwie do bibliotek oferujących kompleksową konwersję HTML na PDF, rdzenna bibliotekaQuestPDFjest ograniczona do programowego API układu.QuestPDFsprawdza się doskonale w sytuacjach, gdy programiści muszą generować dokumenty od podstaw przy użyciu kodu C#, bez polegania na HTML.

Tier społecznościowy jest darmowy w ramach warunków MIT dla osób indywidualnych, organizacji non-profit, FOSS i organizacji z rocznymi przychodami brutto poniżej 1 miliona USD. Powyżej tego proguQuestPDFoferuje licencję profesjonalną zaczynającą się od $999 (wieczysta, do 10 programistów) oraz licencję enterprise za $2,999 (wieczysta, ogólnofirmowa), które trzeba uwzględnić w długoterminowym planowaniu.

Główny problem: brak silnika HTML w rdzennej bibliotece

QuestPDF jest czasami polecane do konwersji HTML-do-PDF, ale podstawowa biblioteka nie renderuje HTML. Rozszerzenie utrzymywane przez społeczność QuestPDF.HTML obejmuje ograniczony podzbiór HTML/CSS, ale podstawowy silnik działa wyłącznie programowo i nie uruchamia prawdziwego silnika przeglądarki. Zespoły, które już mają szablony HTML/CSS, zazwyczaj muszą je przebudować w płynnej API.

Funkcja QuestPDF IronPDF
HTML-to-PDF (core) Nieobsługiwane (tylko płynne API) Pełne wsparcie
HTML-do-PDF (rozszerzenie) Częściowe za pomocą QuestPDF.HTML (ograniczony podzbiór) Pełne wsparcie
Stylizacja CSS Ograniczone przez rozszerzenie Pełny CSS3
Istniejące szablony Należy stworzyć od podstaw Ponowne wykorzystanie zasobów HTML/CSS
Kompatybilność narzędzi projektowych None Każde narzędzie do projektowania stron internetowych
Krzywa uczenia się Nowe płynne API w C# Przeniesienie umiejętności internetowych
Podgląd układu Aplikacja towarzysząca Podgląd w dowolnej przeglądarce
Manipulacja plikami PDF Łączenie / wyodrębnianie / nakładanie / szyfrowanie (API Operacji na Dokumentach, 2024.12.0+) Łączenie, dzielenie, edytowanie, podpisywanie

IronPDF zapewnia natywne renderowanie HTML-do-PDF, które nie jest zawarte w jądrze QuestPDF, eliminując potrzebę ręcznego odtwarzania dokumentów w kodzie C#. Oferuje także funkcje manipulacji PDF, takie jak łączenie, dzielenie, edytowanie, zabezpieczanie i podpisywanie cyfrowe — API Operacji na DokumentachQuestPDF(2024.12.0+) obejmuje łączenie, wyodrębnianie stron, nakładki/podkładki, załączniki i szyfrowanie, ale nie edytowanie istniejącej treści, OCR, czy podpisy cyfrowe.

Model licencjonowania QuestPDF

Licencja wspólnotowaQuestPDF(zgodna z MIT) jest darmowa dla osób indywidualnych, organizacji non-profit, projektów FOSS i organizacji o rocznym dochodzie brutto poniżej 1 mln USD. Powyżej tego progu potrzebna jest licencja Professional za 999 USD (wieczysta, do 10 deweloperów) lub Enterprise za 2 999 USD (wieczysta, dla całej organizacji). Ponieważ głównym czynnikiem jest przychód twojej organizacji, a nie liczba miejsc, może to zmienić rozmowy z klientami oraz twoje własne licencjonowanie.

IronPDF oferuje komercyjną licencję na dewelopera: bez audytów przychodów, bez wymagań licencyjnych dla klientów i przewidywalne koszty.

Dla zespołów przyjmujących nowoczesne wersje .NET,IronPDF oferuje licencjonowanie na dewelopera bez wyzwalaczy opartych na przychodach oraz standardowe podejście HTML/CSS, które wykorzystuje istniejące umiejętności tworzenia stron internetowych.


Zanim zaczniesz

Wymagania wstępne

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com

Zmiany w pakiecie 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

Konfiguracja licencji

// 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

Znajdź zastosowanie 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

Kompletna dokumentacija API

Zmiany w przestrzeni nazw

// 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

Mapowania podstawowych interfejsów API

KoncepcjaQuestPDF Odpowiednik 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() CSS`display: flex; flex-direction: column
.Row() CSS`display: flex; flex-direction: row
PageSizes.A4 RenderingOptions.PaperSize
.Margin() RenderingOptions.Margin*
.GeneratePdf() pdf.SaveAs()
Nie dotyczy PdfDocument.Merge()
Nie dotyczy PdfDocument.FromFile()
Nie dotyczy pdf.SecuritySettings

Przykłady migracji kodu

Przykład 1: Podstawowe tworzenie dokumentów (HTML do PDF)

Przed (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

Po (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

Ten przykład pokazuje różnicę w paradygmacie.QuestPDFwymaga nauki jego płynnej API: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), ze stylizacją metodą łańcuchów jak .FontSize(20).Bold(). Musisz również ustawić typ licencji za pomocą QuestPDF.Settings.License = LicenseType.Community.

IronPDF używa standardowego HTML, który każdy programista webowy zna:

dla nagłówków,

dla akapitów. Nie ma potrzeby nauki nowego DSL do układu. Podejście IronPDF oferuje czystszą składnię i integruje się z resztą nowoczesnego stosu .NET web. Kompleksowe przykłady można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Generowanie faktur

Przed (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

Po (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 używa .Column() i .Item() do układu, z .PaddingTop(20) do rozstawienia.IronPDF używa standardowego HTML:

dla tytułu,

dla akapitów,
do rozstawienia, i dla tekstu pogrubionego.

Prawdziwa zaleta: dzięki IronPDF projektanci mogą samodzielnie tworzyć i modyfikować szablony HTML. W przypadkuQuestPDFkażda zmiana projektu wymaga od programisty C# modyfikacji kodu. Dowiedz się więcej z naszych samouczków.

Przykład 3: Nagłówki i stopki z numerami stron

Przed (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

Po (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 używa page.Header() i page.Footer() z metodami płynnymi jak .AlignCenter() i .CurrentPageNumber().IronPDF używa obiektów TextHeaderFooter z właściwościami jak CenterText i FontSize. Symbol zastępczy {page} automatycznie wstawia aktualny numer strony.


Ważne uwagi dotyczące migracji

Zmiana paradygmatu

Główna zmiana to przejście z niestandardowego płynnego API układu w C# na standardowe 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

Konwersje wzorców układu

WzórQuestPDF Odpowiednik HTML/CSS
.Column() `display: flex; flex-direction: column
.Row() `display: flex; flex-direction: row
.RelativeItem() flex: 1
.Table() Element
.PaddingTop(20) padding-top: 20px lub
.AlignCenter() text-align: center
.FontSize(24) font-size: 24px
.Bold() font-weight: bold lub

Konwersja ustawień strony

// 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

Nowe możliwości po migracji

Po migracji do IronPDF zyskujesz możliwości, którychQuestPDFnie jest w stanie zapewnić:

Łączenie plików 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

Zabezpieczenia plików 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 do pliku 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

Wczytuj i edytuj istniejące pliki 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

Podsumowanie porównania funkcji

Funkcja QuestPDF IronPDF
HTML do PDF Core: nieobsługiwane (ograniczone przez QuestPDF.HTML rozszerzenie) Główna funkcja
Krzywa uczenia się Płynne API w C# Standardowe umiejętności w zakresie obsługi sieci WWW
Podgląd szablonu Aplikacja towarzysząca Dowolna przeglądarka
Współpraca przy projektowaniu Tylko dla programistów Projektanci + programiści
Istniejące zasoby Konieczna jest przebudowa Ponowne wykorzystanie HTML/CSS
Manipulacja plikami PDF Łączenie / wyodrębnianie / nakładanie (API Operacji na Dokumentach, 2024.12.0+) Obsługiwane
Bezpieczeństwo/Podpisywanie Szyfrowanie + uprawnienia (bez podpisania cyfrowego) Szyfrowanie + podpis cyfrowy
Model licencyjny Oparte na przychodach (próg 1 mln USD) Na programistę
Wpływ na klienta Może wymagać licencji powyżej przychodu 1 mln USD None
Bootstrap/Tailwind Nieobsługiwane Obsługiwane
URL do pliku PDF Nieobsługiwane Obsługiwane

Lista kontrolna migracji

Przed migracją

  • Identyfikuj wszystkie szablony dokumentówQuestPDF(Document.Create, .GeneratePdf)
  • Udokumentuj wzorce DSL używane (.Column(), .Row(), .Table(), .Text())
  • Przyporządkowanie metod stylizacji map do odpowiedników w CSS
  • Uzyskaj klucz licencyjny IronPDF ze strony ironpdf.com

Zmiany w pakiecie

  • Usuń pakiet NuGet QuestPDF
  • Zainstaluj pakiet NuGet IronPdf: dotnet add package IronPdf

Zmiany w kodzie

  • Zaktualizuj importy przestrzeni nazw
  • Usuń QuestPDF.Settings.License = LicenseType.Community
  • Przekształć wzorzec Document.Create() na ChromePdfRenderer + HTML
  • Zastąp .Column() / .Row() CSS Flexbox
  • Zastąp .Table() HTML elementami
  • Przekształć .Text().Bold().FontSize(24) na <h1 style='...'>
  • Zastąp page.Header() / page.Footer() TextHeaderFooter
  • Zastąp .CurrentPageNumber() symbolem zastępczym {page}
  • Przekształć .GeneratePdf() na pdf.SaveAs()
  • Dodaj inicjalizację licencji podczas uruchamiania aplikacji
  • Po migracji

    • Wizualne porównanie pliku PDF
    • Sprawdź wielostronicowe dokumenty pod kątem poprawności podziałów stron
    • W razie potrzeby dodaj nowe funkcje (zabezpieczenia, scałanie, konwersja URL na PDF)

    Zwróć uwagęQuestPDF jest znakiem towarowym jego właściciela. Ta strona nie jest powiązana z, zatwierdzona przez lub sponsorowana przez Codeux Software lub członków zespołu QuestPDF. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

    Curtis Chau
    Autor tekstów technicznych

    Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

    Czytaj więcej

    Zespół wsparcia Iron

    Jesteśmy online 24 godziny, 5 dni w tygodniu.
    Czat
    E-mail
    Zadzwoń do mnie