PORóWNANIE

DynamicPDF a IronPDF: Przewodnik po porównaniu technicznym

Kiedy programiści .NET oceniają biblioteki do generowania i edycji plików PDF,DynamicPDFwyróżnia się jako sprawdzona opcja z szerokim zakresem funkcji. Jednak jego fragmentaryczny model produktówy — wymagający oddzielnych licencji dla różnych funkcji — sprawia, że wiele zespołów rozważa alternatywne rozwiązania.IronPDFoferuje kompleksowe rozwiązanie z nowoczesnym renderowaniem opartym na HTML/CSS, które konsoliduje funkcjonalność w jednym pakiecie.

W niniejszym porównaniu przeanalizowano obie biblioteki pod kątem istotnych aspektów technicznych, aby pomóc profesjonalnym programistom i architektom w podjęciu świadomej decyzji dotyczącej ich potrzeb w zakresie obsługi plików PDF w środowisku .NET.

Zrozumienie DynamicPDF

DynamicPDF to Suite narzędzi do obsługi plików PDF w ekosystemie .NET, która od wielu lat służy programistom. Platforma cieszy się uznaniem dzięki swoim zaawansowanym funkcjom i rozbudowanym możliwościom, a także bogatej historii niezawodnych usług.

SuiteDynamicPDFobejmuje wiele produktów dostosowanych do konkretnych operacji związanych z plikami PDF: Generator do tworzenia plików PDF od podstaw, Merger do łączenia i edycji istniejących plików PDF, HTML Converter do konwersji HTML na PDF, ReportWriter do generowania raportów oraz Print Manager do programowego drukowania. Chociaż komponenty te oferują zaawansowane możliwości, są sprzedawane osobno, co powoduje fragmentację doświadczenia użytkownika, który musi zarządzać wieloma licencjami i wersjami produktów.

Biblioteka wykorzystuje podejście oparte na współrzędnych, w którym programiści umieszczają elementy w określonych współrzędnych X, Y na stronie, co wymaga podania konkretnych wartości szerokości i wysokości dla każdego elementu.

Zrozumienie IronPDF

IronPDF to biblioteka .NET do obsługi plików PDF, która łączy generowanie, scałanie i edycję plików PDF w jednym spójnym pakiecie. Eliminuje to konieczność radzenia sobie z fragmentarycznymi produktami i różnorodnymi licencjami.

IronPDF wykorzystuje nowoczesny silnik renderujący Chromium do konwersji HTML na PDF, wykorzystując technologie internetowe (HTML, CSS, JavaScript) do tworzenia układu dokumentu zamiast pozycjonowania opartego na współrzędnych. Biblioteka natywnie obsługuje .NET Framework 4.6.2+, .NET Core 3.1+ oraz .NET 6/7/8/9+, a wszystkie funkcje są dokładnie opisane w ujednoliconej dokumentacji.

Porównanie modeli produktów i licencji

Podstawowa różnica strukturalna między tymi bibliotekami .NET do obsługi plików PDF polega na organizacji produktów.

AspektDynamicPDFIronPDF
Model produktuFragmentaryczne (5+ produktów)Biblioteka typu "wszystko w jednym"
LicencjonowanieWymagane są liczne licencjeLicencja pojedyncza
HTML do PDFOddzielny zakup dodatkuWbudowany, oparty na Chromium
Obsługa CSSOgraniczone (wymaga dodatku)Pełna obsługa CSS3 z Flexbox/Grid
Styl APIPozycjonowanie oparte na współrzędnychHTML/CSS + API do manipulacji
Krzywa uczenia sięSteep (wiele interfejsów API)Gentle (technologie internetowe)
Nowoczesny .NET.NET Standard 2.0.NET 6/7/8/9+ natywne
DokumentacjaRozłożone na produktyUjednolicona dokumentacja

Odrębne produktyDynamicPDFobejmują:

  • DynamicPDF Generator: Twórz pliki PDF od podstaw
  • DynamicPDF Merger: Łączenie, dzielenie i edycja istniejących plików PDF
  • DynamicPDF Core Suite: połączony generator i narzędzie do scałania
  • DynamicPDF HTML Converter: konwersja HTML do PDF (oddzielny dodatek)
  • DynamicPDF ReportWriter: Generowanie raportów
  • DynamicPDF Print Manager: drukowanie plików PDF programowo

Kompletne rozwiązanie PDF może wymagać 3–5 oddzielnych licencji w przypadku DynamicPDF.IronPDFzawiera równoważną funkcjonalność w jednym pakiecie.

Porównanie kodu: typowe operacje na plikach PDF

Konwersja HTML do PDF

Konwersja treści HTML do formatu PDF ilustruje różnice w podejściu do API.

DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.Conversion

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim converter As New HtmlConverter(html)
        converter.Convert("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Aby korzystać z tej funkcji w programie DynamicPDF, wymagany jest oddzielny pakiet dodatków HTML Converter.IronPDFzawiera konwersję HTML do PDF jako funkcję wbudowaną, korzystając z silnika renderującego Chromium, przy czym metoda RenderHtmlAsPdf() zwraca obiekt PdfDocument, który można dalej manipulować przed zapisaniem.

Aby uzyskać informacje na temat zaawansowanych opcji renderowania HTML, zapoznaj się z przewodnikiem dotyczącym konwersji HTML do PDF.

Operacje łączenia plików PDF

Połączenie wielu dokumentów PDF pokazuje różne wzorce API.

DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.Merger

Class Program
    Shared Sub Main()
        Dim document As New MergeDocument("document1.pdf")
        document.Append("document2.pdf")
        document.Draw("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")
        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

DynamicPDF używa klasy MergeDocument z przestrzeni nazw Merger (wymaga osobnej licencji Merger).IronPDFużywa statycznej metody PdfDocument.Merge(), która akceptuje wiele obiektów PdfDocument załadowanych za pomocą FromFile(). Oba podejścia pozwalają na tworzenie dokumentów scałanych, ale funkcja scałania wIronPDFjest dostępna bez konieczności wykupywania dodatkowej licencji.

Zapoznaj się z dodatkowymi operacjami scałania w dokumentacji dotyczącej scałania plików PDF.

Dodawanie tekstu do plików PDF

Tworzenie dokumentów z tekstem pokazuje różnicę między podejściem opartym na współrzędnych a podejściem opartym na HTML.

DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.PageElements

Class Program
    Shared Sub Main()
        Dim document As New Document()
        Dim page As New Page(PageSize.Letter)
        Dim label As New Label("Hello from DynamicPDF!", 0, 0, 504, 100)
        page.Elements.Add(label)
        document.Pages.Add(page)
        document.Draw("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>")
        Dim textStamper As New TextStamper() With {
            .Text = "Hello from IronPDF!",
            .FontSize = 20,
            .VerticalAlignment = VerticalAlignment.Top
        }
        pdf.ApplyStamp(textStamper)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

DynamicPDF używa pozycjonowania opartego na współrzędnych z elementami Label dodanymi do obiektów Page w określonych współrzędnych X, Y z określonymi wartościami szerokości i wysokości (0, 0, 504, 100).IronPDFużywa TextStamper z właściwościami wyrównania lub renderowania treści opartego na HTML. Podejście oparte na HTML pozwala programistom zaznajomionym z technologiami internetowymi projektować dokumenty przy użyciu CSS do pozycjonowania i stylizacji.

Odniesienie do mapowania metod

Dla programistów rozważających migrację doDynamicPDFlub porównujących możliwości, poniższe zestawienie przedstawia równoważne operacje:

Mapowanie klas podstawowych

DynamicPDFIronPDF
Document + PageChromePdfRenderer
Label, TextAreaHTML <p>, <div>
Table2HTML <table>
MergeDocumentPdfDocument.Merge()
HtmlConverterChromePdfRenderer
document.Draw()pdf.SaveAs() / pdf.BinaryData

Mapowanie operacji na dokumentach

DynamicPDFIronPDF
document.Draw("file.pdf")pdf.SaveAs("file.pdf")
document.Draw() → byte[]pdf.BinaryData
pdfDoc.Pages[i].GetText()pdf.ExtractTextFromPage(i)
Aes256Securitypdf.SecuritySettings
form.Fields["name"]pdf.Form.GetFieldByName("name")

Składnia numeracji stron

DynamicPDFIronPDF
%%CP%% (bieżąca strona){page}
%%TP%% (łącznie stron){total-pages}

Mapowanie przestrzeni nazw

Przestrzeń nazwDynamicPDFOdpowiednikIronPDF
ceTe.DynamicPDFIronPdf
ceTe.DynamicPDF.PageElementsElementy HTML
ceTe.DynamicPDF.MergerIronPdf
ceTe.DynamicPDF.ConversionIronPdf
ceTe.DynamicPDF.CryptographyIronPdf (SecuritySettings)
ceTe.DynamicPDF.FormsIronPdf (właściwość Form)

Podsumowanie porównania funkcji

FunkcjaDynamicPDFIronPDF
Tworzenie plików PDF od podstawTak (Generator)Tak
Konwersja HTML do PDFTak (osobny dodatek)Tak (wbudowane)
Łączenie/dzielenie plików PDFTak (Merger)Tak
Wypełnianie formularzyTakTak
Wyodrębnianie tekstuTakTak
Podpisy cyfroweTakTak
Szyfrowanie/hasłaTakTak
Znaki wodneTakTak
Nagłówki/stopkiTakTak (oparty na HTML)
Numeracja stronTak (%%CP%%)Tak ({page})

The Shift: oparte na współrzędnych vs HTML/CSS

Najistotniejsza różnica międzyDynamicPDFaIronPDFpolega na ich fundamentalnym podejściu do układu dokumentu.

Podejście oparte na współrzędnych DynamicPDF

Document document = new Document();
Page page = new Page(PageSize.Letter);
Label label = new Label("Hello", 100, 200, 300, 50, Font.Helvetica, 12);
page.Elements.Add(label);
document.Pages.Add(page);
document.Draw("output.pdf");
Document document = new Document();
Page page = new Page(PageSize.Letter);
Label label = new Label("Hello", 100, 200, 300, 50, Font.Helvetica, 12);
page.Elements.Add(label);
document.Pages.Add(page);
document.Draw("output.pdf");
Dim document As New Document()
Dim page As New Page(PageSize.Letter)
Dim label As New Label("Hello", 100, 200, 300, 50, Font.Helvetica, 12)
page.Elements.Add(label)
document.Pages.Add(page)
document.Draw("output.pdf")
$vbLabelText   $csharpLabel

DynamicPDF wymaga określenia dokładnych pozycji pikseli (X=100, Y=200) i wymiarów (szerokość=300, wysokość=50) dla każdego elementu. Zapewnia to precyzyjną kontrolę, ale wymaga starannego obliczenia i dostosowania w przypadku zmiany układu.

PodejścieIronPDFdo HTML/CSS

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='margin-left:100px'>Hello</h1>");
pdf.SaveAs("output.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='margin-left:100px'>Hello</h1>");
pdf.SaveAs("output.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='margin-left:100px'>Hello</h1>")
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

IronPDF wykorzystuje technologie internetowe, które są już znane większości programistów. Złożone układy wykorzystują CSS Flexbox, Grid lub tradycyjne pozycjonowanie, a silnik Chromium renderuje je dokładnie tak, jak przeglądarki wyświetlają treści.

Kiedy zespoły rozważają przejście zDynamicPDFna IronPDF

Zespoły programistów rozważają przejście zDynamicPDFnaIronPDFz kilku powodów:

Konsolidacja licencji: Zarządzanie 3–5 oddzielnymi licencjamiDynamicPDFpowoduje obciążenie administracyjne i złożoność kosztów. Pojedyncza licencjaIronPDFobejmuje wszystkie funkcje, co upraszcza proces zakupu i śledzenie zgodności.

Znajomość HTML/CSS: Zespoły z doświadczeniem w tworzeniu stron internetowych uważają podejście oparte na HTML stosowane przezIronPDFza bardziej intuicyjne niż pozycjonowanie oparte na współrzędnych. Istniejące szablony HTML można przekonwertować do formatu PDF bez konieczności przeprojektowywania.

Wsparcie dla nowoczesnego .NET:IronPDFzapewnia natywną obsługę .NET 6/7/8/9+, podczas gdyDynamicPDFjest przeznaczony dla .NET Standard 2.0. Zespoły tworzące nowoczesne aplikacje korzystają z natywnych optymalizacji środowiska uruchomieniowego.

Usunięcie dodatków: Konwerter HTML firmyDynamicPDFjest dostępny w osobnej sprzedaży.IronPDFoferuje konwersję HTML do PDF jako podstawową funkcję z pełną obsługą CSS3, w tym układów Flexbox i Grid.

Ujednolicona dokumentacja: Nauka obsługiDynamicPDFwymaga przeglądania dokumentacji rozproszonej po wielu produktach. Ujednolicona dokumentacjaIronPDFobejmuje wszystkie funkcje w jednym miejscu.

Uproszczenie API: Konwersja wielu klasDynamicPDF(Document, Page, Label, MergeDocument, HtmlConverter) do uproszczonego APIIronPDFzmniejsza złożoność kodu i obciążenie związane z utrzymaniem.

Mocne strony i kwestie do rozważenia

Atuty DynamicPDF

  • Ugruntowana reputacja: wieloletnia obecność na rynku, regularne aktualizacje i niezawodna obsługa
  • Kompleksowe funkcje: szerokie możliwości tworzenia, edycji i drukowania plików PDF
  • Elastyczność użytkowania: Obsługuje zarówno nowoczesne frameworki .NET Framework, jak i starsze
  • Precyzyjna kontrola: pozycjonowanie oparte na współrzędnych umożliwia precyzyjne rozmieszczenie elementów

Uwagi dotyczące DynamicPDF

  • Fragmentacja produktów: oddzielne licencje dla Generator, Merger, HTML Converter i innych produktów
  • Złożony system cenowy: Korzystanie z wielu licencji zwiększa koszty związane z uzyskaniem pełnej funkcjonalności
  • Starsza baza kodu: może nie zawsze być zgodna z najnowszymi .NET Standards
  • Oddzielna dokumentacja: Informacje rozproszone w zasobach dotyczących poszczególnych produktów
  • Krzywa uczenia się: Wiele interfejsów API wymaga opanowania różnych wzorców dla różnych operacji

Atuty IronPDF

  • Pakiet "wszystko w jednym": jedna biblioteka zastępuje 3–5 pakietów DynamicPDF
  • Modern Rendering: silnik Chromium z pełną obsługą CSS3
  • Technologie internetowe: podejście oparte na HTML/CSS znane programistom stron internetowych
  • Uproszczone licencjonowanie: jedna licencja obejmuje wszystkie funkcje
  • Modern .NET: Natywna obsługa .NET 6/7/8/9+
  • Ujednolicony interfejs API: spójne wzorce we wszystkich operacjach
  • Kompleksowe zasoby: obszerne samouczki i dokumentacja

Uwagi dotyczące IronPDF

  • Zmiana paradygmatu: Układy oparte na współrzędnych wymagają konwersji do HTML/CSS
  • Inne numerowanie stron: Używa składni {page} zamiast %%CP%%

Wnioski

Zarówno DynamicPDF, jak iIronPDFzapewniają programistom .NET szerokie możliwości związane z obsługą plików PDF, ale reprezentują różne podejścia do organizacji produktu i układu dokumentów.DynamicPDFoferuje sprawdzoną niezawodność dzięki swojej zróżnicowanej Suite produktów, wymagając jednocześnie wielu licencji i wiedzy specjalistycznej w zakresie pozycjonowania opartego na współrzędnych.

IronPDF stanowi nowoczesną alternatywę dzięki pakietowi typu "wszystko w jednym", renderowaniu opartemu na HTML/CSS oraz uproszczonemu systemówi licencjonowania. Dla zespołów poszukujących konsolidacji licencji, znajomości technologii internetowych lub usprawnionych interfejsów API,IronPDFspełnia te konkretne wymagania.

Jako że organizacje planują na .NET 10, C# 14 i rozwój aplikacji do 2026 roku, wybór zależy od konkretnych priorytetów. Zespoły, które zainwestowały w ekosystemDynamicPDFz gotowymi szablonami opartymi na współrzędnych, mogą nadal czerpać z niego korzyści. W przypadku większości nowoczesnych aplikacji, w których dominują technologie internetowe i liczy się prostota licencji,IronPDFzapewnia bardziej spójne podejście.

Zacznij testować IronPDF, korzystając z bezpłatnej wersji próbnej, i zapoznaj się z obszerną dokumentacją, aby ocenić, czy rozwiązanie to spełnia Twoje konkretne wymagania.

Zwróć uwagęDynamicPDF jest zarejestrowanym znakiem towarowym swojego właściciela. Ta strona nie jest powiązana z, popierana ani sponsorowana przez ceTe Software. 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.