Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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

27.05.2025 Apryse przejęło TallComponents. Nie oferuje się już nowych licencji na TallPDF.NET i PDFKit.NET, a Apryse kieruje nowych nabywców do iText SDK (również posiadanego przez Apryse). Istniejący klienci nadal otrzymują wsparcie, ale silnik jest tylko w trybie utrzymania. Dla zespołów obecnie korzystających z TallComponents, teraz planowanie migracji pozwala uniknąć wymuszonego przejścia później.

Ten przewodnik zapewnia ścieżkę migracji zTallComponentsdo IronPDF, w tym instrukcje krok po kroku, mapowania API i przykłady kodu dla deweloperów .NET planujących przejście.

Dlaczego planować migrację z TallComponents

TallComponents (założone w 2001) wprowadziło dwa główne produkty PDF dla .NET: PDFKit.NET do ładowania i manipulacji PDF oraz TallPDF.NET do generowania dokumentów ukierunkowanych na układ. Po przejęciu przez Apryse zakończono sprzedaż nowych licencji, co zmienia horyzont planowania dla zespołów polegających na bibliotece.

Kluczowe ograniczeniaTallComponentsdzisiaj

Zamknięte na nowe licencje: StronaTallComponentsApryse stwierdza, że nie oferuje już nowych licencji na produktyTallComponentsi kieruje nowych nabywców do iText SDK. Dotychczasowi posiadacze licencji nadal otrzymują wsparcie.

Tylko potok XHTML: TallPDF.NET dostarcza klasę XhtmlParagraph, która parsuje XHTML 1.0 Strict / XHTML 1.1 + CSS 2.1. PDFKit.NET sam w sobie nie ma potoku HTML. Nowoczesne HTML5 + CSS3 +JavaScriptnie renderuje się niezawodnie - brak jest silnika przeglądarki bezgłowej w pakiecie.

Zamrożony cel platformy: TallComponents.PDFKit5 wspiera .NET Standard 2.0; starszy TallComponents.PDFKit (4.x) wspiera .NET Framework 2.0. Nie opublikowano TFM dla .NET 8/9.

Mapa drogowa tylko dla utrzymania: Z energią rozwojową Apryse skupioną na Apryse SDK i iText, pakiety oznaczone markąTallComponentsotrzymują aktualizacje konserwacyjne, ale nie nową mapę drogową funkcji.

IronPDF: nowoczesna alternatywa dla TallComponents

IronPDF rozwiązuje kluczowe luki, które wpływają na użytkownikówTallComponentsna bieżących stosach .NET:

Funkcja TallComponents IronPDF
Aktualny status sprzedaży Zamknięte na nowe licencje (Apryse przejęty 2025-05-27) Sprzedawane aktywnie
Wsparcie HTML-do-PDF XHTML 1.0/1.1 +CSS 2.1via XhtmlParagraph (TallPDF.NET) Tak (HTML5/CSS3 z Chromium)
JavaScriptwHTML Nie Pełna wersja ES2024
Instalacja NuGet (TallComponents.PDFKit5, TallComponents.TallPDF5) NuGet (IronPdf)
Wsparcie klienta Tylko dla istniejących klientów; nowi nabywcy kierowani do iText Aktywne wsparcie i społeczność
Przyszłe inwestycje Tylko utrzymanie Długoterminowa mapa drogowa

TallComponents używa modelu XML/ułożenia zakorzenionego w wcześniejszej erze generowania dokumentów .NET, podczas gdy IronPDF zapewnia renderowanieHTMLzasilane przez Chromium zgodnie z tym, jak zespoły obecnie budują aplikacje frontend.

Szybki start: Migracja zTallComponentsdo IronPDF

Krok 1: Zastąp pakiety NuGet

Usuń pakiety TallComponents, na które wskazuje twój projekt. Prawdziwe identyfikatory pakietów na nuget.org to TallComponents.PDFKit5 (lub TallComponents.PDFKit dla wersji 4.x) i TallComponents.TallPDF5 / TallPDF6:

