KARşıLAşTıRMA

Text Control ve IronPDF Karşılaştırması: Teknik Kılavuz

.NET geliştiricileri PDF oluşturma kütüphanelerini değerlendirirken, kurumsal tartışmalarda iki çözüm sıklıkla öne çıkar:TX Text Controlve IronPDF. Her ikisi de PDF çıktısı oluşturabilirken, temelde farklı mimari felsefeleri temsil ederler. Bu teknik karşılaştırma, mimarlar ve geliştiricilerin .NET uygulamaları için bilinçli kararlar vermelerine yardımcı olmak için her iki kütüphaneyi de inceler.

TX Text Control'u Anlamak

TX Text Control, gömülü UI kontrolleri ile DOCX düzenleme becerilerine önem veren kapsamlı bir belge editörü bileşenidir. PDF oluşturma, daha geniş bir belge işleme mimarisi içinde bir ikincil özellik olarak yer alır. Platform, zengin metin düzenleme arayüzlerine ihtiyaç duyan uygulamalar için uygun olan kapsamlı belge düzenleme işlevselliği sağlar.

Ancak, bu kapsamlı yapı, geliştirme ekiplerinin dikkatlice değerlendirmesi gereken bazı hususları beraberinde getirir:

  • Pahalı Lisanslama: TX Text Control, geliştirici başına başlangıçta 3.398 $'dan başlayan bir ticari lisans ile çalışır ve güncellemeye erişimi sürdürmek için zorunlu %40 yıllık yenilemeler gerektirir
  • PDF İkincil Özellik Olarak: Çekirdek mimari, kelime işlemeyi PDF oluşturmanın üzerine koyarak, PDF çıkışını ek bir yetenek olarak değerlendirir
  • Bilinen Donanım Sorunları: 11. nesil Intel işlemcileri etkileyen belge Intel Iris Xe Graphics işleme hataları, kayıt defteri çözümleri gerektirir
  • Şişirilmiş Bağımlılıklar: PDF odaklı iş akışları için gereksiz olabilecek belge düzenleme UI bileşenlerini içerir
  • Karmaşık API: ServerTextControl bağlam yönetimini ve seçim modeli kalıplarını gerektirir

IronPDF'yi Anlamak

IronPDF, esasen PDF oluşturma üzerine odaklanarak, UI bileşenlerini veya DOCX düzenleme araçlarını katmanlaştırmadan köklü bir farklı yaklaşım benimser. Kütüphane, özellikle PDF oluşturma ve manipülasyon için optimize edilmiş yalın, özel tasarımıyla öne çıkar ve PDF öncelikli mimari araç olarak oldukça verimli kılar.

IronPDF'in ana özellikleri şunları içerir:

  • PDF-Öncelikli Mimari: Temelinden itibaren PDF oluşturma için tasarlanmıştır, güçlü belge oluşturma ve işleme yetenekleri sunar
  • Chromium İşlem Motoru: Tam JavaScript çalıştırma desteğiyle modern HTML5 ve CSS3 standartlarından yararlanır
  • Maliyet Etkinliği: Tek seferlik lisanslama modeli, devam eden abonelik maliyetlerini ortadan kaldırır
  • Kendini Kanıtlamış Stabilite: Çeşitli donanım yapılandırmalarında belgelenmiş güvenilirliği, platforma özgü işleme sorunlarını önler
  • Basit Entegrasyon: Bağlam yönetimi veya karmaşık başlatma kalıpları gerektirmez

Fiyat Karşılaştırması

TextControl veIronPDFarasındaki lisans yapılarına bakıldığında zaman içinde önemli maliyet farkları ortaya çıkar:

AspektTX Text ControlIronPDF
Temel LisansGeliştirici başına 3.398 $+$2,998 geliştirici başına bir kerelik
Yıllık Yenileme%40 zorunluİsteğe bağlı destek
4 Kişilik Ekip (1. Yıl)~6.749 $~2.996 $
Toplam 3 Yıllık MaliyetGeliştirici başına 5.750 $+$2,998 geliştirici başına
UI BileşenleriPakete dahil (potansiyel şişkinlik)Yalnızca PDF'e odaklı
Sunucu Çalışma ZamanıEk lisanslamaDahil

