C#'ta TextControl'den IronPDF'ye Nasıl Geçilir
TX Text Control, .NET ekosisteminde yerleşmiş bir belge düzenleyici bileşeni olarak, yerleşik kullanıcı arayüzü kontrolleri ile sağlam DOCX düzenleme yetenekleri sunmaktadır. Ancak, birincil gereksinimi tam belge düzenlemeden ziyade PDF üretimi olan geliştirme ekipleri için TextControl'un mimarisi, lisans maliyetleri, karmaşıklık ve çalışma zamanı bağımlılıklarında önemli ek yükler sunar.
Bu kılavuz, TextControl'dan IronPDF'ye tam bir geçiş yolu sunar, adım adım talimatlar, kod karşılaştırmaları ve bu geçişi değerlendiren profesyonel .NET geliştiriciler için pratik örneklerle.
Neden TextControl'dan Geçin
TextControl'dan geçme kararı genellikle araçlarınızı gerçek gereksinimlerinize uyacak şekilde eşleştirmenize dayanır.TX Text Controltemelde bir belge düzenleyici olup, PDF üretimini ikincil bir özellik olarak ele alır. Geliştirme ekiplerinin geçiş düşünmesinin ana nedenleri şunlardır:
Pahalı Lisanslama: Tek birTX Text Control .NET Servergeliştirici lisansı, 4.198 $ süresiz + bir yıl güncelleme/destek; dört geliştiriciden oluşan bir takım lisansı, 8.398 $ süresiz + 1 yıl (textcontrol.com fiyatlandırmasına göre). Yıllık abonelik yenilemeleri liste fiyatının ~%40'ı kadardır (geliştirici başına yılda yaklaşık 1.698 $) ve yenileme penceresi sona erme tarihinden 30 gün sonra kapanır. Üretim dağıtımı ayrıca ayrı sunucu çalışma zamanı lisansları gerektirir.
İkincil PDF Yolu: Ana mimari, bir kelime işleme motorudur (öncelikli olarak DOCX/RTF), ve PDF bir ihraç yolu olarak yer alır, ana işlem değil.
Paketlenmiş Editör Yüzeyi: TX Text Control, yalnızca sunucu tarafı PDF oluşturma gereksinimi olduğunda gereksiz olabilecek DOCX düzenleme UI bileşenleri ile birlikte gelir.
Kelime İşlemci Mimari: HTML ithalatı bir kelime işleme yolundan geçer, bir Chromium tabanlı işleyici yerine, bu yüzden HTML5/CSS3 sadakati genellikle bir tarayıcı motoru PDF kütüphanesinden daha zayıftır.
ASP.NET'deki STA-Bağlılığı: ServerTextControl, kökenleri STA COM tarzı bileşen modeline dayanır ve STA uyumlu iş parçacıklarında en güvenilir çalışır, bu da günümüzün ASP.NET Core yığınlarında async/MTA barındırma işlemlerini karıştırır.
Karmaşık API: ServerTextControl bağlam yönetimi artı ayrı StringStreamType / BinaryStreamType / StreamType enumları ve seçim odaklı belge modeli, doğrudan PDF oluşturma görevleri için ek yük ekler.
Maliyet Karşılaştırması
| Aspekt | TX Text Control .NET Server | IronPDF |
|---|---|---|
| Tek geliştirici | $4,198 süresiz + 1 yıl destek | Tek seferlik geliştirici başına lisans |
| 4 kişilik ekip | $8,398 süresiz + 1 yıl destek | Daha düşük oturum başına |
| Yıllık Yenileme | ~%40 liste fiyatı (~$1,698/geliştirici/yıl) | İsteğe bağlı destek |
| Sunucu çalışma zamanı | Üretim için ayrı çalışma zamanı lisansı gerekli | Gerekli değil |
| UI Bileşenleri | Paketlenmiş DOCX editör yüzeyi | PDF odaklı |
IronPDF ve TextControl: Özellik Karşılaştırması
Mimari farklılıkları anlamak, teknik karar vericilerin geçiş yatırımını değerlendirmesine yardımcı olur:
| Özellik | TX Text Control | IronPDF |
|---|---|---|
| Ana Odak | DOCX / kelime işleme | PDF oluşturma |
| Lisans Maliyeti (tek geliştirici) | $4,198 süresiz + 1 yıl; ~%40/yıl yenileme | Tek seferlik geliştirici başına lisans |
| PDF Oluşturma | Bir kelime işleme motorunda ihraç yolu | Temel işlevsellik |
| Sunucu çalışma zamanı lisansı | Üretim için gerekli | Gerekli değil |
| Çoklu iş parçacığı | ASP.NET'de STA bağlılığı | STA gereksinimi yok |
| HTML/CSS Renderlama | Kelime işleme yolu üzerinden HTML ithalatı | Chromium HTML5/CSS3 |
| HTML'den PDF'ye | Evet (ikincil) | Evet (birincil) |
| CSS Desteği | Sınırlı | Tam CSS3 |
| JavaScript | Sınırlı | Tam ES2024 |
| URL'yi PDF'ye çevir | Karmaşık kurulum | Yerel |
| Başlıklar/Altbilgiler | Karmaşık API | Basit HTML |
| Posta Birleştirme | Özellikli | HTML şablonları |
| PDF/A | Evet | Evet |
| Şifre Koruması | Evet | Evet |
| Dijital İmzalar | Evet | Evet |
| PDF'leri birleştir | Sınırlı | Evet |
| PDF Ayırma | Sınırlı | Evet |
| Bağlam Yönetimi | Gereklidir | Gerekli değil |
| Platformlar Arası | Windows odaklı | Windows / Linux / macOS / Docker |
Hızlı Başlangıç: TextControl'dan IronPDF'ye Geçiş
Geçiş bu öncü adımlarla hemen başlayabilir.
Adım 1: NuGet Paketlerini Değiştirin
TX Text Control'un başsız sunucu çalışma zamanı tek bir genel NuGet paketi olarak dağıtılmamıştır — genel paket TXTextControl.Web (düzenleyici yoldaşı) ve gerçek ServerTextControl çalışma zamanı lisanslı Windows yükleyicisi/MSI veya satıcının özel NuGet beslemesi aracılığıyla gönderilmektedir. Kaldırma genellikle bu yükleyiciyle gönderilen paketlerin yanı sıra TXTextControl.Web'yi ve MSI'yi kaldırmayı içerir.
# RemoveTX 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
# RemoveTX 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
Adım 2: Ad Alanlarını Güncelleyin
TextControl ad alanlarınıIronPDF ad alanı ile değiştirin:
// 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
Adım 3: Lisansa İzin Verin
Uygulama başlangıcında lisans başlatmayı ekleyin:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Kod Göç Örnekleri
HTML'yi PDF'ye Dönüştürme
En yaygın kullanım senaryosu, bu .NET PDF kütüphaneleri arasındaki mimari farkı gösterir.
TextControl Yaklaşımı:
// 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
IronPDF Yaklaşımı:
// 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
TextControl sürümü, bir ServerTextControl örneği oluşturmayı, bağlamı başlatmak için Create()'yi çağırmayı, StreamType.HTMLFormat ile HTML yüklemeyi ve StreamType.AdobePDF ile kaydetmeyi gerektirir. using bloğu, uygun kaynak itfası için zorunludur.
IronPDF bağlam yönetimini tamamen kaldırır. ChromePdfRenderer inisiyasyon seremonisi gerektirmez—oluştur, HTML'yi render et ve kaydet. Bu mimari basitleştirme, bilişsel yükü ve potansiyel kaynak yönetimi hatalarını azaltır.
İleri düzey HTML-to-PDF senaryoları için HTML'den PDF'ye dönüşüm rehberine bakın.
Birden Fazla PDF'yi Birleştirme
PDF birleştirilmesi, bu kütüphaneler arasındaki önemli karmaşıklık farklılığını ortaya koyuyor.
TextControl Yaklaşımı:
// 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
IronPDF Yaklaşımı:
// 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, dosyaları bayt dizilerine okuma, ServerTextControl bağlamının yönetilmesi ve belgeleri birleştirmek için BinaryStreamType.AdobePDF ve AppendSettings.StartWithNewSection ile Append'yi çağırmayı gerektirir. IronPDF'in PdfDocument.Merge() yöntemi, her şeyi tek, açık bir çağrı ile halleder.
Seçici sayfa çıkartma dahil gelişmiş birleştirme senaryoları için birleştirme ve parçalama PDF kılavuzuna bakın.
Başlık ve Alt Bilgi Ekleme
Dinamik sayfa numaralarına sahip başlık ve altlar, API karmaşıklığı farkını gösterir.
TextControl Yaklaşımı:
// 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
IronPDF Yaklaşımı:
// 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, belirli HeaderFooterType enumları ile HeaderFooter nesneleri oluşturmayı, belgenin bölümlerine textControl.Sections[0] ile erişmeyi ve HeadersAndFooters koleksiyonuna eklemeyi gerektirir. IronPDF, basit placeholder sözdizimi ile doğrudan AddTextHeader ve AddTextFooter yöntemleri (TextHeaderFooter aracılığıyla) sağlar.
Tam stil kontrolüyle HTML tabanlı başlıklar için,IronPDF ayrıca HtmlHeaderFooter'i destekler:
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
}
Üstbilgi ve altbilgi belgelerine göz atarak üstbilgi ve altbilgi seçenekleri hakkında daha fazla bilgi edinin.
TextControl API to IronPDF Haritalama Referansı
Bu eşleştirme, doğrudan API eşdeğerlerini göstererek geçişi hızlandırır:
| 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 şablonları + Razor |
HeaderFooter + Sections[i].HeadersAndFooters |
HtmlHeaderFooter / TextHeaderFooter |
LoadSettings |
RenderingOptions |
StreamType.AdobePDF |
Varsayılan çıktı |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: ServerTextControl Bağlamı
TextControl, her işlem için Create() ve using bloğunu gerektirir.
Çözüm: IronPDF'nin bağlam yönetimi yoktur:
// 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)
Sorun 2: StreamType Dönüşümleri
TextControl, farklı formatları yüklemek ve PDF olarak dışa aktarmak için üç farklı enum kullanır — dizi aşırmaları için StringStreamType, bayt[] aşırmaları için BinaryStreamType ve dosya-yolu Kaydet için StreamType.
Çözüm: IronPDF, ara format dönüştürmesi olmadan doğrudan HTML renderlar:
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
// No format conversion needed
var pdf = renderer.RenderHtmlAsPdf(html);
Dim pdf = renderer.RenderHtmlAsPdf(html)
Sorun 3: DOCX Şablonları
TextControl, posta birleştirme için şablonlar olarak DOCX dosyalarını kullanır.
Çözüm: C# dize interpolasyonu veya Razor ile HTML şablonlarına dönüştürün:
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")
Sorun 4: ASP.NET'de STA Bağlılığı
TextControl ServerTextControl geçmişte STA COM tarzı bir bileşen modelini takip eder ve genellikle STA uyumlu iş parçacıklarında barındırıldığında (örneğin klasik Web Formları'nda [ASPCOMPAT] veya ASP.NET Core'da özel bir STA iş parçacığı/kuyrukla çağrılar sarmalanarak) en güvenilir olur. Bunu MTA işçi iş parçacıkları ile serbest bir şekilde karıştırmak, yük altındayken ara sıra iş parçacığı bağlılık hatalarına yol açabilir.
Çözüm: IronPDF'nin STA gereksinimi yoktur ve MTA işçi iş parçacıklarında, asenkron denetleyicilerde ve .NET 6/7/8/9'da Linux konteynerlerinde değiştirilmeden çalışır.
TextControl Geçiş Kontrol Listesi
Geçiş Öncesi Görevler
Tüm TextControl kullanımını tespit etmek için kod tabanınızı denetleyin:
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" .
HTML'ye dönüştürme için posta birleştirme şablonlarını belgeleyin. Başlık/altbilgi gerekliliklerini HtmlHeaderFooter ile uygulama için not edin. Alternatif çözümler gerektirebilecek herhangi bir DOCX düzenleme işlevselliğini belirleyin.
Kod Güncelleme Görevleri
1.TX Text ControlNuGet paketlerini kaldırın 2.IronPDF NuGet paketini yükleyin
ServerTextControlbağlam yönetimini kaldırın (artıkCreate()çağrıları yok)StringStreamType.HTMLFormatyüklemeleriniRenderHtmlAsPdf'ye dönüştürün- Posta birleştirmeyi dize interpolasyonu veya Razor ile HTML şablonlarına dönüştürün
- Başlıklar/altbilgileri
HtmlHeaderFooterveyaAddTextFooterkullanmak için güncelleyin - Sayfa ayarlarını
RenderingOptionskullanarak basitleştirin - Başlangıçta lisans başlatma ekleyin
Geçiş Sonrası Testler
Geçiş sonrasında bu yönleri doğrulayın:
- Tüm belge şablonlarının doğru şekilde renderlandığını test edin
- GerekiyorsaPDF/Auyumluluğunu doğrulayın
- Parola koruma işlevselliğini test edin
- Tüm sayfalarda başlıkların/altlıkların göründüğünü doğrulayın
- MTA işçi iş parçacıklarında ve Linux konteynerlerinde ASP.NET Core'u barındırmayı doğrulayın — IronPDF'nin STA bağlılık gereksinimi yoktur
IronPDF'e Geçmenin Temel Faydaları
TextControl'dan IronPDF'ye geçmek, PDF üretimine odaklanmış ekipler için çeşitli avantajlar sağlar:
PDF-Öncelikli Mimari: IronPDF, PDF oluşturmak için özel olarak tasarlanmıştır, modern HTML5 ve CSS3 standartlarını kullanarak doküman oluşturma ve işleme yetenekleri sunar.
Maliyet Etkinliği: IronPDF'nin tek seferlik geliştirici başına fiyatlandırması,TX Text Control.NET Server'ın 4.198 $ süresiz + 1 yıl giriş seviyesi katmanı ve ~%40/yıl yenileme modeli ile karşılaştırıldığında daha avantajlıdır, özellikle ayrı sunucu çalışma zamanı lisanslaması dikkate alındığında.
STA Bağlılığı Yok: IronPDF, ASP.NET Core'da standart MTA işçi iş parçacıklarında, asenkron denetleyicilerde ve Linux konteynerlerinde, ServerTextControl'ün kendi COM tarzı iş parçacığı modelinden miras aldığı STA uyumlu barındırma durumlarına ihtiyaç duymadan çalışır.
Bağlam Yönetimi Yok: ServerTextControl oluşturma seremonisini ve üç-enumlu (StringStreamType / BinaryStreamType / StreamType) yükleme/kaydetme dansını ortadan kaldırın — ChromePdfRenderer durumsuzdur.
Modern İşleme Motoru: IronPDF'nin Chromium tabanlı işlemesi, kelime işleme motoru HTML ithalat yolundan ziyade mevcut HTML5/CSS3/JavaScript standartlarını hedefler.

