Zum Fußzeileninhalt springen
VIDEOS

Ausfüllen und Bearbeiten von PDF-Formularen in C# | IronPDF

TX Text Control hat sich als umfassende Dokumenteditor-Komponente im .NET-Ökosystem etabliert und bietet robuste DOCX-Bearbeitungsfunktionen mit eingebetteten UI-Controls. Für Entwicklungsteams, deren primäre Anforderung die PDF-Erzeugung und nicht die vollständige Bearbeitung von Dokumenten ist, stellt die Architektur von TextControl jedoch einen erheblichen Aufwand in Bezug auf Lizenzkosten, Komplexität und Laufzeitabhängigkeiten dar.

Dieser Leitfaden bietet einen vollständigen Migrationspfad von TextControl zu IronPDF, mit Schritt-für-Schritt-Anleitungen, Code-Vergleichen und praktischen Beispielen für professionelle .NET-Entwickler, die diesen Übergang evaluieren.

Warum von TextControl migrieren

Die Entscheidung, von TextControl zu migrieren, konzentriert sich in der Regel auf die Anpassung Ihrer Werkzeuge an Ihre tatsächlichen Anforderungen. TX Text Controlist im Wesentlichen ein Dokumenten-Editor, der die PDF-Erstellung als sekundäre Funktion behandelt. Zu den wichtigsten Gründen, warum Entwicklerteams eine Migration in Betracht ziehen, gehören:

Teure Lizenzierung: Eine einzelneTX Text Control .NET ServerEntwicklerlizenz kostet $4,198 unbefristet mit einem Jahr Updates/Support; eine Vier-Entwickler- Teamlizenz kostet $8,398 unbefristet + 1 Jahr (laut textcontrol.com Preisinformation). Die jährliche Abo-Erneuerung beträgt etwa 40% des Listenpreises (ca. $1,698/Jahr/Entwickler), und die Erneuerungsfrist endet 30 Tage nach Ablauf. Für den Produktionseinsatz sind auch separate Server-Laufzeitlizenzen erforderlich.

PDF als sekundärer Weg: Die Hauptarchitektur ist eine Textverarbeitungs-Engine (DOCX/RTF zuerst), mit PDF als Exportweg statt als primäre Oberfläche.

Eingebundene Editorebene: TX Text Controlwird mit DOCX-Bearbeitungs-UI-Komponenten geliefert, die möglicherweise unnötig sind, wenn die Anforderung rein serverseitige PDF-Erstellung ist.

Textverarbeitungsarchitektur: Der HTML-Import fließt durch eine Textverarbeitungspipeline statt durch einen auf Chromium basierenden Renderer, sodass die HTML5/CSS3-Treue typischerweise schwächer ist als bei einer browserbasierten PDF-Bibliothek.

STA-Affinität in ASP.NET: ServerTextControl stammt aus einem STA-COM-Komponentenmodell und ist am zuverlässigsten in STA-kompatiblen Threads, was die asynchrone/MTA-Hosting in modernen ASP.NET Core-Stapeln verkompliziert.

Komplexe API: Das ServerTextControl Kontextmanagement plus separate StringStreamType / BinaryStreamType / StreamType Enums und ein auswahlgesteuertes Dokumentmodell fügen bei einfachen PDF-Erstellungsaufgaben Overhead hinzu.

Kostenvergleich

Aspekt TX Text Control .NET Server IronPDF
Einzelentwickler $4,198 unbefristet + 1 Jahr Support Einmalige Pro-Entwickler-Lizenz
Team von 4 $8,398 unbefristet + 1 Jahr Support Niedriger pro Sitzplatz
Jährliche Erneuerung ~40% der Liste (~$1,698/Entwickler/jahr) Optionale Unterstützung
Serverlaufzeit Separate Laufzeitlizenz erforderlich für Produktion Nicht erforderlich
UI-Komponenten Eingebundene DOCX-Editorebene PDF-fokussiert

IronPDF vs. TextControl: Funktionsvergleich