Özellik Karşılaştırması

Aşağıdaki tablo, TextControl veIronPDFarasındaki ana boyutlarda teknik farklılıkları vurgular:

ÖzellikTX Text ControlIronPDF
Temel OdakDOCX düzenlemePDF oluşturma
PDF KalitesiTemel, ek özellikYüksek, temel işlevsellik
HTML'den PDF'yeEvet (ikincil)Evet (birincil)
CSS DesteğiSınırlıTam CSS3
JavaScript YürütmeSınırlıTam ES2024
URL'den PDF'yeKarmaşık kurulum gerekliYerel destek
Başlıklar/AltbilgilerKarmaşık APIBasit HTML tabanlı
Postalama BirleştirmeTescilli sistemHTML şablonları
PDF/A UyumluEvetEvet
Şifre KorumasıEvetEvet
Dijital İmzalarEvetEvet
PDF'leri BirleştirmeSınırlıDesteklenen
PDF'leri BölmeSınırlıDesteklenen
FiligranlarKarmaşık uygulamaBasit HTML/CSS
Donanım UyumluluğuBilinen Intel Iris sorunlarıTüm cihazlarda stabil
Bağlam YönetimiGereklidirGerekli değil
Çapraz PlatformWindows odaklıEvet

API Mimarisi Farklılıkları

TextControl veIronPDFarasındaki önemli bir ayrım, onların API tasarım felsefeleri ve başlatma kalıplarındadır.

TextControl Yaklaşımı

TextControl, ServerTextControl sınıfı aracılığıyla açık bir bağlam yönetimi gerektirir. Her işlem, Create() çağrıldıktan sonra bir using bloğu içinde gerçekleşmelidir:

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

Bu kalıp, TextControl'e özgü sınıfları, akış türlerini ve bağlam yaşam döngüsünü anlamayı gerektirir.

IronPDFYaklaşımı

IronPDF bağlam yönetimini tamamen kaldırır. ChromePdfRenderer sınıfı, geliştiricilerin doğrudan kullanabilecekleri bir stateless API sunar:

// 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

HTML dönüştürme yetenekleri hakkında kapsamlı kılavuzluk için HTML to PDF eğitimi sayfasını inceleyin.

API Eşleme Başvurusu

TextControl'dan IronPDF'e geçiş değerlendiren ekipler için bu eşleme, kavramsal eşdeğerlikleri anlamada yardımcı olur:

TX Text ControlIronPDF
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.PDFAConformanceRenderingOptions.PdfAFormat
DocumentServer.MailMergeHTML şablonları + Razor
DocumentTarget.HeadersAndFootersHtmlHeaderFooter
LoadSettingsRenderingOptions
StreamType.AdobePDFVarsayılan çıktı

PDF Belgelerini Birleştirme

Belge birleştirme, iki kütüphane arasında uygulama karmaşıklığının farklılaştığı yaygın bir gereksinimi temsil eder.

TextControl Uygulaması

TextControl, belgelerin açık append mode bayrakları ile sırasıyla yüklenmesini gerektirir:

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

IronPDFUygulaması

IronPDF, birden çok belgeyi kabul eden özel bir statik birleşme yöntemi sunar:

// 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

PdfDocument.Merge yöntemi, herhangi bir sayıda belgeyi kabul eder ve yeni bir birleşik PDF döndürür; bağlam yönetimi veya manuel byte array işlemesi gerektirmez.

Başlıklar, Altbilgiler ve Sayfa Numaralandırma

Dinamik sayfa numaraları içeren başlıklar ve altbilgiler eklemek, önemli API karmaşıklığı farklılıklarını gösterir.

TextControl Uygulaması

TextControl, açık tür beyanları ile bölüm tabanlı başlık/altbilgi manipülasyonunu gerektirir:

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

IronPDFUygulaması

IronPDF, metin tabanlı başlıklar ve altbilgiler eklemek için basitleştirilmiş yöntemler sunar:

// 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

Daha karmaşık başlık tasarımları için,IronPDFayrıca tam HTML ve CSS stil kabul eden HtmlHeaderFooter sınıfı da 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

URL'den PDF'ye Dönüştürme

Canlı web sayfalarını PDF'ye dönüştürmek, her kütüphanenin web içeriğini nasıl ele aldığı konusunda mimari farklılıkları ortaya koyar.

TextControl Yaklaşımı

TextControl, sınırlı CSS ve JavaScript desteği sunan HTML format işleyici aracılığıyla manuel URL yüklenmesini gerektirir:

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();

    LoadSettings loadSettings = new LoadSettings();
    loadSettings.ApplicationFieldFormat = ApplicationFieldFormat.MSWord;
    tx.Load("https://example.com/invoice", StreamType.HTMLFormat, loadSettings);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.PDFAConformance = PDFAConformance.PDFa1b;
    tx.Save("output.pdf", StreamType.AdobePDF, saveSettings);
}
using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();

    LoadSettings loadSettings = new LoadSettings();
    loadSettings.ApplicationFieldFormat = ApplicationFieldFormat.MSWord;
    tx.Load("https://example.com/invoice", StreamType.HTMLFormat, loadSettings);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.PDFAConformance = PDFAConformance.PDFa1b;
    tx.Save("output.pdf", StreamType.AdobePDF, saveSettings);
}
Imports ServerTextControlNamespace

Using tx As New ServerTextControl()
    tx.Create()

    Dim loadSettings As New LoadSettings()
    loadSettings.ApplicationFieldFormat = ApplicationFieldFormat.MSWord
    tx.Load("https://example.com/invoice", StreamType.HTMLFormat, loadSettings)

    Dim saveSettings As New SaveSettings()
    saveSettings.PDFAConformance = PDFAConformance.PDFa1b
    tx.Save("output.pdf", StreamType.AdobePDF, saveSettings)
End Using
$vbLabelText   $csharpLabel

IronPDFYaklaşımı

IronPDF, JavaScript oynatımı ve tüm stilleri uygulayan Chromium motoru aracılığıyla yerel URL işleme sağlar:

var renderer = new ChromePdfRenderer();

// PDF/A compliance - simple property
renderer.RenderingOptions.PdfAFormat = PdfAVersions.PdfA1B;

var pdf = renderer.RenderUrlAsPdf("https://example.com/invoice");
pdf.SaveAs("output.pdf");
var renderer = new ChromePdfRenderer();

// PDF/A compliance - simple property
renderer.RenderingOptions.PdfAFormat = PdfAVersions.PdfA1B;

var pdf = renderer.RenderUrlAsPdf("https://example.com/invoice");
pdf.SaveAs("output.pdf");
Dim renderer = New ChromePdfRenderer()

' PDF/A compliance - simple property
renderer.RenderingOptions.PdfAFormat = PdfAVersions.PdfA1B

Dim pdf = renderer.RenderUrlAsPdf("https://example.com/invoice")
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

RenderUrlAsPdf metodu, React, Angular veya Vue.js gibi çerçevelerle inşa edilmiş modern web uygulamaları için ideal kılan, dinamik olarak üretilen içeriği içeren tamamlanmış render edilmiş sayfayı yakalar.

Sayfa Ayarları ve Yapılandırma

Sayfa boyutlarını, kenar boşluklarını ve yönlendirmeyi yapılandırma, belge ayarlarına farklı yaklaşımları gösterir.

TextControl Uygulaması

TextControl, TWIPS cinsinde ölçümlerle bölüm tabanlı sayfa ayarlarını kullanır:

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    // Complex page settings through sections
    foreach (Section section in tx.Sections)
    {
        section.Format.PageSize = PageSize.A4;
        section.Format.PageMargins = new PageMargins(
            1440, 1440, 1440, 1440); // TWIPS
        section.Format.Landscape = true;
    }

    tx.Save("output.pdf", StreamType.AdobePDF);
}
using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    // Complex page settings through sections
    foreach (Section section in tx.Sections)
    {
        section.Format.PageSize = PageSize.A4;
        section.Format.PageMargins = new PageMargins(
            1440, 1440, 1440, 1440); // TWIPS
        section.Format.Landscape = true;
    }

    tx.Save("output.pdf", StreamType.AdobePDF);
}
Imports TXTextControl

Using tx As New ServerTextControl()
    tx.Create()
    tx.Load(html, StreamType.HTMLFormat)

    ' Complex page settings through sections
    For Each section As Section In tx.Sections
        section.Format.PageSize = PageSize.A4
        section.Format.PageMargins = New PageMargins(1440, 1440, 1440, 1440) ' TWIPS
        section.Format.Landscape = True
    Next

    tx.Save("output.pdf", StreamType.AdobePDF)
End Using
$vbLabelText   $csharpLabel

IronPDFUygulaması

IronPDF, milimetre bazlı ölçümlerle sezgisel bir şekilde merkezileştirilmiş sayfa ayarlarını RenderingOptions içinde sağlar:

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Dim renderer = New ChromePdfRenderer()

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 25 ' mm
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginLeft = 25
renderer.RenderingOptions.MarginRight = 25

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

Şifre Koruması ve Güvenlik

Her iki kütüphane de PDF güvenlik özelliklerini destekler, ancak farklı API kalıpları ile.

TextControl Uygulaması

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.UserPassword = "user123";
    saveSettings.MasterPassword = "owner456";

    tx.Save("protected.pdf", StreamType.AdobePDF, saveSettings);
}
using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();
    tx.Load(html, StreamType.HTMLFormat);

    SaveSettings saveSettings = new SaveSettings();
    saveSettings.UserPassword = "user123";
    saveSettings.MasterPassword = "owner456";

    tx.Save("protected.pdf", StreamType.AdobePDF, saveSettings);
}
Imports ServerTextControlNamespace

Using tx As New ServerTextControl()
    tx.Create()
    tx.Load(html, StreamType.HTMLFormat)

    Dim saveSettings As New SaveSettings()
    saveSettings.UserPassword = "user123"
    saveSettings.MasterPassword = "owner456"

    tx.Save("protected.pdf", StreamType.AdobePDF, saveSettings)
End Using
$vbLabelText   $csharpLabel

IronPDFUygulaması

IronPDF, SecuritySettings özelliği aracılığıyla ayrıntılı güvenlik kontrolü sunar:

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

pdf.SaveAs("protected.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

pdf.SaveAs("protected.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)

pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights

pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

Takımların TextControl'e Alternatifler Düşündüğünde

Geliştirme ekiplerinin, TextControl'e alternatifleri değerlendirmesine yaygın olarak neden olan birçok senaryo vardır:

Maliyet Optimizasyonu

TextControl lisanslaması, geliştirici başına 3.398+ dolardan başlayıp, zorunlu %40 yıllık yenilemelerle, üç yıllık toplam sahip olma maliyeti geliştirici başına 5.750+ dolara ulaşır. Birincil olarak PDF oluşturma odaklı ekipler, önemli ölçüde daha düşük maliyet noktalarındaki alternatifler mevcutken bu fiyatlandırmayı haklı çıkarmakta zorlanmaktadır.

Donanım Uyumluluk Endişeleri

  1. nesil Intel işlemcileri etkileyen belgelenmiş Intel Iris Xe Graphics hatası, TextControl dağıtımları için kayıt defteri çözümleri gerektirir. IronPDF'nin Chromium tabanlı oluşturma motoru, bu donanım spesifik oluşturma sorunlarını tamamen ortadan kaldırır.

PDF-Öncelikli Gereksinimler

PDF oluşturma, doküman düzenleme yerine birincil kullanım durumu olduğunda, TextControl'ün kelime işlemci mimarisi gereksiz karmaşıklık ortaya çıkarır. DOCX düzenleme yeteneklerine veya entegre edilmiş kullanıcı arayüzü kontrollerine ihtiyaç duymayan uygulamalar, IronPDF'nin odaklanmış, PDF-öncelikli tasarımından faydalanır.

Modern Web Teknolojisi Entegrasyonu

TextControl'ün sınırlı CSS ve JavaScript desteği, çağdaş ön uç çerçevelerini kullanan uygulamalar için zorluklar yaratıyor. IronPDF'nin tam HTML5, CSS3 ve ES2024 JavaScript desteği, modern web içeriğinin doğru bir şekilde oluşturulmasını sağlar.

Basitleştirilmiş Dağıtım

TextControl'ün ServerTextControl bağlam yönetimi ve kullanıcı arayüzü bileşeni bağımlılıkları, dağıtım karmaşıklığını artırır. IronPDF, harici bağımlılıklar veya karmaşık başlangıç desenleri olmadan kendi başına bir NuGet paketi olarak çalışır.

Şablon ve Posta Birleştirme Alternatifleri

TextControl'ün özel posta birleştirme sistemi, birleştirme alanları içeren DOCX şablonlarını kullanır. IronPDF, bunu standart HTML şablon yaklaşımlarıyla değiştirir:

// Use standard C# string interpolation
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");
// Use standard C# string interpolation
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 {.CustomerName = "John Doe", .InvoiceNumber = "12345", .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

Daha karmaşık şablon senaryoları için IronPDF, Razor motorları ve diğer şablon çerçeveleri ile entegre olur. Detaylı uygulama desenleri için Razor şablon entegrasyon kılavuzuna bakın.

.NET Uyumluluğu ve Geleceğe Hazırlık

Her iki kütüphane de mevcut .NET uygulamalarını destekler. IronPDF, .NET 8, .NET 9 ve 2026'da beklenen .NET 10 dahil olmak üzere, gelecekteki sürümlerle uyumluluğu sağlamak için düzenli güncellemelerle aktif geliştirme yapar. Kütüphanenin async/await desteği, modern C# geliştirme uygulamalarına uygun şekilde tüm API'si boyunca yaygın olup, C# 13'teki özellikleri ve beklenen C# 14 yeteneklerini içerir.

Ek PDF Yetenekleri

Oluşturmanın ötesinde, IronPDF, belgenin faydasını genişleten belge manipülasyon özellikleri sağlar:

Sonuç

TX Text Control ve IronPDF, PDF çıktısı üretmelerine rağmen farklı birincil amaçlara hizmet eder. TextControl, zengin metin düzenleme arayüzleri ile birlikte doküman dışa aktarma yetenekleri gerektiren uygulamalar için ideal olan kapsamlı bir doküman düzenleyici olarak öne çıkar.

IronPDF dikkati HTML ve web içeriğinden PDF üretimine odaklanarak, geliştiricilerin HTML, URL veya dinamik olarak üretilen içeriği tam bir doküman düzenleme altyapısının genel yükü olmadan PDF'ye dönüştürmeyi gerektirenler için entegre bir çözüm sunar. Chromium tabanlı işlemesi, tarayıcı görüntüsü ile eşleşen piksel mükemmel çıkışı garanti ederken, API tasarımı, standart web geliştirme iş akışları ile entegrasyonu ve sadeliği öncelikli hale getirir.

Seçim proje gereksinimlerine bağlıdır: PDF dışa aktarma ile birlikte kapsamlı doküman düzenleme TextControl lehinedir, oysa web içeriğinden doğrudan PDF oluşturma IronPDF'nin güçlü yanları ile örtüşür. TextControl'ü öncelikle PDF oluşturma için kullanan ekipler, IronPDF'yi değerlendirerek önemli maliyet indirimi ve basitleştirilmiş dağıtım fırsatlarını keşfedebilir.

Ek uygulama kılavuzu için, IronPDF belgelerini ve belirli kullanım durumları ile gelişmiş özellikleri kapsayan eğitimleri keşfedin.

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.