Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z DynamicPDF do IronPDF w języku C#

Dlaczego warto przejść zDynamicPDFna IronPDF?

Fragmentacja produktówDynamicPDFstanowi główny czynnik motywujący do migracji. Zrozumienie modelu licencyjnego jest niezbędne do oceny rzeczywistych kosztów obecnej implementacji.

Problem fragmentacji produktów

DynamicPDF jest sprzedawany jako oddzielne produkty z oddzielnymi licencjami:

  1. DynamicPDF Generator: Twórz pliki PDF od podstaw
  2. DynamicPDF Merger: Łączenie, dzielenie i edycja istniejących plików PDF (do nabycia osobno)
  3. DynamicPDF Core Suite: połączony generator i narzędzie do scalania
  4. DynamicPDF ReportWriter: Generowanie raportów
  5. DynamicPDF HTML Converter: konwersja HTML na PDF (oddzielny dodatek)
  6. DynamicPDF Print Manager: drukowanie plików PDF programowo

Kompletne rozwiązanie PDF wymaga 3–5 oddzielnych licencji DynamicPDF.IronPDFzawiera wszystko w jednym pakiecie.

Porównanie architektur

Aspekt DynamicPDF IronPDF
Model produktu Fragmentaryczne (5+ produktów) Biblioteka typu "wszystko w jednym"
Licencjonowanie Wymagane są liczne licencje Licencja pojedyncza
HTML do PDF Oddzielny zakup dodatku Wbudowany, oparty na Chromium
Obsługa CSS Ograniczone (wymaga dodatku) Pełna obsługa CSS3 z Flexbox/Grid
Styl API Pozycjonowanie oparte na współrzędnych HTML/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

Kluczowe korzyści z migracji

  1. Pojedynczy pakiet: Jeden pakiet NuGet zastępuje 3–5 pakietów DynamicPDF
  2. Nowoczesne renderowanie: silnik Chromium a renderowanie tradycyjne
  3. Technologie internetowe: Użyj HTML/CSS zamiast pozycjonowania opartego na współrzędnych
  4. Prostsze API: mniej kodu, większa czytelność, łatwiejsza konserwacja
  5. Brak konieczności dokupowania dodatków: HTML, scalanie, zabezpieczenia – wszystko w cenie

Przygotowania przed migracją

Wymagania wstępne

Upewnij się, że Twoje środowisko spełnia następujące wymagania:

  • .NET Framework 4.6.2+ lub .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ lub VS Code z rozszerzeniem C#
  • Dostęp do menedżera pakietów NuGet
  • Klucz licencyjnyIronPDF(bezpłatna wersja próbna dostępna na stronie ironpdf.com)

Audyt wykorzystania DynamicPDF

Uruchom te polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do DynamicPDF:

# Find allDynamicPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
# Find allDynamicPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
SHELL

Typowe pakiety, na które należy zwrócić uwagę:

  • ceTe.DynamicPDF.CoreSuite.NET
  • ceTe.DynamicPDF.Generator.NET
  • ceTe.DynamicPDF.Merger.NET
  • ceTe.DynamicPDF.HtmlConverter.NET

Zrozumienie zmiany paradygmatu

Najważniejszą zmianą przy migracji zDynamicPDFdoIronPDFjest fundamentalne podejście do tworzenia dokumentów.DynamicPDFwykorzystuje pozycjonowanie oparte na współrzędnych, w którym elementy umieszcza się w określonych współrzędnych X,Y na stronie.IronPDFwykorzystuje renderowanie HTML/CSS, co pozwala projektować przy użyciu technologii internetowych.

Ta zmiana paradygmatu oznacza konwersję elementów Label, TextArea i Table2 na ich odpowiedniki HTML — zmiana, która zazwyczaj skutkuje bardziej czytelnym i łatwiejszym w utrzymaniu kodem.

Proces migracji krok po kroku

Krok 1: Zaktualizuj pakiety NuGet

Usuń wszystkie pakietyDynamicPDFi zainstaluj IronPDF:

# RemoveDynamicPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
# RemoveDynamicPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Krok 2: Aktualizacja odniesień do przestrzeni nazw

Zastąp przestrzenie nazwDynamicPDFna IronPDF:

// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

Krok 3: Skonfiguruj licencję

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Kompletna dokumentacja API

Mapowanie klas podstawowych

KlasaDynamicPDF OdpowiednikIronPDF
Document ChromePdfRenderer
Document PdfDocument
Page HTML <div> z podziałem strony
MergeDocument PdfDocument.Merge()
HtmlConverter ChromePdfRenderer

Mapowanie elementów strony do HTML

DynamicPDFPageElement IronPDF/HTML Equivalent
Label <p>, <span>, <div>
TextArea <div>, <p> z CSS
Image <img> tag
Table2 HTML <table>
PageNumberingLabel {page} / {total-pages} symbole zastępcze

Kluczowe mapowania API

DynamicPDF IronPDF
Document + Page ChromePdfRenderer
Label, TextArea HTML <p>, <div>
Table2 HTML <table>
MergeDocument PdfDocument.Merge()
HtmlConverter ChromePdfRenderer
document.Draw() pdf.SaveAs() / pdf.BinaryData
PageNumberingLabel %%CP%% {page} miejsce na tekst

Przykłady migracji kodu

Konwersja HTML do PDF

Konwersja HTML do PDF pokazuje, żeDynamicPDFwymaga osobnego dodatku HtmlConverter, w przeciwieństwie do wbudowanego renderowania Chromium w IronPDF.

Wdrożenie 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

Wdrożenie 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

