Jak przeprowadzić migrację z TextControl do IronPDF w języku C#
TX Text Control ugruntował swoją pozycję jako kompleksowy komponent do edycji dokumentów w ekosystemie .NET, oferujący solidne możliwości edycji plików DOCX z wbudowanymi kontrolkami interfejsu użytkownika. Jednak dla zespołów programistycznych, których głównym wymaganiem jest generowanie plików PDF, a nie pełna edycja dokumentów, architektura TextControl wiąże się ze znacznymi obciążeniami w zakresie kosztów licencji, złożoności i zależności środowiskowych.
Niniejszy przewodnik zawiera kompletną ścieżkę migracji z TextControl do IronPDF, wraz z instrukcjami krok po kroku, porównaniami kodu i praktycznymi przykładami dla profesjonalnych programistów .NET rozważających tę zmianę.
Dlaczego warto przejść z TextControl
Decyzja o migracji z TextControl zazwyczaj opiera się na dopasowaniu narzędzi do rzeczywistych wymagań.TX Text Controlto przede wszystkim edytor dokumentów, dla którego generowanie plików PDF jest funkcją dodatkową. Główne powody, dla których zespoły programistów rozważają migrację, to:
Kosztowna licencja: TextControl działa na licencji komercyjnej, której cena wynosi co najmniej 3398 USD rocznie na programistę. Czteroosobowy zespół może spodziewać się nakładu rzędu 6749 USD rocznie, z dodatkowymi kosztami licencji na środowisko uruchomieniowe serwera. Koszty odnowienia wynoszą 40% rocznie i są obowiązkowe w celu zachowania dostępu do aktualizacji.
PDF jako dodatek: Podstawą architektury jest edytor tekstu, a nie format PDF. Chociaż dostępna jest funkcja generowania plików PDF, jest to raczej funkcja dodatkowa niż główny cel, co skutkuje mniej niż optymalną jakością wyników.
Błędy sprzętowe: Błąd karty graficznej Intel Iris Xe Graphics wpływa na renderowanie dokumentów w nowszych procesorach Intel (11. generacji) i wymaga zastosowania obejścia w rejestrze w celu rozwiązania.
Nadmierne zależności: TextControl zawiera komponenty interfejsu użytkownika do edycji dokumentów, które mogą nie być potrzebne, jeśli skupiasz się wyłącznie na generowaniu plików PDF.
Architektura edytora tekstu: Nie jest zoptymalizowana pod kątem procesów przekształcania HTML na PDF, których wymagają nowoczesne aplikacje internetowe.
Złożony interfejs API: Model zarządzania kontekstem i selekcji ServerTextControl niepotrzebnie komplikuje proste zadania związane z generowaniem plików PDF.
Porównanie kosztów
| Aspekt | TX Text Control | IronPDF |
|---|---|---|
| Licencja podstawowa | 3 398 USD+ | Znacznie niższa |
| Coroczne odnowienie | 40% obowiązkowe | Opcjonalne wsparcie |
| Na programistę | Tak | Tak |
| Komponenty interfejsu użytkownika | W pakiecie (nadmiar) | Skupione na PDF |
| Całkowity koszt w ciągu 3 lat | 5 750 USD+ | Znacznie niższa |
IronPDFa TextControl: porównanie funkcji
Zrozumienie różnic architektonicznych pomaga decydentom technicznym w ocenie inwestycji w migrację:
| Funkcja | TX Text Control | IronPDF |
|---|---|---|
| Główny cel | Edycja plików DOCX | Generowanie plików PDF |
| Koszt licencji | 3398 USD rocznie na programistę | 749 USD jednorazowo za programistę |
| Jakość pliku PDF | Podstawowe funkcje i funkcje dodatkowe | Wysoka, podstawowa funkcjonalność |
| Kompatybilność sprzętowa | Znane problemy z Intel Iris | Działa stabilnie na wszystkich urządzeniach |
| Integracja z interfejsem użytkownika | Wymagane są komponenty interfejsu użytkownika | Brak nadmiaru komponentów interfejsu użytkownika |
| Renderowanie HTML/CSS | Błąd w HTML | Nowoczesny HTML5/CSS3 |
| HTML do PDF | Tak (drugorzędne) | Tak (główne) |
| Obsługa CSS | Ograniczone | Pełny CSS3 |
| JavaScript | Ograniczone | Pełna wersja ES2024 |
| URL do pliku PDF | Złożona konfiguracja | Język ojczysty |
| Nagłówki/stopki | Złożony interfejs API | Prosty HTML |
| Korespondencja seryjna | Zastrzeżone | Szablony HTML |
| PDF/A | Tak | Tak |
| Ochrona hasłem | Tak | Tak |
| Podpisy cyfrowe | Tak | Tak |
| Łączenie plików PDF | Ograniczone | Tak |
| Podział plików PDF | Ograniczone | Tak |
| Zarządzanie kontekstem | Wymagane | Nie jest potrzebne |
| Wieloplatformowe | Skupione na systemie Windows | Tak |
Szybki start: Migracja z TextControl do IronPDF
Migrację można rozpocząć natychmiast, wykonując te podstawowe kroki.
Krok 1: Zastąp pakiety NuGet
Usuń wszystkie pakiety TextControl:
# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
Zainstaluj IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Krok 2: Aktualizacja przestrzeni nazw
Zastąp przestrzenie nazw TextControl przestrzenią nazw IronPdf:
// 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
Krok 3: Inicjalizacja licencji
Dodaj inicjalizację licencji podczas uruchamiania aplikacji:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Przykłady migracji kodu
Konwersja HTML do PDF
Najczęstszy przypadek użycia ilustruje różnicę architektoniczną między tymi bibliotekami .NET do obsługi plików PDF.
Podejście TextControl:
// 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, StreamType.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, StreamType.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, StreamType.HTMLFormat)
textControl.Save("output.pdf", StreamType.AdobePDF)
End Using
End Sub
End Class
End Namespace
Podejście IronPDF:
// 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
Wersja TextControl wymaga utworzenia instancji ServerTextControl, wywołania Create() w celu zainicjowania kontekstu, załadowania kodu HTML za pomocą StreamType.HTMLFormat oraz zapisania za pomocą StreamType.AdobePDF. Blok using jest obowiązkowy dla prawidłowego zwolnienia zasobów.
IronPDF całkowicie eliminuje konieczność zarządzania kontekstem. ChromePdfRenderer nie wymaga żadnych czynności inicjalizacyjnych — wystarczy go utworzyć, wyrenderować kod HTML i zapisać. To uproszczenie architektury zmniejsza obciążenie poznawcze i ogranicza potencjalne błędy w zarządzaniu zasobami.
W przypadku zaawansowanych scenariuszy konwersji HTML do PDF zapoznaj się z przewodnikiem po konwersji HTML do PDF.
Łączenie wielu plików PDF
Łączenie plików PDF ujawnia kolejną istotną różnicę w złożoności między tymi bibliotekami.
Podejście TextControl:
// 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, StreamType.AdobePDF);
byte[] pdf2 = File.ReadAllBytes("document2.pdf");
textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);
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, StreamType.AdobePDF);
byte[] pdf2 = File.ReadAllBytes("document2.pdf");
textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);
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, StreamType.AdobePDF)
Dim pdf2 As Byte() = File.ReadAllBytes("document2.pdf")
textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append)
textControl.Save("merged.pdf", StreamType.AdobePDF)
End Using
End Sub
End Class
End Namespace
Podejście IronPDF:
// 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
TextControl wymaga wczytania plików do tablic bajtów, zarządzania kontekstem ServerTextControl oraz użycia LoadAppendMode.Append do scalania dokumentów. Metoda PdfDocument.Merge() firmyIronPDFobsługuje wszystko za pomocą jednego, wyraźnego wywołania.
Aby uzyskać informacje na temat zaawansowanych scenariuszy łączenia, w tym selektywnego wyodrębniania stron, zapoznaj się z przewodnikiem dotyczącym łączenia i dzielenia plików PDF.
Dodawanie nagłówków i stopek
Nagłówki i stopki z dynamicznymi numerami stron pokazują różnicę w złożoności API.
Podejście TextControl:
// 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, StreamType.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, StreamType.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, StreamType.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
Podejście IronPDF:
// 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
TextControl wymaga tworzenia obiektów HeaderFooter z określonymi wyliczeniami HeaderFooterType, uzyskiwania dostępu do sekcji dokumentu poprzez textControl.Sections[0] oraz dodawania do kolekcji HeadersAndFooters.IronPDFudostępnia bezpośrednie metody AddTextHeader i AddTextFooter z prostą składnią symboli zastępczych.
W przypadku nagłówków opartych na HTML z pełną kontrolą stylówIronPDFobsługuje również 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
}
Więcej informacji na temat opcji nagłówków i stopek można znaleźć w dokumentacji dotyczącej nagłówków i stopek.
Odnośnik do dokumentacji API TextControl dla IronPDF
To mapowanie przyspiesza migrację, pokazując bezpośrednie odpowiedniki API:
| TX Text Control | IronPDF |
|---|---|
ServerTextControl.Create() |
new ChromePdfRenderer() |
tx.Load(html, StreamType.HTMLFormat) |
renderer.RenderHtmlAsPdf(html) |
tx.Load(url, StreamType.HTMLFormat) |
renderer.RenderUrlAsPdf(url) |
tx.Save(path, StreamType.AdobePDF) |
pdf.SaveAs(path) |
SaveSettings.PDFAConformance |
RenderingOptions.PdfAFormat |
DocumentServer.MailMerge |
Szablony HTML + Razor |
DocumentTarget.HeadersAndFooters |
HtmlHeaderFooter |
LoadSettings |
RenderingOptions |
StreamType.AdobePDF |
Domyślny wynik |
Typowe problemy związane z migracją i ich rozwiązania
Problem 1: Kontekst ServerTextControl
TextControl wymaga bloków Create() i using dla każdej operacji.
Rozwiązanie:IronPDFnie posiada funkcji zarządzania kontekstem:
// 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)
Problem 2: Konwersje typów strumieni
TextControl ładuje różne formaty i konwertuje je do PDF za pomocą enumów StreamType.
Rozwiązanie:IronPDFrenderuje HTML bezpośrednio, bez pośredniej konwersji formatów:
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
Dim pdf = renderer.RenderHtmlAsPdf(html)
Problem 3: Szablony DOCX
TextControl używa plików DOCX jako szablonów do korespondencji seryjnej.
Rozwiązanie: Konwersja do szablonów HTML z wykorzystaniem interpolacji ciągów znaków w języku C# lub 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");
Option Strict On
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 = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
Problem 4: Błąd grafiki Intel Iris Xe
Firma TextControl odnotowała problemy z renderowaniem na procesorach Intel 11. generacji, wymagające zastosowania obejść w rejestrze.
Rozwiązanie:IronPDFwykorzystuje renderowanie Chromium — nie wymaga to żadnych poprawek dotyczących przyspieszenia sprzętowego ani modyfikacji rejestru.
Lista kontrolna migracji TextControl
Zadania przed migracją
Przeprowadź audyt kodu źródłowego, aby zidentyfikować wszystkie przypadki użycia TextControl:
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" .
Szablony korespondencji seryjnej do konwersji na HTML. Zwróć uwagę na wymagania dotyczące nagłówków i stopek przy wdrażaniu z HtmlHeaderFooter. Należy zidentyfikować wszelkie funkcje edycji plików DOCX, które mogą wymagać alternatywnych rozwiązań.
Zadania związane z aktualizacją kodu
- Usuń pakiety NuGet TX Text Control
- Zainstaluj pakiet IronPdf NuGet
- Usunąć zarządzanie kontekstem
ServerTextControl(brak wywołańCreate()) - Zamień
StreamType.HTMLFormatnaRenderHtmlAsPdf - Konwersja korespondencji seryjnej do szablonów HTML za pomocą interpolacji ciągów znaków lub Razor
- Zaktualizuj nagłówki/stopki, aby używać
HtmlHeaderFooterlubAddTextFooter - Uprość ustawienia strony za pomocą
RenderingOptions - Dodaj inicjalizację licencji podczas uruchamiania
Testy po migracji
Po migracji należy zweryfikować następujące aspekty:
- Sprawdź, czy wszystkie szablony dokumentów wyświetlają się poprawnie
- W razie potrzeby sprawdź zgodność z formatem PDF/A
- Przetestuj funkcję ochrony hasłem
- Sprawdź, czy nagłówki/stopki pojawiają się na wszystkich stronach
- Sprawdź na sprzęcie Intel 11. generacji — dziękiIronPDFnie są już potrzebne żadne obejścia rejestru
Kluczowe korzyści z migracji do IronPDF
Przejście z TextControl naIronPDFzapewnia szereg korzyści dla zespołów zajmujących się generowaniem plików PDF:
Architektura PDF-First:IronPDFjest dostosowany specjalnie do generowania plików PDF, oferując solidne możliwości tworzenia i renderowania dokumentów dzięki wykorzystaniu nowoczesnych standardów HTML5 i CSS3.
Opłacalność: Jednorazowa opłata zaIronPDFsprawia, że w dłuższej perspektywie jest on znacznie tańszy, zwłaszcza w porównaniu z usługą TextControl opartą na subskrypcji, która wymaga obowiązkowego przedłużenia o 40% rocznie.
Sprawdzona stabilność: Udokumentówana niezawodność na różnym sprzęcie, pozwalająca uniknąć problemów, takich jak te, z którymi boryka się TextControl w przypadku kart graficznych Intel.
Brak zarządzania kontekstem: Wyeliminuj ceremonię tworzenia ServerTextControl oraz wzorce usuwania zasobów. Bezstanowe renderowanieIronPDFupraszcza kod i ogranicza potencjalne wycieki pamięci.
Nowoczesny silnik renderujący: Wraz ze wzrostem popularności platformy .NET 10 i języka C# 14 do 2026 r. oparty na Chromium silnik renderującyIronPDFzapewnia zgodność z obecnymi i przyszłymi standardami internetowymi.

