Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

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
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
}
$vbLabelText   $csharpLabel

Ü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)
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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" .
SHELL

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

  1. ServerTextControl bağlam yönetimini kaldırın (artık Create() çağrıları yok)
  2. StringStreamType.HTMLFormat yüklemelerini RenderHtmlAsPdf'ye dönüştürün
  3. Posta birleştirmeyi dize interpolasyonu veya Razor ile HTML şablonlarına dönüştürün
  4. Başlıklar/altbilgileri HtmlHeaderFooter veya AddTextFooter kullanmak için güncelleyin
  5. Sayfa ayarlarını RenderingOptions kullanarak basitleştirin
  6. 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.

Lütfen dikkate alınMetin Kontrol, ilgili sahibinin tescilli ticari markasıdır. Bu site, Text Control ile bağlantılı değildir, onaylanmamış veya Text Control tarafından desteklenmemektedir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara