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.
Przejście zQuestPDFnaIronPDFzmienia proces tworzenia plików PDF z zastrzeżonego, płynnego interfejsu API w języku C# na standardowe podejście oparte na HTML/CSS z rozbudowanymi możliwościami edycji plików PDF. Ten przewodnik zawiera kompletną, szczegółową ścieżkę migracji, która pozwala wykorzystać istniejące umiejętności internetowe, ponownie użyć szablonów HTML i uzyskać funkcje, którychQuestPDFpo prostu nie jest w stanie zapewnić.
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 niektórych podobnych narzędzi, które oferują kompleksowe możliwości konwersji HTML do PDF,QuestPDFogranicza się do programowych funkcji API związanych z układem strony.QuestPDFsprawdza się doskonale w sytuacjach, gdy programiści muszą generować dokumenty od podstaw przy użyciu kodu C#, bez polegania na HTML.
Biblioteka jest bezpłatna dla firm o przychodach poniżej 1 mln USD, ale wymaga udowodnienia tego poziomu przychodów, co dla niektórych może stanowić obciążenie związane z zapewnieniem zgodności z przepisami. Użytkownicy, którzy przekroczą ten próg, muszą zakupić licencję, co należy uwzględnić w długoterminowym planowaniu podczas ocenyQuestPDFjako potencjalnego rozwiązania.
Główny problem: brak obsługi HTML
QuestPDF jest często polecany do konwersji HTML na PDF, ale w ogóle nie obsługuje HTML. Pomimo intensywnej promocji na forach programistów,QuestPDFwykorzystuje własny, zastrzeżony język layoutu, który wymaga nauki zupełnie nowego DSL zamiast wykorzystania istniejących umiejętności internetowych.
| Funkcja | QuestPDF | IronPDF |
|---|---|---|
| HTML do PDF | NIE OBSŁUGIWANE | Obsługiwane |
| Stylizacja CSS | NIE OBSŁUGIWANE | 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ę | Nowy zastrzeżony język DSL | Przeniesienie umiejętności internetowych |
| Podgląd układu | Wymaga wtyczki IDE | Podgląd w dowolnej przeglądarce |
| Manipulacja plikami PDF | None | Łączenie, dzielenie, edycja |
IronPDF zapewnia natywne renderowanie HTML do PDF, czego całkowicie brakuje w QuestPDF, eliminując potrzebę ręcznej rekonstrukcji dokumentów w kodzie C#. Obejmuje to kompleksowe funkcje manipulacji plikami PDF (łączenie, dzielenie, edycja, zabezpieczanie), którychQuestPDFnie jest w stanie wykonać.
Model licencjonowania QuestPDF
"Licencja społecznościowa"QuestPDFjest bezpłatna tylko wtedy, gdy roczny przychód brutto Twojej firmy nie przekracza 1 miliona dolarów. Twoi klienci (nie tylko Ty jako programista) mogą być zobowiązani do zakupu licencji, jeśli przekroczą progi przychodów. W przeciwieństwie do zwykłej licencji komercyjnej na jednego programistę, modelQuestPDFwymaga ujawniania przychodów i monitorowania zgodności.
IronPDF oferuje prosty system licencjonowania: jedna licencja na programistę, brak audytów przychodów, brak wymagań dotyczących licencjonowania klientów oraz przejrzyste, przewidywalne koszty.
Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFzapewnia przejrzyste licencjonowanie bez audytów opartych na przychodach oraz standardowe podejście HTML/CSS, które wykorzystuje istniejące umiejętności w zakresie tworzenia stron internetowych.
Zanim zaczniesz
Wymagania wstępne
- Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
- Dostęp do NuGet: Możliwość instalowania pakietów NuGet
- 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
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"
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" .
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
Mapowania podstawowych interfejsów API
| KoncepcjaQuestPDF | OdpowiednikIronPDF |
|---|---|
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() |
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
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
Ten przykład ilustruje fundamentalną różnicę paradygmatyczną.QuestPDFwymaga opanowania jego płynnego API: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), ze stylizacją poprzez łańcuchowanie metod, jak .FontSize(20).Bold(). Należy również ustawić typ licencji za pomocą QuestPDF.Settings.License = LicenseType.Community.
IronPDF używa standardowego kodu HTML, który zna każdy programista stron internetowych: <h1> dla nagłówków, <p> dla akapitów. Nie trzeba uczyć się żadnego zastrzeżonego języka DSL. PodejścieIronPDFoferuje bardziej przejrzystą składnię i lepszą integrację z nowoczesnymi aplikacjami .NET. 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
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
QuestPDF używa .Column() i .Item() do formatowania, a .PaddingTop(20) do odstępów.IronPDFużywa standardowego kodu HTML: <h1> dla tytułu, <p> dla akapitów, <br/> dla odstępów i <strong> dla pogrubionego tekstu.
Prawdziwa zaleta: dziękiIronPDFprojektanci 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
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
QuestPDF wykorzystuje page.Header() i page.Footer() wraz z płynnymi metodami, takimi jak .AlignCenter() i .CurrentPageNumber().IronPDFwykorzystuje obiekty TextHeaderFooter z właściwościami takimi jak CenterText i FontSize. Symbol zastępczy {page} automatycznie wstawia bieżący numer strony.
Ważne uwagi dotyczące migracji
Zmiana paradygmatu
Podstawową zmianą jest przejście z zastrzeżonego języka DSL w C# na standardowy 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)
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() |
<table> element |
.PaddingTop(20) |
padding-top: 20px lub <br/> |
.AlignCenter() |
text-align: center |
.FontSize(24) |
font-size: 24px |
.Bold() |
font-weight: bold lub <strong> |
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
Nowe możliwości po migracji
Po migracji doIronPDFzyskujesz 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")
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")
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")
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")
Podsumowanie porównania funkcji
| Funkcja | QuestPDF | IronPDF |
|---|---|---|
| HTML do PDF | Nieobsługiwane | Główna funkcja |
| Krzywa uczenia się | Własny język DSL | Standardowe umiejętności w zakresie obsługi sieci WWW |
| Podgląd szablonu | Wymagana wtyczka | 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 | Nieobsługiwane | Obsługiwane |
| Bezpieczeństwo/Podpisywanie | Nieobsługiwane | Obsługiwane |
| Model licencyjny | Oparte na przychodach | Na programistę |
| Wpływ na klienta | Może być konieczne uzyskanie licencji | None |
| Bootstrap/Tailwind | Nieobsługiwane | Obsługiwane |
| URL do pliku PDF | Nieobsługiwane | Obsługiwane |
Lista kontrolna migracji
Przed migracją
- Zidentyfikuj wszystkie szablony dokumentówQuestPDF(
Document.Create,.GeneratePdf) - Udokumentuj użyte wzorce DSL (
.Column(),.Row(),.Table(),.Text()) - Przyporządkowanie metod stylizacji map do odpowiedników w CSS
- Uzyskaj klucz licencyjnyIronPDFze 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 - Zamień wzorzec
Document.Create()naChromePdfRenderer+ HTML - Zastąp
.Column()/.Row()przez CSS Flexbox - Zastąp
.Table()elementami HTML<table> - Zamień
.Text().Bold().FontSize(24)na<h1 style='...'> - Zastąp
page.Header()/page.Footer()przezTextHeaderFooter - Zastąp symbol zastępczy
.CurrentPageNumber()symbolem{page} - Zamień
.GeneratePdf()napdf.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, scalanie, konwersja URL na PDF)

