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:
| Aspekt | TX Text Control | IronPDF |
|---|---|---|
| Temel Lisans | Geliş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 Maliyet | Geliştirici başına 5.750 $+ | $2,998 geliştirici başına |
| UI Bileşenleri | Pakete dahil (potansiyel şişkinlik) | Yalnızca PDF'e odaklı |
| Sunucu Çalışma Zamanı | Ek lisanslama | Dahil |
Özellik Karşılaştırması
Aşağıdaki tablo, TextControl veIronPDFarasındaki ana boyutlarda teknik farklılıkları vurgular:
| Özellik | TX Text Control | IronPDF |
|---|---|---|
| Temel Odak | DOCX düzenleme | PDF oluşturma |
| PDF Kalitesi | Temel, ek özellik | Yüksek, temel işlevsellik |
| HTML'den PDF'ye | Evet (ikincil) | Evet (birincil) |
| CSS Desteği | Sınırlı | Tam CSS3 |
| JavaScript Yürütme | Sınırlı | Tam ES2024 |
| URL'den PDF'ye | Karmaşık kurulum gerekli | Yerel destek |
| Başlıklar/Altbilgiler | Karmaşık API | Basit HTML tabanlı |
| Postalama Birleştirme | Tescilli sistem | HTML şablonları |
| PDF/A Uyumlu | Evet | Evet |
| Şifre Koruması | Evet | Evet |
| Dijital İmzalar | Evet | Evet |
| PDF'leri Birleştirme | Sınırlı | Desteklenen |
| PDF'leri Bölme | Sınırlı | Desteklenen |
| Filigranlar | Karmaşık uygulama | Basit HTML/CSS |
| Donanım Uyumluluğu | Bilinen Intel Iris sorunları | Tüm cihazlarda stabil |
| Bağlam Yönetimi | Gereklidir | Gerekli değil |
| Çapraz Platform | Windows 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 NamespaceBu 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 NamespaceHTML 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 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 | HTML şablonları + Razor |
DocumentTarget.HeadersAndFooters | HtmlHeaderFooter |
LoadSettings | RenderingOptions |
StreamType.AdobePDF | Varsayı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 NamespaceIronPDFUygulaması
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 NamespacePdfDocument.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 NamespaceIronPDFUygulaması
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 NamespaceDaha 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
}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 UsingIronPDFYaklaşı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")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 UsingIronPDFUygulaması
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")Ş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 UsingIronPDFUygulaması
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")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
- 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")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:
- PDF'leri Birleştirme: Birden fazla belgeyi tek bir dosyada birleştirin
- Belgeleri Bölme: Sayfa aralıklarını ayrı PDF'lere ayırın
- Dijital İmzalar: Belge doğruluğu için kriptografik imzalar uygulayın
- Filigran Oluşturma: HTML/CSS ile metin veya resim filigranları ekleyin
- PDF/A Uygunluğu: Arşiv standartlarına uygun belgeler oluşturun
- Form Doldurma: PDF form alanlarını programatik olarak doldurun
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.