# RemoveTallComponentspackages (whichever your project uses)
dotnet remove package TallComponents.PDFKit5
dotnet remove package TallComponents.TallPDF5
dotnet remove package TallComponents.PDFRasterizer4
# RemoveTallComponentspackages (whichever your project uses)
dotnet remove package TallComponents.PDFKit5
dotnet remove package TallComponents.TallPDF5
dotnet remove package TallComponents.PDFRasterizer4
SHELL

Zainstaluj IronPDF:

dotnet add package IronPdf

W przypadku specjalistycznych frameworków IronPDF oferuje dedykowane pakiety rozszerzeń:

Blazor Server:

Install-Package IronPdf.Extensions.Blazor

MAUI:

Install-Package IronPdf.Extensions.Maui

Framework MVC:

Install-Package IronPdf.Extensions.Mvc.Framework

Krok 2: Aktualizacja przestrzeni nazw

Zastąp przestrzenie nazwTallComponentsprzestrzenią nazw IronPDF:

// Before (TallComponents — real namespaces)
using TallComponents.PDF;                    // Document, Page (PDFKit.NET)
using TallComponents.PDF.Shapes;             // TextShape, ImageShape (PDFKit)
using TallComponents.PDF.Security;           // PasswordSecurity
using TallComponents.PDF.Layout;             // Document, Section (TallPDF.NET)
using TallComponents.PDF.Layout.Paragraphs;  // TextParagraph, XhtmlParagraph

// After (IronPDF)
using IronPdf;
// Before (TallComponents — real namespaces)
using TallComponents.PDF;                    // Document, Page (PDFKit.NET)
using TallComponents.PDF.Shapes;             // TextShape, ImageShape (PDFKit)
using TallComponents.PDF.Security;           // PasswordSecurity
using TallComponents.PDF.Layout;             // Document, Section (TallPDF.NET)
using TallComponents.PDF.Layout.Paragraphs;  // TextParagraph, XhtmlParagraph

// After (IronPDF)
using IronPdf;
Imports IronPdf

' Before (TallComponents — real namespaces)
' Imports TallComponents.PDF                    ' Document, Page (PDFKit.NET)
' Imports TallComponents.PDF.Shapes             ' TextShape, ImageShape (PDFKit)
' Imports TallComponents.PDF.Security           ' PasswordSecurity
' Imports TallComponents.PDF.Layout             ' Document, Section (TallPDF.NET)
' Imports TallComponents.PDF.Layout.Paragraphs  ' TextParagraph, XhtmlParagraph

' After (IronPDF)
Imports IronPdf
$vbLabelText   $csharpLabel

Krok 3: Zainicjuj swoją licencję

Dodaj inicjalizację licencji podczas uruchamiania aplikacji:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

TallComponentsdo IronPDF API – dokumentacja API

Zrozumienie, w jaki sposób koncepcjeTallComponentsodnoszą się do IronPDF, przyspiesza proces migracji:

TallComponents IronPDF Uwagi
Document (TallPDF.NET: układ) ChromePdfRenderer Utwórz renderer do generowania plików PDF
Document (PDFKit.NET: manipulacja) PdfDocument Ładowanie/edycja istniejących PDF
Section Automatyczne Sekcje pochodzące ze strukturyHTML
TextParagraph Elementy tekstoweHTML Użyj

,

,
itp.

ImageParagraph Tag Standardowe obrazyHTML
TableParagraph HTML
Standardowe tabeleHTML
XhtmlParagraph (XHTML 1.x + CSS 2.1) RenderHtmlAsPdf() (HTML5/CSS3 przez Chromium) NowoczesnyHTMLdziała
Font CSS font-family Obsługiwane czcionki webowe
document.Write(...) pdf.SaveAs() / pdf.BinaryData Plik lub byte[] wyjście
page.Overlay.Add(shape) pdf.ApplyStamp(stamper) Znak wodny / nakładka
outputDoc.Pages.Add(page.Clone()) PdfDocument.Merge(...) / pdf.AppendPdf(...) Łączenie wielu plików PDF
Document.Security = new PasswordSecurity { ... } pdf.SecuritySettings Konfiguracja zabezpieczeń plików PDF
PageLayout RenderingOptions Ustawienia strony i marginesy