Das Verständnis der architektonischen Unterschiede hilft technischen Entscheidungsträgern, die Investition in die Migration zu bewerten:

Feature TX Text Control IronPDF
Primäres Ziel DOCX / Textverarbeitung PDF-Erstellung
Lizenzkosten (einzelner Entwickler) $4,198 unbefristet + 1 Jahr; ~40%/Jahr Erneuerung Einmalige Pro-Entwickler-Lizenz
PDF-Erzeugung Exportpfad bei einer Textverarbeitungs-Engine Kernfunktionalität
Server-Laufzeit-Lizenz Erforderlich für Produktion Nicht erforderlich
Threading STA-Affinität in ASP.NET Keine STA-Anforderung
HTML/CSS-Rendering HTML-Import über die Textverarbeitungspipeline Chromium HTML5/CSS3
HTML zu PDF Ja (sekundär) Ja (primär)
CSS-Unterstützung Beschränkt Vollständig CSS3
JavaScript Beschränkt Vollständiger ES2024
URL zu PDF Komplexe Einrichtung Native
Kopf-/Fußzeilen Komplexe API Einfaches HTML
Serienbriefe Proprietär HTML-Vorlagen
PDF/A Ja Ja
Passwortschutz Ja Ja
Digitale Signaturen Ja Ja
PDFs zusammenführen Beschränkt Ja
PDFs teilen Beschränkt Ja
Kontext-Management Erforderlich Nicht erforderlich
Plattformübergreifend Windows-orientiert Windows / Linux / macOS / Docker

Schnellstart: TextControl-zu-IronPDF-Migration

Mit diesen grundlegenden Schritten kann die Migration sofort beginnen.

Schritt 1: Ersetzen von NuGet-Paketen

Der headless Server-Laufzeit von TX Text Controlwird nicht als einziges öffentliches NuGet-Paket verteilt — das öffentliche Paket ist TXTextControl.Web (der Editor-Begleiter), und der eigentliche ServerTextControl Laufzeit wird über den lizenzierten Windows-Installer/MSI oder den privaten NuGet-Feed des Anbieters ausgeliefert. Entfernen bedeutet normalerweise, diese Installer-akkumulierten Pakete plus TXTextControl.Web und das Deinstallieren des MSI zu entfernen.

# Remove TX Text Controlpackages (names depend on which were installed
# from the licensed installer / private feed / public NuGet)
dotnet remove package TXTextControl.Web

# Then install IronPDF(single self-contained package)
dotnet add package IronPdf
# Remove TX Text Controlpackages (names depend on which were installed
# from the licensed installer / private feed / public NuGet)
dotnet remove package TXTextControl.Web

# Then install IronPDF(single self-contained package)
dotnet add package IronPdf
SHELL

Schritt 2: Namespaces aktualisieren

Ersetzen Sie TextControl-Namespaces durch das IronPDF- Namespace:

// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
Imports TXTextControl
Imports TXTextControl.DocumentServer

' After (IronPDF)
Imports IronPdf
$vbLabelText   $csharpLabel

Schritt 3: Lizenz initialisieren

Hinzufügen der Lizenzinitialisierung beim Start der Anwendung:

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

Beispiele für die Code-Migration

Konvertierung von HTML in PDF

Der häufigste Anwendungsfall verdeutlicht den architektonischen Unterschied zwischen diesen .NET-PDF-Bibliotheken.