ChromePdfRenderer firmyIronPDFzapewnia renderowanie oparte na silniku Chromium z pełną obsługą CSS3 — nie wymaga zakupu oddzielnego dodatku. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji HTML do PDF.

Łączenie wielu plików PDF

Łączenie plików PDF ilustruje różnicę między klasą MergeDocument wDynamicPDF(wymagającą licencji na produkt Merger) a wbudowaną statyczną metodą Merge w IronPDF.

Wdrożenie 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

Wdrożenie 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

Metoda statyczna Merge bibliotekiIronPDFakceptuje bezpośrednio wiele obiektów PdfDocument. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą scalania plików PDF.

Dodawanie tekstu do plików PDF

Umiejscowienie tekstu ilustruje zmianę paradygmatu z elementów Label opartych na współrzędnych wDynamicPDFna elementy TextStamper oparte na HTML w IronPDF.

Wdrożenie 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

Wdrożenie 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

Funkcja TextStamper wIronPDFzapewnia pozycjonowanie oparte na wyrównaniu zamiast na współrzędnych, dzięki czemu układy są bardziej elastyczne w przypadku różnych rozmiarów stron. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą znaków wodnych i stempli.

Przykład kompletnego generowania dokumentu

Ten obszerny przykład pokazuje konwersję dokumentuDynamicPDFzawierającego wiele elementów do formatu HTML przy użyciu biblioteki IronPDF.

Wdrożenie DynamicPDF:

using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.PageElements
Imports ceTe.DynamicPDF.Merger

' Generation (requires Generator license)
Dim document As New Document()
Dim page As New Page(PageSize.A4)
Dim title As New Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18)
title.Align = TextAlign.Center
page.Elements.Add(title)

Dim table As New Table2(40, 60, 515, 500)
' ... complex table setup with columns, rows, cells...
page.Elements.Add(table)
document.Pages.Add(page)
document.Draw("invoice.pdf")

' Merging (requires Merger license)
Dim mergeDoc As New MergeDocument("cover.pdf")
mergeDoc.Append("invoice.pdf")
mergeDoc.Draw("final.pdf")
$vbLabelText   $csharpLabel

Wdrożenie IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' All features in one library
Dim html As String = "
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>"

Dim invoice As PdfDocument = renderer.RenderHtmlAsPdf(html)

' Merging included - no separate license
Dim cover As PdfDocument = PdfDocument.FromFile("cover.pdf")
Dim final As PdfDocument = PdfDocument.Merge(cover, invoice)
final.SaveAs("final.pdf")
$vbLabelText   $csharpLabel

Ważne uwagi dotyczące migracji

Pozycjonowanie oparte na współrzędnych do HTML/CSS

Fundamentalna zmiana paradygmatu wymaga przekształcenia pozycjonowania współrzędnych X,Y na układy oparte na CSS:

//DynamicPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
//DynamicPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
' DynamicPDF- coordinate-based
Dim label = New Label("Hello World", 100, 200, 300, 50)

' IronPDF- CSS positioning (if absolute positioning needed)
Dim html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>"

' IronPDF- preferred approach (flow-based)
html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>"
$vbLabelText   $csharpLabel

Składnia numeracji stron

DynamicPDF iIronPDFużywają różnych składni symboli zastępczych dla numerów stron:

//DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
//DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
'DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

'IronPDFplaceholders
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Nagłówki i stopki

Zamień elementyDynamicPDFTemplate naIronPDFHtmlHeaderFooter:

//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
'IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
    .HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    .MaxHeight = 25
}
$vbLabelText   $csharpLabel

Aby uzyskać więcej opcji nagłówków i stopek, zapoznaj się z dokumentacją dotyczącą nagłówków i stopek.

Ustawienia zabezpieczeń

//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
'IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
pdf.SecuritySettings.UserPassword = "userPassword"
$vbLabelText   $csharpLabel

Aby uzyskać informacje na temat kompleksowych opcji bezpieczeństwa, zapoznaj się z dokumentacją dotyczącą szyfrowania.

Lista kontrolna po migracji

Po zakończeniu migracji kodu sprawdź, czy:

  • Wizualne porównanie wygenerowanych plików PDF
  • Sprawdź rozmieszczenie tekstu i układ
  • Sprawdź renderowanie tabeli i przepełnienie
  • Sprawdź nagłówki/stopki na wszystkich stronach
  • Testowanie funkcji wypełniania formularzy
  • Sprawdź zabezpieczenia/szyfrowanie
  • Testy porównawcze wydajności
  • Usuń nieużywane pliki licencji DynamicPDF
  • Aktualizacja dokumentacji

Zabezpieczenie infrastruktury PDF na przyszłość

W obliczu zbliżającej się premiery .NET 10 i wprowadzenia nowych funkcji językowych w C# 14, wybór biblioteki PDF zgodnej z nowoczesnymi wzorcami .NET zapewnia długoterminową kompatybilność. Natywna obsługa .NET 6/7/8/9+ przezIronPDFzapewnia jasną ścieżkę rozwoju w miarę przedłużania się projektów do 2025 i 2026 roku — bez złożoności związanej z zarządzaniem wieloma licencjami produktów lub poruszaniem się po fragmentarycznych interfejsach API.

Dodatkowe zasoby


Przejście zDynamicPDFnaIronPDFeliminuje złożoność związaną z zarządzaniem wieloma licencjami produktów, zapewniając jednocześnie nowoczesne renderowanie oparte na Chromium oraz pełną obsługę CSS3. Przejście od pozycjonowania opartego na współrzędnych do projektowania HTML/CSS zazwyczaj skutkuje kodem łatwiejszym w utrzymaniu, który wykorzystuje znane technologie internetowe.

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

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie