Altbilgi içeriğine atla
ÜRüN KARşıLAşTıRMALARı

Ghostscript GPL vs IronPDF: Teknik Karşılaştırma Kılavuzu

Full Comparison

Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.

View Full Comparison

.NET, Chrome renderlaması kullanarak tam CSS3 ve JavaScript desteği ile mükemmel HTML'den PDF'e dönüştürme sağlar. Buna karşılık, iText programatik PDF oluşturma sunar ancak modern HTML dönüşümüyle mücadele eder, bu da web standartlarında PDF gerekiyor ASP.NET MVC uygulamaları için .NET'yi daha iyi bir seçenek yapar.

ASP.NET MVC uygulamalarında PDF belgeleri oluşturmak, raporlar, faturalar ve indirilebilir içerik oluşturmak için yaygın bir gereksinimdir. iText yıllardır popüler bir seçenek olmasına rağmen, .NET HTML render yetenekleri ile üstün bir modern alternatif sunar. Bu makale, .NET PDF oluşturma ihtiyaçlarınız için bilinçli bir karar vermenize yardımcı olmak amacıyla her iki yaklaşımı da inceler.

Her iki kütüphane de aynı temel problemi çözer -- .NET web ortamında PDF oluşturma -- ancak temelde farklı yaklaşımlar benimserler. iText, PDF'leri bir nesne modeli üzerinden programatik olarak oluştururken, .NET, HTML'yi tam bir Chrome render motoru kullanarak PDF'ye dönüştürür. Bu mimari farkı anlamak, doğru aracı seçmenin anahtarıdır. Microsoft'un ASP.NET MVC framework'ü, her iki entegrasyon modelini de destekler ve her iki kütüphane de standart controller-action hattına bağlanabilir.

Her Kütüphane Nasıl Kurulur?

Herhangi bir kod yazmadan önce her kütüphaneyi projenize dahil etmelisiniz. NuGet, .NET için standart paket yöneticisidir ve her iki kurulumu da sorunsuz bir şekilde gerçekleştirir. iText için, NuGet aracılığıyla eski paketi yükleyin:

dotnet add package iTextSharp
dotnet add package iTextSharp
SHELL

IronPDF için, NuGet üzerinden de yükleyin:

dotnet add package IronPdf

IronPDF, Chrome render motorunu paketle birlikte bir araya getirir, bu nedenle sunucunuzda ek bir tarayıcı kurulumu gerektirmez. Kütüphane, Windows, Linux, macOS ve konteyner ortamlarını kutudan çıktığı gibi destekler. Yükledikten sonra, uygulama başlangıcında IronPDF lisans anahtarınızı ekleyin.

MVC'de iText Kullanarak PDF Nasıl Oluşturulur?

iText'i ASP.NET MVC uygulamanızda PDF dosyaları oluşturmak için önce kütüphaneyi NuGet aracılığıyla yükleyin. iText kütüphanesi, Belge sınıfı ve nesne modeli aracılığıyla PDF oluşturma üzerinde düşük düzey kontrol sağlar.

Aşağıdaki kod, MVC kontrolcüsünde iText ile PDF'ler oluşturmak için üretime hazır bir uygulamayı gösterir:

// Production-ready iTextSharp implementation with proper resource disposal
public class ReportController : Controller
{
    private readonly ILogger<ReportController> _logger;

    public ReportController(ILogger<ReportController> logger)
    {
        _logger = logger;
    }

    public ActionResult GeneratePDF()
    {
        try
        {
            using var memoryStream = new MemoryStream();
            using var document = new Document(PageSize.A4, 50, 50, 25, 25);
            using var writer = PdfWriter.GetInstance(document, memoryStream);

            document.Open();
            document.AddTitle("Generated Report");
            document.AddCreationDate();

            var titleFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 16);
            document.Add(new Paragraph("Hello World", titleFont));
            document.Add(new Paragraph("This is a PDF document created with iTextSharp"));

            var table = new PdfPTable(3);
            table.AddCell("Header 1");
            table.AddCell("Header 2");
            table.AddCell("Header 3");
            document.Add(table);

            document.Close();

            var pdfBytes = memoryStream.ToArray();
            Response.Headers.Add("Content-Disposition", "inline; filename=report.pdf");
            _logger.LogInformation("PDF generated: {Size} bytes", pdfBytes.Length);
            return File(pdfBytes, "application/pdf");
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error generating PDF");
            return StatusCode(500, "Error generating PDF document");
        }
    }
}
// Production-ready iTextSharp implementation with proper resource disposal
public class ReportController : Controller
{
    private readonly ILogger<ReportController> _logger;

    public ReportController(ILogger<ReportController> logger)
    {
        _logger = logger;
    }