TextControl-Ansatz:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

                textControl.Load(html, StringStreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

                textControl.Load(html, StringStreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
Imports TXTextControl
Imports System.IO

Namespace TextControlExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Using textControl As New ServerTextControl()
                textControl.Create()

                Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

                textControl.Load(html, StringStreamType.HTMLFormat)
                textControl.Save("output.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

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

Namespace IronPdfExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Dim renderer = New ChromePdfRenderer()

            Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

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

Die TextControl-Version erfordert das Erstellen einer ServerTextControl Instanz, das Aufrufen von Create() zur Initialisierung des Kontextes, das Laden von HTML mit StreamType.HTMLFormat und das Speichern mit StreamType.AdobePDF. Der using Block ist obligatorisch für die ordnungsgemäße Entsorgung von Ressourcen.

IronPDF macht das Kontextmanagement vollständig überflüssig. Der ChromePdfRenderer erfordert keine Initialisierungszeremonie — erstellen Sie ihn, rendern Sie HTML und speichern Sie. Diese architektonische Vereinfachung reduziert die kognitive Belastung und mögliche Fehler in der Ressourcenverwaltung.

Für fortgeschrittene HTML-zu-PDF-Szenarien siehe den HTML-zu-PDF-Konvertierungsleitfaden.

Mehrere PDFs zusammenführen

Die PDF-Zusammenführung zeigt einen weiteren bedeutenden Komplexitätsunterschied zwischen diesen Bibliotheken.

TextControl-Ansatz:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, BinaryStreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Append(pdf2, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, BinaryStreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Append(pdf2, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
Imports TXTextControl
Imports System.IO

Namespace TextControlExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Using textControl As New ServerTextControl()
                textControl.Create()

                Dim pdf1 As Byte() = File.ReadAllBytes("document1.pdf")
                textControl.Load(pdf1, BinaryStreamType.AdobePDF)

                Dim pdf2 As Byte() = File.ReadAllBytes("document2.pdf")
                textControl.Append(pdf2, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection)

                textControl.Save("merged.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            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;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var pdf1 = PdfDocument.FromFile("document1.pdf");
            var pdf2 = PdfDocument.FromFile("document2.pdf");

            var merged = PdfDocument.Merge(pdf1, pdf2);
            merged.SaveAs("merged.pdf");
        }
    }
}
Imports IronPdf

Namespace IronPdfExample
    Class Program
        Shared Sub Main(ByVal args As String())
            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
End Namespace
$vbLabelText   $csharpLabel

TextControl erfordert das Lesen von Dateien in Byte-Arrays, das Verwalten des ServerTextControl Kontextes und das Aufrufen von Append mit BinaryStreamType.AdobePDF und AppendSettings.StartWithNewSection, um Dokumente zu verketten. Die PdfDocument.Merge() Methode von IronPDF erledigt alles mit einem einzigen, expliziten Aufruf.

Für fortgeschrittene Zusammenführungsszenarien, einschließlich selektiver Seitenextraktion, siehe den Leitfaden zum Zusammenführen und Teilen von PDFs.

Kopf- und Fußzeilen einfügen

Kopf- und Fußzeilen mit dynamischen Seitenzahlen verdeutlichen den Unterschied in der API-Komplexität.

TextControl-Ansatz:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StringStreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StringStreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
Imports TXTextControl
Imports System.IO

Namespace TextControlExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Using textControl As New ServerTextControl()
                textControl.Create()

                Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"
                textControl.Load(html, StringStreamType.HTMLFormat)

                Dim header As New HeaderFooter(HeaderFooterType.Header)
                header.Text = "Document Header"
                textControl.Sections(0).HeadersAndFooters.Add(header)

                Dim footer As New HeaderFooter(HeaderFooterType.Footer)
                footer.Text = "Page {page} of {numpages}"
                textControl.Sections(0).HeadersAndFooters.Add(footer)

                textControl.Save("output.pdf", StreamType.AdobePDF)
            End Using
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

            pdf.SaveAs("output.pdf");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

            pdf.SaveAs("output.pdf");
        }
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Namespace IronPdfExample
    Class Program
        Shared Sub Main(args As String())
            Dim renderer As New ChromePdfRenderer()

            Dim html As String = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>"

            Dim pdf = renderer.RenderHtmlAsPdf(html)

            pdf.AddTextHeader("Document Header")
            pdf.AddTextFooter("Page {page} of {total-pages}")

            pdf.SaveAs("output.pdf")
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

TextControl erfordert das Erstellen von HeaderFooter Objekten mit spezifischen HeaderFooterType Enums, den Zugriff auf Dokumentabschnitte durch textControl.Sections[0] und das Hinzufügen zur HeadersAndFooters Sammlung.IronPDF bietet direkte AddTextHeader und AddTextFooter Methoden (via TextHeaderFooter) mit einfacher Platzhalter-Syntax.

Für HTML-basierte Kopfzeilen mit vollständiger Styling-Kontrolle unterstützt IronPDF auch HtmlHeaderFooter:

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    .MaxHeight = 30
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    .MaxHeight = 25
}
$vbLabelText   $csharpLabel

Weitere Informationen über Kopf- und Fußzeilenoptionen finden Sie in der Kopf- und Fußzeilen-Dokumentation.

TextControl API zu IronPDF Mapping Referenz

Dieses Mapping beschleunigt die Migration, indem es direkte API-Entsprechungen aufzeigt:

TX Text Control IronPDF
ServerTextControl.Create() new ChromePdfRenderer()
tx.Load(html, StringStreamType.HTMLFormat) renderer.RenderHtmlAsPdf(html)
tx.Load(bytes, BinaryStreamType.AdobePDF) PdfDocument.FromFile(...) / FromBinaryData(...)
tx.Save(path, StreamType.AdobePDF) pdf.SaveAs(path)
tx.Append(bytes, BinaryStreamType.AdobePDF, AppendSettings.StartWithNewSection) PdfDocument.Merge(a, b)
SaveSettings.PDFAConformance RenderingOptions.PdfAFormat
DocumentServer.MailMerge HTML-Vorlagen + Razor
HeaderFooter + Sections[i].HeadersAndFooters HtmlHeaderFooter / TextHeaderFooter
LoadSettings RenderingOptions
StreamType.AdobePDF Standard-Ausgabe

Gängige Migrationsprobleme und Lösungen

Ausgabe 1: ServerTextControl-Kontext

TextControl erfordert Create() und using Block für jede Operation.

Lösung:IronPDF verfügt über keine Kontextverwaltung:

// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' Just create and use
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Ausgabe 2: StreamType-Konvertierungen

TextControl jongliert mit drei verschiedenen Enums — StringStreamType für String-Überladungen, BinaryStreamType für byte[] Überladungen und StreamType für Dateipfad-Speichern — zur Ladung verschiedener Formate und Export zu PDF.

Lösung:IronPDF rendert HTML direkt ohne Zwischenformatkonvertierung:

// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Ausgabe 3: DOCX-Vorlagen

TextControl verwendet DOCX-Dateien für Vorlagen mit Seriendruck.

Lösung: Konvertierung in HTML-Vorlagen mit C# String-Interpolation oder Razor:

var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{font-family: Arial; padding: 40px;}}
        h1 {{color: #333;}}
        .total {{font-size: 24px; color: green;}}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{font-family: Arial; padding: 40px;}}
        h1 {{color: #333;}}
        .total {{font-size: 24px; color: green;}}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
Imports IronPdf

Dim data = New With {Key .CustomerName = "John Doe", Key .InvoiceNumber = "12345", Key .Total = "$1,500.00"}

Dim html = $"
<html>
<head>
    <style>
        body {{font-family: Arial; padding: 40px;}}
        h1 {{color: #333;}}
        .total {{font-size: 24px; color: green;}}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
$vbLabelText   $csharpLabel

Problem 4: STA-Affinität in ASP.NET

TextControl ServerTextControl historisch stammt aus einem STA COM-Stil-Komponentenmodell und ist am zuverlässigsten, wenn es auf STA-kompatible Threads gehostet wird (z.B. [ASPCOMPAT] in klassischen Web Forms, oder indem Aufrufe in einem dedizierten STA-Thread/Warteschlange in ASP.NET Core umwickelt werden). Freies Mischen mit MTA-Arbeits-Threads kann unter Last gelegentliche Thread-Affinitätsfehler verursachen.

Lösung:IronPDF hat keine STA-Anforderung und läuft unverändert auf MTA-Arbeits-Threads, in asynchronen Controllern und innerhalb von Linux-Containern unter .NET 6/7/8/9.

TextControl-Migrations-Checkliste

Vor der Migration anfallende Aufgaben

Überprüfen Sie Ihre Codebasis, um alle TextControl-Verwendungen zu identifizieren:

grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
SHELL

Dokument-Serienbriefvorlagen für die Konvertierung in HTML. Beachten Sie die Kopfzeilen/Fußzeilen-Anforderungen für die Implementierung mit HtmlHeaderFooter. Identifizieren Sie alle DOCX-Bearbeitungsfunktionen, die möglicherweise alternative Lösungen erfordern.

Aufgaben der Code-Aktualisierung

  1. TX Text ControlNuGet-Pakete entfernen 2.IronPDF NuGet-Paket installieren
  2. Entfernen Sie das ServerTextControl Kontextmanagement (keine Create() Aufrufe mehr)
  3. Konvertieren Sie StringStreamType.HTMLFormat Ladungen in RenderHtmlAsPdf
  4. Konvertierung von Serienbriefen in HTML-Vorlagen mit String-Interpolation oder Razor
  5. Aktualisieren Sie Kopfzeilen/Fußzeilen, um HtmlHeaderFooter oder AddTextFooter zu verwenden
  6. Vereinfachen Sie die Seiteneinstellungen mit RenderingOptions
  7. Lizenzinitialisierung beim Start hinzufügen

Post-Migrationstests

Überprüfen Sie diese Aspekte nach der Migration:

  • Testen Sie, ob alle Dokumentvorlagen korrekt wiedergegeben werden
  • Überprüfung der PDF/A-Konformität (falls erforderlich)
  • Passwortschutzfunktionalität testen
  • Sicherstellen, dass Kopf- und Fußzeilen auf allen Seiten erscheinen
  • Überprüfen Sie das Hosting von ASP.NET Core auf MTA-Arbeits-Threads und Linux-Containern —IronPDF hat keine STA-Affinitätsanforderung

Die wichtigsten Vorteile der Migration zu IronPDF

Der Wechsel von TextControl zu IronPDF bietet mehrere Vorteile für Teams, die sich auf die PDF-Erstellung konzentrieren:

PDF-First-Architektur:IronPDF ist speziell für die PDF-Erstellung maßgeschneidert und bietet Dokumentenerstellungs- und Rendering-Funktionen, indem moderne HTML5- und CSS3-Standards genutzt werden.

Kosteneffizienz: IronPDFs einmalige Pro-Entwickler-Preispolitik vergleicht sich günstig mit TX Text Control.NET Servers $4,198 unbefristetem + 1 Jahr Einstiegsebene und den ~40%/Jahr Erneuerungsmodell, insbesondere wenn separate Server-Laufzeit-Lizenzen berücksichtigt werden.

Keine STA-Affinität:IronPDF läuft auf standardmäßigen MTA-Arbeits-Threads in ASP.NET Core, asynchronen Controllern und Linux-Containern ohne die STA-kompatiblen Hosting-Anforderungen, die ServerTextControl von seinem COM-Komponentenmodell erbt.

Kein Kontextmanagement: Eliminieren Sie die ServerTextControl Erstellungszeremonie und das Drei-Enum (StringStreamType / BinaryStreamType / StreamType) Lade/Speicher-Tanz — ChromePdfRenderer ist zustandslos.

Moderner Rendering-Engine: IronPDFs auf Chromium-basierter Rendering zielt auf aktuelle HTML5/CSS3/JavaScript-Standards ab, anstatt auf einen Textverarbeitungs-Engine-basierten HTML-Importpfad.

Hinweis:Text Control ist eine eingetragene Marke ihres jeweiligen Eigentümers. Diese Seite ist nicht mit Text Control verbunden, wird nicht von Text Control unterstützt oder gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an