using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
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.
// 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)
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+)
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 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ę...