Przykłady migracji kodu

KonwersjaHTMLdo PDF

TallComponents obsługujeHTMLprzez XhtmlParagraph w TallPDF.NET, który parsuje tylko XHTML 1.0/1.1 + CSS 2.1. Nowoczesne HTML5, CSS3, flexbox, grid i treści napędzane przezJavaScriptleżą poza tą składnią:

Podejście TallComponents:

// NuGet: Install-Package TallComponents.TallPDF5
// (HTML/XHTML conversion lives in TallPDF.NET, not in PDFKit.NET.)
using TallComponents.PDF.Layout;
using TallComponents.PDF.Layout.Paragraphs;
using System.IO;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Section section = document.Sections.Add();

        // XhtmlParagraph supports XHTML 1.0/1.1 +CSS 2.1only.
        XhtmlParagraph xhtml = new XhtmlParagraph();
        xhtml.Text = "<html><body><h1>Hello World</h1><p>This is a PDF from XHTML.</p></body></html>";
        section.Paragraphs.Add(xhtml);

        using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
        {
            document.Write(fs);
        }
    }
}
// NuGet: Install-Package TallComponents.TallPDF5
// (HTML/XHTML conversion lives in TallPDF.NET, not in PDFKit.NET.)
using TallComponents.PDF.Layout;
using TallComponents.PDF.Layout.Paragraphs;
using System.IO;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Section section = document.Sections.Add();

        // XhtmlParagraph supports XHTML 1.0/1.1 +CSS 2.1only.
        XhtmlParagraph xhtml = new XhtmlParagraph();
        xhtml.Text = "<html><body><h1>Hello World</h1><p>This is a PDF from XHTML.</p></body></html>";
        section.Paragraphs.Add(xhtml);

        using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
        {
            document.Write(fs);
        }
    }
}
Imports TallComponents.PDF.Layout
Imports TallComponents.PDF.Layout.Paragraphs
Imports System.IO

Class Program
    Shared Sub Main()
        Dim document As New Document()
        Dim section As Section = document.Sections.Add()

        ' XhtmlParagraph supports XHTML 1.0/1.1 +CSS 2.1 only.
        Dim xhtml As New XhtmlParagraph()
        xhtml.Text = "<html><body><h1>Hello World</h1><p>This is a PDF from XHTML.</p></body></html>"
        section.Paragraphs.Add(xhtml)

        Using fs As New FileStream("output.pdf", FileMode.Create)
            document.Write(fs)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Podejście IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        // Create a PDF fromHTMLstring
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        // Create a PDF fromHTMLstring
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        ' Create a PDF from HTML string
        Dim renderer As New ChromePdfRenderer()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF's ChromePdfRenderer używa prawdziwego silnika Chromium, zapewniając pełne wsparcie dla HTML5 i CSS3. Oznacza to, że pliki PDF wyświetlają się dokładnie tak, jak wyglądałyby w nowoczesnej przeglądarce. Dowiedz się więcej w samouczku dotyczącym konwersji HTML do PDF.

Łączenie wielu plików PDF

Łączenie plików PDF pokazuje różnicę w szczegółowości międzyTallComponentsa IronPDF.

Podejście TallComponents:

// NuGet: Install-Package TallComponents.PDFKit5
using TallComponents.PDF;
using System.IO;

class Program
{
    static void Main()
    {
        // Create target document
        Document outputDoc = new Document();

        // Load first PDF and clone each page into the target
        using (FileStream fs1 = new FileStream("document1.pdf", FileMode.Open, FileAccess.Read))
        {
            Document doc1 = new Document(fs1);
            foreach (Page page in doc1.Pages)
            {
                outputDoc.Pages.Add(page.Clone()); // clone is required across documents
            }
        }

        // Load second PDF and append the whole page collection
        using (FileStream fs2 = new FileStream("document2.pdf", FileMode.Open, FileAccess.Read))
        {
            Document doc2 = new Document(fs2);
            outputDoc.Pages.AddRange(doc2.Pages.CloneToArray());
        }

        // Save merged document
        using (FileStream output = new FileStream("merged.pdf", FileMode.Create))
        {
            outputDoc.Write(output);
        }
    }
}
// NuGet: Install-Package TallComponents.PDFKit5
using TallComponents.PDF;
using System.IO;

class Program
{
    static void Main()
    {
        // Create target document
        Document outputDoc = new Document();

        // Load first PDF and clone each page into the target
        using (FileStream fs1 = new FileStream("document1.pdf", FileMode.Open, FileAccess.Read))
        {
            Document doc1 = new Document(fs1);
            foreach (Page page in doc1.Pages)
            {
                outputDoc.Pages.Add(page.Clone()); // clone is required across documents
            }
        }

        // Load second PDF and append the whole page collection
        using (FileStream fs2 = new FileStream("document2.pdf", FileMode.Open, FileAccess.Read))
        {
            Document doc2 = new Document(fs2);
            outputDoc.Pages.AddRange(doc2.Pages.CloneToArray());
        }

        // Save merged document
        using (FileStream output = new FileStream("merged.pdf", FileMode.Create))
        {
            outputDoc.Write(output);
        }
    }
}
Imports TallComponents.PDF
Imports System.IO

Class Program
    Shared Sub Main()
        ' Create target document
        Dim outputDoc As New Document()

        ' Load first PDF and clone each page into the target
        Using fs1 As New FileStream("document1.pdf", FileMode.Open, FileAccess.Read)
            Dim doc1 As New Document(fs1)
            For Each page As Page In doc1.Pages
                outputDoc.Pages.Add(page.Clone()) ' clone is required across documents
            Next
        End Using

        ' Load second PDF and append the whole page collection
        Using fs2 As New FileStream("document2.pdf", FileMode.Open, FileAccess.Read)
            Dim doc2 As New Document(fs2)
            outputDoc.Pages.AddRange(doc2.Pages.CloneToArray())
        End Using

        ' Save merged document
        Using output As New FileStream("merged.pdf", FileMode.Create)
            outputDoc.Write(output)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Podejście IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        // Load PDFs
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);

        // Save merged document
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        // Load PDFs
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);

        // Save merged document
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        ' Load PDFs
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        ' Merge PDFs
        Dim merged = PdfDocument.Merge(pdf1, pdf2)

        ' Save merged document
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

WersjaTallComponentswymaga ręcznego przeglądania stron i klonowania.IronPDF redukuje to do pojedynczego wywołania PdfDocument.Merge(). W przypadku zaawansowanych scenariuszy łączenia plików zapoznaj się z dokumentacją dotyczącą łączenia plików PDF.

Dodawanie znaków wodnych

Znakowanie wodne plików PDF ujawnia kolejną istotną różnicę w doświadczeniach programistów.

Podejście TallComponents:

// NuGet: Install-Package TallComponents.PDFKit5
using TallComponents.PDF;
using TallComponents.PDF.Shapes;
using System.IO;
using System.Drawing;

class Program
{
    static void Main()
    {
        // Load existing PDF
        using (FileStream fs = new FileStream("input.pdf", FileMode.Open, FileAccess.Read))
        {
            Document document = new Document(fs);

            foreach (Page page in document.Pages)
            {
                TextShape watermark = new TextShape();
                watermark.Text = "CONFIDENTIAL";
                watermark.Font = new Font("Arial", 60);
                watermark.Pen = new Pen(Color.FromArgb(128, 255, 0, 0));
                watermark.X = 200;
                watermark.Y = 400;
                // Rotation is applied via a transform on PDFKit.NET
                // (TextShape has no Rotate property in the PDFKit API).
                watermark.Transform = new RotateTransform(45);

                page.Overlay.Add(watermark);
            }

            using (FileStream output = new FileStream("watermarked.pdf", FileMode.Create))
            {
                document.Write(output);
            }
        }
    }
}
// NuGet: Install-Package TallComponents.PDFKit5
using TallComponents.PDF;
using TallComponents.PDF.Shapes;
using System.IO;
using System.Drawing;

class Program
{
    static void Main()
    {
        // Load existing PDF
        using (FileStream fs = new FileStream("input.pdf", FileMode.Open, FileAccess.Read))
        {
            Document document = new Document(fs);

            foreach (Page page in document.Pages)
            {
                TextShape watermark = new TextShape();
                watermark.Text = "CONFIDENTIAL";
                watermark.Font = new Font("Arial", 60);
                watermark.Pen = new Pen(Color.FromArgb(128, 255, 0, 0));
                watermark.X = 200;
                watermark.Y = 400;
                // Rotation is applied via a transform on PDFKit.NET
                // (TextShape has no Rotate property in the PDFKit API).
                watermark.Transform = new RotateTransform(45);

                page.Overlay.Add(watermark);
            }

            using (FileStream output = new FileStream("watermarked.pdf", FileMode.Create))
            {
                document.Write(output);
            }
        }
    }
}
Imports TallComponents.PDF
Imports TallComponents.PDF.Shapes
Imports System.IO
Imports System.Drawing

Class Program
    Shared Sub Main()
        ' Load existing PDF
        Using fs As New FileStream("input.pdf", FileMode.Open, FileAccess.Read)
            Dim document As New Document(fs)

            For Each page As Page In document.Pages
                Dim watermark As New TextShape()
                watermark.Text = "CONFIDENTIAL"
                watermark.Font = New Font("Arial", 60)
                watermark.Pen = New Pen(Color.FromArgb(128, 255, 0, 0))
                watermark.X = 200
                watermark.Y = 400
                ' Rotation is applied via a transform on PDFKit.NET
                ' (TextShape has no Rotate property in the PDFKit API).
                watermark.Transform = New RotateTransform(45)

                page.Overlay.Add(watermark)
            Next

            Using output As New FileStream("watermarked.pdf", FileMode.Create)
                document.Write(output)
            End Using
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Podejście IronPDF:

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

class Program
{
    static void Main()
    {
        // Load existing PDF
        var pdf = PdfDocument.FromFile("input.pdf");

        // Create watermark
        var watermark = new TextStamper()
        {
            Text = "CONFIDENTIAL",
            FontSize = 60,
            Opacity = 50,
            Rotation = 45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        };

        // Apply watermark to all pages
        pdf.ApplyStamp(watermark);

        // Save watermarked PDF
        pdf.SaveAs("watermarked.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        // Load existing PDF
        var pdf = PdfDocument.FromFile("input.pdf");

        // Create watermark
        var watermark = new TextStamper()
        {
            Text = "CONFIDENTIAL",
            FontSize = 60,
            Opacity = 50,
            Rotation = 45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        };

        // Apply watermark to all pages
        pdf.ApplyStamp(watermark);

        // Save watermarked PDF
        pdf.SaveAs("watermarked.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Class Program
    Shared Sub Main()
        ' Load existing PDF
        Dim pdf = PdfDocument.FromFile("input.pdf")

        ' Create watermark
        Dim watermark = New TextStamper() With {
            .Text = "CONFIDENTIAL",
            .FontSize = 60,
            .Opacity = 50,
            .Rotation = 45,
            .VerticalAlignment = VerticalAlignment.Middle,
            .HorizontalAlignment = HorizontalAlignment.Center
        }

        ' Apply watermark to all pages
        pdf.ApplyStamp(watermark)

        ' Save watermarked PDF
        pdf.SaveAs("watermarked.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Klasa TextStamper w IronPDF zapewnia intuicyjne opcje wyrównania i automatyczne iterowanie stron. Przewodnik dotyczący stempli i znaków wodnych zawiera informacje o dodatkowych opcjach dostosowywania.

Podpisy cyfrowe

Podpisywanie dokumentów ma kluczowe znaczenie dla aplikacji Enterprise.

Podejście TallComponents:

using TallComponents.PDF;
using TallComponents.PDF.Signing;
using System.IO;
using System.Security.Cryptography.X509Certificates;

using (FileStream fs = new FileStream("unsigned.pdf", FileMode.Open, FileAccess.Read))
{
    Document document = new Document(fs);

    X509Certificate2 cert = new X509Certificate2("certificate.pfx", "password");
    SignatureField field = new SignatureField("Signature1");
    field.Sign(cert);
    document.Fields.Add(field);

    using (FileStream output = new FileStream("signed.pdf", FileMode.Create))
    {
        document.Write(output);
    }
}
using TallComponents.PDF;
using TallComponents.PDF.Signing;
using System.IO;
using System.Security.Cryptography.X509Certificates;

using (FileStream fs = new FileStream("unsigned.pdf", FileMode.Open, FileAccess.Read))
{
    Document document = new Document(fs);

    X509Certificate2 cert = new X509Certificate2("certificate.pfx", "password");
    SignatureField field = new SignatureField("Signature1");
    field.Sign(cert);
    document.Fields.Add(field);

    using (FileStream output = new FileStream("signed.pdf", FileMode.Create))
    {
        document.Write(output);
    }
}
Imports TallComponents.PDF
Imports TallComponents.PDF.Signing
Imports System.IO
Imports System.Security.Cryptography.X509Certificates

Using fs As New FileStream("unsigned.pdf", FileMode.Open, FileAccess.Read)
    Dim document As New Document(fs)

    Dim cert As New X509Certificate2("certificate.pfx", "password")
    Dim field As New SignatureField("Signature1")
    field.Sign(cert)
    document.Fields.Add(field)

    Using output As New FileStream("signed.pdf", FileMode.Create)
        document.Write(output)
    End Using
End Using
$vbLabelText   $csharpLabel

Podejście IronPDF:

using IronPdf;
using IronPdf.Signing;

var pdf = PdfDocument.FromFile("unsigned.pdf");

// Sign with certificate
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningContact = "support@company.com",
    SigningLocation = "New York",
    SigningReason = "Document Approval"
};

pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;

var pdf = PdfDocument.FromFile("unsigned.pdf");

// Sign with certificate
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningContact = "support@company.com",
    SigningLocation = "New York",
    SigningReason = "Document Approval"
};

pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing

Dim pdf = PdfDocument.FromFile("unsigned.pdf")

' Sign with certificate
Dim signature = New PdfSignature("certificate.pfx", "password") With {
    .SigningContact = "support@company.com",
    .SigningLocation = "New York",
    .SigningReason = "Document Approval"
}

pdf.Sign(signature)
pdf.SaveAs("signed.pdf")
$vbLabelText   $csharpLabel

Charakterystyczne API IronPDF zawiera dodatkowe właściwości metadanych dotyczące informacji kontaktowych, lokalizacji i powodu podpisania — ważne dla ścieżek audytu. Zapoznaj się z dokumentacją dotyczącą podpisu cyfrowego, aby uzyskać szczegółowe informacje na temat wdrożenia.

Porównanie funkcji:TallComponentsvs IronPDF

Funkcja TallComponents IronPDF
Status Zamknięte na nowe licencje (Apryse przejęty 2025-05-27) Aktywne
Wsparcie Tylko dla obecnych klientów Pełna
Aktualizacje Tylko utrzymanie Regularne wydania funkcji
Tworzenie treści
HTMLdo PDF XHTML 1.0/1.1 +CSS 2.1(XhtmlParagraph) Pełne HTML5/CSS3 przez Chromium
URL do pliku PDF Tak dla URL-ów XHTML (XhtmlParagraph.Path) Tak
Obsługa CSS CSS 2.1 Pełny CSS3
JavaScript Nie Pełna wersja ES2024
XML / Szablony DOM układu Tak (TallPDF.NET) Niepotrzebne (HTML)
Operacje na plikach PDF
Łączenie plików PDF Tak (Pages.Add(page.Clone())) Tak (PdfDocument.Merge)
Podział plików PDF Tak Tak
Znaki wodne page.Overlay.Add(TextShape) pdf.ApplyStamp(...)
Nagłówki/stopki Układ DOM HTML/CSS
Bezpieczeństwo
Ochrona hasłem Tak (PasswordSecurity) Tak
Podpisy cyfrowe Tak (SignatureField.Sign) Tak
Szyfrowanie RC4 / AES-128 / AES-256 AES-128 / AES-256
PDF/A PDF/A-1, PDF/A-2, PDF/A-3 Tak
Platforma
Docelowe Frameworki PDFKit5: .NET Standard 2.0; PDFKit (4.x): .NET Framework 2.0 .NET Framework 4.6.2+, .NET 6/7/8/9
Rozwój
Krzywa uczenia się XML / układ DOM HTML
Dokumentacja Zamrożony w momencie przejęcia; nowe dokumenty skierowane do Apryse / iText Utrzymywany
Społeczność Cichy (brak nowej sprzedaży) Aktywne

Lista kontrolna migracji TallComponents

Zadania przed migracją

Przeprowadź audyt bazy kodu, aby zidentyfikować wszystkie użycia TallComponents:

grep -r "using TallComponents" --include="*.cs" .
grep -rE "XhtmlParagraph|TextParagraph|PasswordSecurity|page\.Overlay" --include="*.cs" .
grep -r "using TallComponents" --include="*.cs" .
grep -rE "XhtmlParagraph|TextParagraph|PasswordSecurity|page\.Overlay" --include="*.cs" .
SHELL

Udokumentuj istniejące szablony XML/ułożenia — będą one przekształcone na HTML. Zidentyfikuj obecnie używane ustawienia zabezpieczeń, zwracając uwagę na konfiguracje hasła i implementacje podpisu cyfrowego.

Zadania związane z aktualizacją kodu

  1. Usuń pakietyTallComponentsprzez NuGet
  2. Zainstaluj pakiet IronPDF
  3. Przekształć szablony XHTML / DOM ułożenia na HTML5
  4. Zastąp model sekcji/akapitów elementami HTML
  5. Zaktualizuj kod tabel do używania standardowych tabel HTML
  6. Konwertowanie nagłówków/stopki naHTMLza pomocą HtmlHeaderFooter
  7. Aktualizuj ustawienia zabezpieczeń, aby używać pdf.SecuritySettings
  8. Dodaj inicjalizację licencji podczas uruchamiania

Migracja nagłówków i stopek

TallPDF.NET używa DOM układów (Section.Header / Section.Footer) dla nagłówków stron.IronPDF zapewnia nagłówki oparte naHTMLz dynamicznymi zastępcami:

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Header Text</div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Footer Text</div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Header Text</div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Footer Text</div>",
    MaxHeight = 25
};
Imports System

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
    .HtmlFragment = "<div style='text-align:center;'>Header Text</div>",
    .MaxHeight = 25
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
    .HtmlFragment = "<div style='text-align:center;'>Footer Text</div>",
    .MaxHeight = 25
}
$vbLabelText   $csharpLabel

Dowiedz się więcej o nagłówkach i stopkach w IronPDF.

Faza testów

  1. Porównaj wizualne wyjście między wersjamiTallComponentsi IronPDF
  2. Przetestuj wszystkie szablony dokumentów
  3. Zwaliduj funkcjonalność łączenia PDF
  4. Przetestuj podpisy cyfrowe
  5. Potwierdź poprawność zastosowania ustawień zabezpieczeń

Zalecany harmonogram migracji

PonieważTallComponentsjest zamknięte na nowe licencje i na wsparciu tylko dla utrzymania, planuj przejście we własnym tempie, ale nie zwlekaj:

Tydzień 1: Przeprowadź audyt bazy kodu i zidentyfikuj wszystkie użycia TallComponents Tydzień 2: Przekształć szablony XHTML / DOM ułożenia na HTML5 Tydzień 3: Zaktualizuj kod bezpieczeństwa, łączenia i podpisywania Tydzień 4: Testowanie i wdrażanie na produkcję

Im dłużej stos pozostaje na TallComponents, tym bardziej odbiega od bieżących celów .NET i bieżącego HTML.

Zwróć uwagęApryse, PDFKit, Tall Components i iText są zarejestrowanymi znakami towarowymi swoich właścicieli. Ta strona nie jest powiązana z, zatwierdzona przez, ani sponsorowana przez Apryse, PDFKit, PDFTron,TallComponentslub iText Group. Wszystkie nazwy produktów, loga i marki są własnością ich 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