    public ActionResult GeneratePDF()
    {
        try
        {
            using var memoryStream = new MemoryStream();
            using var document = new Document(PageSize.A4, 50, 50, 25, 25);
            using var writer = PdfWriter.GetInstance(document, memoryStream);

            document.Open();
            document.AddTitle("Generated Report");
            document.AddCreationDate();

            var titleFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 16);
            document.Add(new Paragraph("Hello World", titleFont));
            document.Add(new Paragraph("This is a PDF document created with iTextSharp"));

            var table = new PdfPTable(3);
            table.AddCell("Header 1");
            table.AddCell("Header 2");
            table.AddCell("Header 3");
            document.Add(table);

            document.Close();

            var pdfBytes = memoryStream.ToArray();
            Response.Headers.Add("Content-Disposition", "inline; filename=report.pdf");
            _logger.LogInformation("PDF generated: {Size} bytes", pdfBytes.Length);
            return File(pdfBytes, "application/pdf");
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error generating PDF");
            return StatusCode(500, "Error generating PDF document");
        }
    }
}
Imports System
Imports System.IO
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Extensions.Logging
Imports iTextSharp.text
Imports iTextSharp.text.pdf

Public Class ReportController
    Inherits Controller

    Private ReadOnly _logger As ILogger(Of ReportController)

    Public Sub New(logger As ILogger(Of ReportController))
        _logger = logger
    End Sub

    Public Function GeneratePDF() As ActionResult
        Try
            Using memoryStream As New MemoryStream()
                Using document As New Document(PageSize.A4, 50, 50, 25, 25)
                    Using writer As PdfWriter = PdfWriter.GetInstance(document, memoryStream)
                        document.Open()
                        document.AddTitle("Generated Report")
                        document.AddCreationDate()

                        Dim titleFont As Font = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 16)
                        document.Add(New Paragraph("Hello World", titleFont))
                        document.Add(New Paragraph("This is a PDF document created with iTextSharp"))

                        Dim table As New PdfPTable(3)
                        table.AddCell("Header 1")
                        table.AddCell("Header 2")
                        table.AddCell("Header 3")
                        document.Add(table)

                        document.Close()

                        Dim pdfBytes As Byte() = memoryStream.ToArray()
                        Response.Headers.Add("Content-Disposition", "inline; filename=report.pdf")
                        _logger.LogInformation("PDF generated: {Size} bytes", pdfBytes.Length)
                        Return File(pdfBytes, "application/pdf")
                    End Using
                End Using
            End Using
        Catch ex As Exception
            _logger.LogError(ex, "Error generating PDF")
            Return StatusCode(500, "Error generating PDF document")
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

iText Çıktısı Nasıl Görünür?

Bir 'Merhaba Dünya' başlığı ve 'Bu, iText ile oluşturulan bir PDF belgesidir' altyazısı ile basit bir belgeye sahip PDF görüntüleyici, kitaplığın programatik PDF oluşturma yeteneklerinin temel metin ve tablo formatlama yeteneklerini gösteren beyaz bir arka plan üzerinde

Bu kod, temel yaklaşımı gösterir: bir Document örneği oluşturun, bir PdfWriter ekleyin bir akışa, eleman nesnelerini kullanarak içerik ekleyin ve bir eylem sonucu ile dosyayı geri döndürün. Uygulama, üretim sistemleri için gerekli olan kaynak bertaraf desenlerini yönetir. Daha gelişmiş senaryolar için özel kağıt boyutları yapılandırabilir, sayfa yönlendirmesini yönetebilir veya sayfa numaraları ekleyebilirsiniz.

Programlamaya dayalı yaklaşım, sayfadaki her öğe üzerinde ince ayarlı kontrol sağlar. Bu hassasiyet, yapısının her zaman aynı olduğu fatura, sertifika veya form gibi sabit düzenlere sahip belgeler oluştururken kullanışlıdır. Ancak, içerik dinamik veya bir HTML şablonu tarafından yönlendirildiğinde bir yük haline gelir.

iText Kütüphanesi ile HTML'den PDF'e Dönüşümün Zorlukları Nelerdir?

iText, programatik PDF oluşturma konusunda mükemmel olsa da, HTML'den PDF'e dönüştürme önemli zorluklar sunar. Kullanım süresi geçmiş HTMLWorker sınıfı ve onun yerine geçen XMLWorker sınıfı sınırlı CSS desteğine sahiptir ve özellikle duyarlı CSS ve JavaScript ile oluşturulan içerik ile uğraşırken modern web içeriği ile mücadele eder.

// HTML conversion with iTextSharp -- note the CSS limitations
public class HtmlToPdfController : Controller
{
    private readonly ILogger<HtmlToPdfController> _logger;

    public HtmlToPdfController(ILogger<HtmlToPdfController> logger)
    {
        _logger = logger;
    }

    public async Task<ActionResult> ConvertHtmlAsync(string htmlContent)
    {
        if (string.IsNullOrWhiteSpace(htmlContent))
            return BadRequest("HTML content is required");

        return await Task.Run(() =>
        {
            using var stream = new MemoryStream();
            using var document = new Document(PageSize.A4);
            using var writer = PdfWriter.GetInstance(document, stream);

            document.Open();

            var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
            var fontProvider = new XMLWorkerFontProvider();
            var cssAppliers = new CssAppliersImpl(fontProvider);
            var htmlContext = new HtmlPipelineContext(cssAppliers);
            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

            // Pipeline with limited CSS3 support
            var pdf = new PdfWriterPipeline(document, writer);
            var html = new HtmlPipeline(htmlContext, pdf);
            var css = new CssResolverPipeline(cssResolver, html);

            var worker = new XMLWorker(css, true);
            var parser = new XMLParser(worker);

            using var stringReader = new StringReader(htmlContent);
            parser.Parse(stringReader);
            document.Close();

            return File(stream.ToArray(), "application/pdf", "converted.pdf");
        });
    }
}
// HTML conversion with iTextSharp -- note the CSS limitations
public class HtmlToPdfController : Controller
{
    private readonly ILogger<HtmlToPdfController> _logger;

    public HtmlToPdfController(ILogger<HtmlToPdfController> logger)
    {
        _logger = logger;
    }

    public async Task<ActionResult> ConvertHtmlAsync(string htmlContent)
    {
        if (string.IsNullOrWhiteSpace(htmlContent))
            return BadRequest("HTML content is required");

        return await Task.Run(() =>
        {
            using var stream = new MemoryStream();
            using var document = new Document(PageSize.A4);
            using var writer = PdfWriter.GetInstance(document, stream);

            document.Open();

            var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
            var fontProvider = new XMLWorkerFontProvider();
            var cssAppliers = new CssAppliersImpl(fontProvider);
            var htmlContext = new HtmlPipelineContext(cssAppliers);
            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

            // Pipeline with limited CSS3 support
            var pdf = new PdfWriterPipeline(document, writer);
            var html = new HtmlPipeline(htmlContext, pdf);
            var css = new CssResolverPipeline(cssResolver, html);

            var worker = new XMLWorker(css, true);
            var parser = new XMLParser(worker);

            using var stringReader = new StringReader(htmlContent);
            parser.Parse(stringReader);
            document.Close();

            return File(stream.ToArray(), "application/pdf", "converted.pdf");
        });
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports System.Web.Mvc
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.tool.xml
Imports iTextSharp.tool.xml.pipeline.css
Imports iTextSharp.tool.xml.pipeline.html
Imports iTextSharp.tool.xml.pipeline.end
Imports Microsoft.Extensions.Logging

' HTML conversion with iTextSharp -- note the CSS limitations
Public Class HtmlToPdfController
    Inherits Controller

    Private ReadOnly _logger As ILogger(Of HtmlToPdfController)

    Public Sub New(logger As ILogger(Of HtmlToPdfController))
        _logger = logger
    End Sub

    Public Async Function ConvertHtmlAsync(htmlContent As String) As Task(Of ActionResult)
        If String.IsNullOrWhiteSpace(htmlContent) Then
            Return BadRequest("HTML content is required")
        End If

        Return Await Task.Run(Function()
                                  Using stream As New MemoryStream()
                                      Using document As New Document(PageSize.A4)
                                          Using writer = PdfWriter.GetInstance(document, stream)
                                              document.Open()

                                              Dim cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(True)
                                              Dim fontProvider = New XMLWorkerFontProvider()
                                              Dim cssAppliers = New CssAppliersImpl(fontProvider)
                                              Dim htmlContext = New HtmlPipelineContext(cssAppliers)
                                              htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory())

                                              ' Pipeline with limited CSS3 support
                                              Dim pdf = New PdfWriterPipeline(document, writer)
                                              Dim html = New HtmlPipeline(htmlContext, pdf)
                                              Dim css = New CssResolverPipeline(cssResolver, html)

                                              Dim worker = New XMLWorker(css, True)
                                              Dim parser = New XMLParser(worker)

                                              Using stringReader As New StringReader(htmlContent)
                                                  parser.Parse(stringReader)
                                              End Using

                                              document.Close()
                                          End Using
                                      End Using
                                  End Using

                                  Return File(stream.ToArray(), "application/pdf", "converted.pdf")
                              End Function)
    End Function
End Class
$vbLabelText   $csharpLabel

iText HTML Renderlemeyi Ne Kadar İyi Yönetir?

PDF görüntüleyicisinde HTML'den dönüştürülmüş bir test belgesi gösteriliyor, metin formatlaması (kalın, italik, kırmızı satır içi metin) korunmuş ve madde işaretli liste mevcut, ancak içerikte belirtilen sarı arka plan eksik, XMLWorkerHelper'ın CSS işleme sınırlamalarını gösteriyor

Bootstrap düzenleri, JavaScript ile oluşturulan içerik veya karmaşık CSS3 stilleriyle çalışırken sınırlamalar belirgin hale gelir. Yaygın sorunlar arasında eksik web yazı tipleri, bozuk duyarlı düzenler ve CSS medya türleri için destek eksikliği bulunur. Ek olarak, iText, HTML içeriği dönüştürürken uluslararası dil karakterleri ve SVG grafikleriyle mücadele eder.

Bu kısıtlamalar sadece kozmetik değil. Müşteri odaklı bir fatura veya rapor, arka plan rengi görünmediği için ya da bir ızgara çöktüğü için yanlış şekilde oluşturulduğunda, PDF amacını yitirir. HTML şablonlarını sürdüren ekipler için, iText'in nesne modeli içindeki aynı düzeni yeniden oluşturmak, her belge tasarımının iki versiyonunu sürdürmek anlamına gelir. Bu kopyalanma maliyet ekler ve web görünümü ile PDF çıktısı arasında uyumsuzluk oluşturur.

Chrome Motoru Kullanarak HTML'den PDF'leri Nasıl Oluşturursunuz?

IronPDF, piksel mükemmelliğinde HTML'den PDF'e dönüşüm sağlamak için bir Chrome render motoru kullanarak PDF oluşturmayı dönüştürüyor. Visual Studio projenizde basit bir yaklaşım ile başlamak için IronPDF NuGet paketini yükleyin.

using IronPdf;

// Configure .NET in Program.cs (top-level statements, .NET 10)
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<ChromePdfRenderer>(_ =>
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop = 10;
    renderer.RenderingOptions.MarginBottom = 10;
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
    return renderer;
});

builder.Services.AddMemoryCache();
builder.Services.AddControllersWithViews();

var app = builder.Build();
app.MapControllers();
app.Run();
using IronPdf;

// Configure .NET in Program.cs (top-level statements, .NET 10)
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<ChromePdfRenderer>(_ =>
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop = 10;
    renderer.RenderingOptions.MarginBottom = 10;
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
    return renderer;
});

builder.Services.AddMemoryCache();
builder.Services.AddControllersWithViews();

var app = builder.Build();
app.MapControllers();
app.Run();
Imports IronPdf

' Configure .NET in Program.vb (top-level statements, .NET 10)
Dim builder = WebApplication.CreateBuilder(args)

builder.Services.AddSingleton(Of ChromePdfRenderer)(Function(_)
    Dim renderer = New ChromePdfRenderer()
    renderer.RenderingOptions.MarginTop = 10
    renderer.RenderingOptions.MarginBottom = 10
    renderer.RenderingOptions.EnableJavaScript = True
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
    Return renderer
End Function)

builder.Services.AddMemoryCache()
builder.Services.AddControllersWithViews()

Dim app = builder.Build()
app.MapControllers()
app.Run()
$vbLabelText   $csharpLabel

Chrome İşleme Kalitesinden Ne Bekleyebilirsiniz?

'Modern PDF Generation' başlığı ve CSS3, Bootstrap ve JavaScript desteği hakkında alt başlığı gösteren mor gradyan başlıklı bir belgeyi gösteren PDF görüntüleyici, IronPDF'in gelişmiş CSS3 gradyan işleme yeteneklerini sergiliyor

ChromePdfRenderer, karmaşık düzenlerle manuel çözümler olmadan başa çıkar. CSS Grid, Flexbox, Google Fonts'tan web yazı tipleri ve JavaScript grafikleri destekler. Kütüphane ayrıca dinamik içerikler için işleme gecikmelerini yönetir ve duyarlı sayfalar için görünüm alanı yapılandırmasını destekler. Tam yapılandırma seçenekleri için, rendering options reference bölümünü inceleyin.

ASP.NET MVC'de Bir Razor Görünümünü PDF'ye Nasıl Dönüştürürsünüz?

IronPDF, Razor Motoru görünüm oluşturma yetenekleriyle öne çıkar. ViewBag, ViewData ve model bağlamayı tam destekle, tüm Razor görünümlerini doğrudan PDF'ye dönüştürebilirsiniz. Aşağıdaki örnek, bir fatura görünümünü sunucu tarafında işler ve indirilebilir bir PDF olarak döndürür:

// Production-ready Razor view to PDF
public class InvoiceController : Controller
{
    private readonly ChromePdfRenderer _pdfRenderer;
    private readonly IInvoiceService _invoiceService;
    private readonly IRazorViewToStringRenderer _razorRenderer;

    public InvoiceController(
        ChromePdfRenderer pdfRenderer,
        IInvoiceService invoiceService,
        IRazorViewToStringRenderer razorRenderer)
    {
        _pdfRenderer = pdfRenderer;
        _invoiceService = invoiceService;
        _razorRenderer = razorRenderer;
    }

    [HttpGet]
    public async Task<IActionResult> DownloadInvoiceAsync(int id)
    {
        var invoice = await _invoiceService.GetInvoiceAsync(id);
        if (invoice == null) return NotFound();

        var htmlContent = await _razorRenderer.RenderViewToStringAsync(
            "Invoice/InvoiceTemplate", invoice);

        var renderOptions = new ChromePdfRenderOptions
        {
            PaperSize = PdfPaperSize.A4,
            MarginTop = 20,
            MarginBottom = 20,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        };

        var pdf = await Task.Run(() =>
            _pdfRenderer.RenderHtmlAsPdf(htmlContent, renderOptions));

        pdf.MetaData.Title = $"Invoice-{invoice.InvoiceNumber}";
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}";

        var fileName = $"Invoice-{invoice.InvoiceNumber}-{DateTime.UtcNow:yyyyMMdd}.pdf";
        return File(pdf.BinaryData, "application/pdf", fileName);
    }
}
// Production-ready Razor view to PDF
public class InvoiceController : Controller
{
    private readonly ChromePdfRenderer _pdfRenderer;
    private readonly IInvoiceService _invoiceService;
    private readonly IRazorViewToStringRenderer _razorRenderer;

    public InvoiceController(
        ChromePdfRenderer pdfRenderer,
        IInvoiceService invoiceService,
        IRazorViewToStringRenderer razorRenderer)
    {
        _pdfRenderer = pdfRenderer;
        _invoiceService = invoiceService;
        _razorRenderer = razorRenderer;
    }

    [HttpGet]
    public async Task<IActionResult> DownloadInvoiceAsync(int id)
    {
        var invoice = await _invoiceService.GetInvoiceAsync(id);
        if (invoice == null) return NotFound();

        var htmlContent = await _razorRenderer.RenderViewToStringAsync(
            "Invoice/InvoiceTemplate", invoice);

        var renderOptions = new ChromePdfRenderOptions
        {
            PaperSize = PdfPaperSize.A4,
            MarginTop = 20,
            MarginBottom = 20,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        };

        var pdf = await Task.Run(() =>
            _pdfRenderer.RenderHtmlAsPdf(htmlContent, renderOptions));

        pdf.MetaData.Title = $"Invoice-{invoice.InvoiceNumber}";
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}";

        var fileName = $"Invoice-{invoice.InvoiceNumber}-{DateTime.UtcNow:yyyyMMdd}.pdf";
        return File(pdf.BinaryData, "application/pdf", fileName);
    }
}
Imports System
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

' Production-ready Razor view to PDF
Public Class InvoiceController
    Inherits Controller

    Private ReadOnly _pdfRenderer As ChromePdfRenderer
    Private ReadOnly _invoiceService As IInvoiceService
    Private ReadOnly _razorRenderer As IRazorViewToStringRenderer

    Public Sub New(pdfRenderer As ChromePdfRenderer, invoiceService As IInvoiceService, razorRenderer As IRazorViewToStringRenderer)
        _pdfRenderer = pdfRenderer
        _invoiceService = invoiceService
        _razorRenderer = razorRenderer
    End Sub

    <HttpGet>
    Public Async Function DownloadInvoiceAsync(id As Integer) As Task(Of IActionResult)
        Dim invoice = Await _invoiceService.GetInvoiceAsync(id)
        If invoice Is Nothing Then Return NotFound()

        Dim htmlContent = Await _razorRenderer.RenderViewToStringAsync("Invoice/InvoiceTemplate", invoice)

        Dim renderOptions As New ChromePdfRenderOptions With {
            .PaperSize = PdfPaperSize.A4,
            .MarginTop = 20,
            .MarginBottom = 20,
            .PrintHtmlBackgrounds = True,
            .CreatePdfFormsFromHtml = True
        }

        Dim pdf = Await Task.Run(Function() _pdfRenderer.RenderHtmlAsPdf(htmlContent, renderOptions))

        pdf.MetaData.Title = $"Invoice-{invoice.InvoiceNumber}"
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}"

        Dim fileName = $"Invoice-{invoice.InvoiceNumber}-{DateTime.UtcNow:yyyyMMdd}.pdf"
        Return File(pdf.BinaryData, "application/pdf", fileName)
    End Function
End Class
$vbLabelText   $csharpLabel

Razor Görünüm Dönüşümü Manuel Oluşturma ile Nasıl Karşılaştırılır?

ASP.NET Core web uygulaması ana sayfasının, gezinme menüsü, karşılama başlığı ve footer (altbilgi) ile korunan Bootstrap stilini gösteren PDF renderı, web sayfası düzenlerinin PDF formatına nasıl dönüştüğünü gösteriyor

Kodla doküman yapısını manuel olarak oluşturmayı gerektiren iText'in yaklaşımı ile karşılaştırın. Her başlık, tablo hücresi, yazı tipi seçimi ve boşluk ayarı bir C# nesnesi olarak ifade edilmelidir. Tarayıcıda yinelemek için herhangi bir HTML şablonu yok; her değişiklik, PDF çıktısına karşı derleme ve kontrol döngüsü gerektirir.

IronPDF'in Razor entegrasyonu, PDF oluşturma için mevcut Razor görünümlerini, HTML dosyalarını veya HTML dizelerini yeniden kullanmanıza olanak tanır. Ayrıca, varlık yüklemesi için temel URL yapılandırmalarını uygulayabilir veya HTML ZIP dosyaları ile çalışabilirsiniz. CSHTML to PDF nasıl yapılır kılavuzu, bağımlılık enjeksiyonu kurulumu dahil, tam Razor renderı deseni boyunca rehberlik eder.

Dosya İndirme ve Akış Yoluyla Nasıl PDF Oluşturursunuz?

Her iki kütüphane de web uygulamalarında PDF dosyaları için çeşitli çıktı yöntemlerini destekler. IronPDF, PDF sıkıştırma, hızlı web görüntülemesi için lineerleştirme ve resimlere dönüştürme gibi ek özellikler sunar. Aşağıdaki akış denetleyicisi, caching ve aralık istek desteğiyle büyük PDF'lerin nasıl ele alınacağını gösterir:

// Streaming controller for large PDFs
public class StreamingPdfController : Controller
{
    private readonly ChromePdfRenderer _ironPdfRenderer;
    private readonly IMemoryCache _cache;

    public StreamingPdfController(ChromePdfRenderer ironPdfRenderer, IMemoryCache cache)
    {
        _ironPdfRenderer = ironPdfRenderer;
        _cache = cache;
    }

    [HttpGet]
    public async Task<IActionResult> StreamLargePdf(string reportId)
    {
        var cacheKey = $"pdf_stream_{reportId}";
        if (_cache.TryGetValue<byte[]>(cacheKey, out var cachedPdf))
            return File(cachedPdf, "application/pdf", $"report_{reportId}.pdf");

        Response.ContentType = "application/pdf";
        Response.Headers.Add("Content-Disposition",
            $"attachment; filename=large_report_{reportId}.pdf");

        await using var stream = Response.BodyWriter.AsStream();
        var html = await GenerateLargeHtmlReport(reportId);
        var pdf = _ironPdfRenderer.RenderHtmlAsPdf(html);
        pdf.SaveAs(stream);

        if (pdf.BinaryData.Length < 10_000_000)
            _cache.Set(cacheKey, pdf.BinaryData, TimeSpan.FromMinutes(30));

        return new EmptyResult();
    }

    [HttpGet]
    public IActionResult DownloadWithRangeSupport(string documentId)
    {
        var pdfBytes = GetPdfBytes(documentId);
        return File(pdfBytes, "application/pdf",
            $"document_{documentId}.pdf", enableRangeProcessing: true);
    }
}
// Streaming controller for large PDFs
public class StreamingPdfController : Controller
{
    private readonly ChromePdfRenderer _ironPdfRenderer;
    private readonly IMemoryCache _cache;

    public StreamingPdfController(ChromePdfRenderer ironPdfRenderer, IMemoryCache cache)
    {
        _ironPdfRenderer = ironPdfRenderer;
        _cache = cache;
    }

    [HttpGet]
    public async Task<IActionResult> StreamLargePdf(string reportId)
    {
        var cacheKey = $"pdf_stream_{reportId}";
        if (_cache.TryGetValue<byte[]>(cacheKey, out var cachedPdf))
            return File(cachedPdf, "application/pdf", $"report_{reportId}.pdf");

        Response.ContentType = "application/pdf";
        Response.Headers.Add("Content-Disposition",
            $"attachment; filename=large_report_{reportId}.pdf");

        await using var stream = Response.BodyWriter.AsStream();
        var html = await GenerateLargeHtmlReport(reportId);
        var pdf = _ironPdfRenderer.RenderHtmlAsPdf(html);
        pdf.SaveAs(stream);

        if (pdf.BinaryData.Length < 10_000_000)
            _cache.Set(cacheKey, pdf.BinaryData, TimeSpan.FromMinutes(30));

        return new EmptyResult();
    }

    [HttpGet]
    public IActionResult DownloadWithRangeSupport(string documentId)
    {
        var pdfBytes = GetPdfBytes(documentId);
        return File(pdfBytes, "application/pdf",
            $"document_{documentId}.pdf", enableRangeProcessing: true);
    }
}
Imports System
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Extensions.Caching.Memory

' Streaming controller for large PDFs
Public Class StreamingPdfController
    Inherits Controller

    Private ReadOnly _ironPdfRenderer As ChromePdfRenderer
    Private ReadOnly _cache As IMemoryCache

    Public Sub New(ironPdfRenderer As ChromePdfRenderer, cache As IMemoryCache)
        _ironPdfRenderer = ironPdfRenderer
        _cache = cache
    End Sub

    <HttpGet>
    Public Async Function StreamLargePdf(reportId As String) As Task(Of IActionResult)
        Dim cacheKey = $"pdf_stream_{reportId}"
        Dim cachedPdf As Byte() = Nothing

        If _cache.TryGetValue(cacheKey, cachedPdf) Then
            Return File(cachedPdf, "application/pdf", $"report_{reportId}.pdf")
        End If

        Response.ContentType = "application/pdf"
        Response.Headers.Add("Content-Disposition", $"attachment; filename=large_report_{reportId}.pdf")

        Await Using stream = Response.BodyWriter.AsStream()
            Dim html = Await GenerateLargeHtmlReport(reportId)
            Dim pdf = _ironPdfRenderer.RenderHtmlAsPdf(html)
            pdf.SaveAs(stream)

            If pdf.BinaryData.Length < 10000000 Then
                _cache.Set(cacheKey, pdf.BinaryData, TimeSpan.FromMinutes(30))
            End If
        End Using

        Return New EmptyResult()
    End Function

    <HttpGet>
    Public Function DownloadWithRangeSupport(documentId As String) As IActionResult
        Dim pdfBytes = GetPdfBytes(documentId)
        Return File(pdfBytes, "application/pdf", $"document_{documentId}.pdf", enableRangeProcessing:=True)
    End Function
End Class
$vbLabelText   $csharpLabel

Gelişmiş senaryolar için IronPDF, paralel PDF oluşturma, çok iş parçacıklı işleme ve toplu işlemler destekler. Özel günlükleme uygulayabilir, ağ kimlik doğrulaması yapabilir, çerezlerle çalışabilir ve güvenli belge oluşturma için HTTP istek başlıkları ekleyebilirsiniz.

İki Kütüphane Yan Yana Nasıl Karşılaştırılır?

Aşağıdaki tablo, ASP.NET MVC projeleri için iText ve .NET arasındaki temel farkları özetler:

iText vs. .NET -- ASP.NET MVC için Özellik Karşılaştırması
Özellik iText IronPDF
HTML'den PDF'ye dönüştürme Sınırlı (XMLWorker, modern CSS3 yok) Tam Chrome motoru (CSS3, JS, Flexbox)
Razor / CSHTML desteği Yerel destek yok Dahili Razor görünüm renderı
İş parçacığı güvenliği Manuel kilitleme gerektirir Varsayılan olarak thread-safe
Asenkron API Yerel async yok Tam async desteği
Linux / Docker Destekleniyor Destekleniyor
Lisans türü AGPL (açık kaynak) veya ticari Ücretli, ücretsiz deneme sürümü ile
Dijital imzalar Evet Evet
PDF formları Evet (manuel) Evet (HTML form elemanlarından)

iText, programatik PDF oluşturma için ayrıntılı kontrol sunar, bu da belge yapısı basit ve sabit olduğunda çalışabilir bir seçenek haline getirir. IronPDF, HTML şablonları veya Razor görünümlerini profesyonel PDF belgelerine dönüştürmeniz gerektiğinde daha güçlü bir seçenek sunar, kesin renderı, tam CSS3 desteği ve JavaScript yürütmesi ile.

Üretim ASP.NET uygulamaları için .NET, modern .NET kalıpları ile entegrasyon ve bağımlılık enjeksiyonu ve middleware boru hatları dahil olmak üzere üstün async desteği sağlar. Razor görünümleri renderı, dijital imza ve karmaşık düzenleri ele alma kapasiteleri, onu kurumsal uygulamalar için tercih edilen bir seçenek yapar. Kütüphane ayrıca Blazor Sunucu uygulamaları ve arşiv belgeleri için PDF/A uyumluluğunu destekler.

Lisanslama ve Proje Dikkatleri Neler?

iText kütüphanesi, açık kaynak versiyonu için bir AGPL lisansı kullanır, bu da uygulamanızın kodunun da açık kaynak olmasını gerektirir. iText Group tarafından tescilli projeler için ticari lisanslar mevcut. Özellikle kaynak kodu yayınlayamayacağınız SaaS ürünleri veya dahili kurumsal araçlar için bu lisanslama önemli.

IronPDF, geliştirme ve test için ücretsiz deneme ile ticari bir lisanslama modeli kullanır. Lisanslar, dağıtım ortamına göre ölçeklenir: geliştirici, tek sunucu veya sınırsız dağıtım seçenekleri. Her iki çözümü de uygularken, Docker, Azure ve Linux ortamları dahil dağıtım senaryolarını düşünün.

Yüksek trafikli senaryolar için performans dikkati, async işlemler, uygun bellek yönetimi ve cache stratejileri uygulanmasını içerir. IronPDF'nin Chrome motoru, karmaşık HTML renderleme için üstün performans sağlar, oysa iText, HTML içermeyen basit programatik PDF oluşturma için daha verimli olabilir. Dakikada yüzlerce PDF oluşturan uygulamalar için, gerçekçi yük altında yapılan benchmarking, hangi kütüphanenin altyapınıza daha uygun olduğunu belirlemek için en güvenilir kılavuzdur.

Çoğu MVC projesi için iText'ten IronPDF'ye geçiş basittir. Ana değişiklik, manuel doküman oluşturma kodunun Chrome motoru tarafından renderlanan bir HTML şablonu ile değiştirilmesidir. IronPDF, geçişlerin sorunsuz olmasını sağlamak için geniş dokümantasyon, kod örnekleri ve mühendislik desteği sağlar.

Sonraki Adımlarınız Neler?

Modern web standartları desteğine sahip HTML'yi PDF'e dönüştüren yeni projeler için IronPDF, Chrome tabanlı renderı ile açıkça avantaj sağlar. Temel PDF oluşturma için zaten iText kullanan eski projeler, HTML renderleme doğruluğu bir gereksinim haline gelmedikçe mevcut uygulamaları ile devam edebilirler.

IronPDF'in ücretsiz denemesi ile başlayın ve mevcut Razor görünümleriniz veya HTML şablonlarınızla doğrudan test edin. Tam dokümantasyon ve API referansını inceleyin ve entegrasyonun ne kadar hızlı olduğuna bakın. Mevcut iText tabanlı bir projeyi taşıma konusunda sorularınız varsa veya PDF bellek akışı yönetimi ve PDF/A uyumluluğu konusunda rehberliğe ihtiyacınız varsa, destek ekibi yardıma hazırdır.

IronPDF ve iText ürün ailesinin nasıl karşılaştırıldığını daha geniş bir perspektiften görmek için özel iText vs. IronPDF karşılaştırma sayfasına bakın.

Lütfen dikkate alıniText, ilgili sahibinin tescilli markasıdır. Bu site, iText ile ilişkili, onaylanmış veya sponsor olunmuş değildir. 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.

Sıkça Sorulan Sorular

ASP.NET MVC'de PDF oluşturma için IronPDF'nin iTextSharp'a göre temel avantajı nedir?

IronPDF, iTextSharp'a kıyasla üstün HTML render etme yetenekleri sunar, bu da web içeriğinden yüksek kaliteli PDF'ler oluşturmayı daha kolay hale getirir.

IronPDF'yi bir ASP.NET MVC uygulamasında fatura oluşturmak için kullanabilir miyim?

Evet, IronPDF HTML'den PDF'e dönüştürme özellikleri sayesinde, ASP.NET MVC uygulamalarında fatura ve diğer PDF belgeleri oluşturmak için oldukça uygundur.

IronPDF'nin uygulanması, kullanım kolaylığı bakımından iTextSharp ile nasıl karşılaştırılır?

IronPDF, genellikle iTextSharp'tan daha kolay uygulanabilir olarak kabul edilir, özellikle de PDF oluşturma özelliklerini hızla entegre etmek isteyen geliştiriciler için.

IronPDF, ASP.NET MVC'de karmaşık web sayfalarını PDF'e dönüştürmeyi destekler mi?

Evet, IronPDF, karmaşık web sayfalarını PDF'e dönüştürmede başarılıdır, gelişmiş HTML render etme motoru sayesinde web içeriğini doğru bir şekilde kopyalar.

IronPDF, bir ASP.NET MVC uygulamasından indirilebilir içerik oluşturmak için iyi bir seçim midir?

IronPDF, geniş bir yelpazedeki web içeriğinden yüksek kaliteli PDF'ler oluşturma yeteneği nedeniyle indirilebilir içerik oluşturma için mükemmel bir seçenektir.

IronPDF'nin PDF oluşturmadaki ideal senaryoları nelerdir?

IronPDF, rapor, fatura veya web içeriğinden indirilebilir belgeler oluşturmak gibi yüksek kaliteli HTML'den PDF'e dönüşüm gerektiren senaryolar için idealdir.

IronPDF, modern web teknolojilerine iTextSharp'a göre daha iyi destek sunuyor mu?

Evet, IronPDF modern web teknolojileri ile çalışmak üzere tasarlandığından, iTextSharp'a kıyasla daha iyi uyumluluk ve render doğruluğu sunar.

IronPDF, PDF oluştururken görüntüleri ve CSS'yi nasıl işler?

IronPDF, görüntüleri ve CSS'yi yüksek sadakatle işler, bu da ortaya çıkan PDF'in, kompleks düzenler ve stiller dahil olmak üzere orijinal HTML içeriğe yakın olmasını sağlar.

IronPDF, mevcut ASP.NET MVC projelerine kolayca entegre edilebilir mi?

Evet, IronPDF mevcut ASP.NET MVC projelerine kolayca entegre edilebilir ve geliştiricilerin PDF oluşturma özelliklerini uygulamaları için kolay bir API sunar.

ASP.NET MVC uygulamalarında IronPDF kullanmanın ana kullanım durumları nelerdir?

IronPDF'nin ASP.NET MVC uygulamalarındaki ana kullanım durumları, HTML'den PDF'e dönüşümün kritik olduğu raporlar, faturalar ve diğer belgelerin oluşturulmasını içerir.

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