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

ASP.NET MVC'de PDF oluştur: iTextSharp vs. IronPDF Rehberi

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

IronPDF, Chrome işleme kullanarak tam CSS3 ve JavaScript desteği ile mükemmel HTML'den PDF'ye dönüşüm sağlar. Buna karşılık, iTextSharp, programatik PDF oluşturma sunar ancak modern HTML dönüşümünde sorun yaşar; bu da IronPDF'yi web standartlarına uygun PDF'ler gerektiren ASP.NET MVC uygulamaları için daha iyi bir seçim yapar.

ASP.NET MVC uygulamalarında raporlar, faturalar ve indirilebilir içerikler üretmek için PDF belgeleri oluşturma yaygın bir gerekliliktir. Yıllardır iTextSharp popüler bir seçim olmuştur, ancak IronPDF üstün HTML işleme yetenekleri ile modern bir alternatif sunar. Bu makale, .NET PDF oluşturma ihtiyaçlarınız için bilinçli bir karar vermenizi sağlamak amacıyla her iki yaklaşımı da inceliyor.

Her iki kütüphane de aynı temel problemi çözmekte -- bir .NET web bağlamında PDF'ler üretmek -- fakat temelde farklı yaklaşımlar benimsemektedir. iTextSharp, bir nesne modeli aracılığıyla programatik olarak PDF'ler oluşturur, IronPDF ise tam bir Chrome işleme motoru kullanarak HTML'yi PDF'ye dönüştürür. Bu mimari farkı anlamak, doğru aracı seçmenin anahtarıdır. Microsoft tarafından sunulan ASP.NET MVC çerçevesi, her iki entegrasyon modelini de destekler ve her iki kütüphane de standart controller-action boru hattına bağlanabilir.

Her Bir Kutuphane Nasıl Kurulur?

Herhangi bir kod yazmadan önce, her bir kütüphaneyi projenize almanız gerekir. NuGet, .NET için standart paket yöneticisidir ve her iki yüklemeyi de sorunsuz bir şekilde yönetir. iTextSharp için, eski paketi NuGet aracılığıyla yükleyin:

dotnet add package iTextSharp
dotnet add package iTextSharp
SHELL

IronPDF için, NuGet aracılığıyla yükleyin:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

IronPDF, paket ile birlikte Chrome işleme motorunu içerdiğinden, sunucunuzda ek bir tarayıcı yüklemesi gerekmez. Kütüphane kutudan çıktığı haliyle Windows, Linux, macOS ve konteyner ortamlarını destekler. Yükledikten sonra, uygulama başlangıcında IronPDF lisans anahtarınızı ekleyin.

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

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

Aşağıdaki kod, bir MVC kontrolöründe iTextSharp ile PDF oluşturmaya yönelik üretim-kalitesi bir uygulama göstermektedir:

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

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

PDF görüntüleyici, 'Hello World' başlıklı ve 'Bu, iTextSharp ile oluşturulmuş bir PDF belgesidir' alt başlığıyla beyaz bir arka plan üzerinde basit bir belge gösteriyor, bu da kütüphanenin programatik PDF üretimi için temel metin ve tablo biçimlendirme yeteneklerini gösteriyor

Bu kod temel yaklaşımı gösterir: bir Document örneği oluşturun, bir PdfWriter bir akışa bağlayın, içerik öğe nesneleri kullanılarak ekleyin ve dosyayı bir eylem sonucu ile geri döndürün. Uygulama, üretim sistemleri için kaynak imha modelleri gerektiren kalıpları ele alır. Daha gelişmiş senaryolar için, özel kağıt boyutları yapılandırabilir, sayfa yönlendirmesini yönetebilir veya sayfa numaraları ekleyebilirsiniz.

Programatik yaklaşım, sayfadaki her öğe üzerinde ince ayar kontrolü sağlar. Bu hassasiyet, yapısı her zaman aynı olan faturalar, sertifikalar veya formlar gibi sabit yerleşimlere sahip belgeler oluştururken yararlıdır. Ancak, içerik dinamik veya HTML şablonu tarafından yönlendirildiğinde bir yük haline gelir.

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

iTextSharp, programatik PDF oluşturma konusunda başarılı olsa da, HTML'den PDF'ye dönüştürme önemli zorluklar sunar. Eski HTMLWorker sınıfı ve yerine geçen XMLWorker sınıfı, sınırlı CSS desteğine sahiptir ve özellikle duyarlı CSS ve JavaScript ile oluşturulmuş içerik ile uğraşırken modern web içeriği ile zorlanır.

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

iTextSharp HTML'i Ne Kadar İyi İşliyor?

PDF görüntüleyicisi, HTML'den dönüştürülmüş bir test belgesini gösteriyor, metin biçimlendirme (kalın, italik, kırmızı eğik yazı) ve maddeli liste korunmuş halde, ancak içerikte bahsedilen sarı arka plan eksik, XMLWorkerHelper'ın CSS işleme sınırlamalarını gösteriyor

Bootstrap yerleşimleri, JavaScript ile oluşturulan içerik veya karmaşık CSS3 stillendirme ile çalışırken sınırlamalar belirginleşir. Yaygın sorunlar arasında eksik web yazı tipleri, bozuk duyarlı yerleşimler ve CSS medya türleri için desteğin eksikliği bulunur. Ek olarak, iTextSharp, HTML içeriği dönüştürmede uluslararası dil karakterleri ve SVG grafiklerle zorlanmaktadır.

Bu sınırlamalar sadece kozmetik değildir. Bir müşteri karşısındaki fatura veya rapor, bir arka plan rengi görünmediği veya bir ızgara çöktüğü için yanlış çıktığında, PDF amacını kaybeder. HTML şablonlarını koruyan ekipler için, aynı yerleşimi iTextSharp'ın nesne modelinde yeniden oluşturmak, her belge tasarımının iki versiyonunu sürdürmek anlamına gelir. Bu çoğaltma, maliyet ekler ve web görünümü ile PDF çıktısı arasında kaymayı tanıtır.

HTML'den Chrome Motoru Kullanarak PDF'ye Nasıl Dönüştürülür?

IronPDF, Chrome işleme motoru kullanarak PDF oluşturmayı dönüştürür, piksel mükemmeliğinde HTML'den PDF'ye dönüşümü garanti eder. Visual Studio projenizde basitleştirilmiş bir yaklaşımla başlamak için IronPDF NuGet paketini yükleyin.

using IronPdf;

// Configure IronPDF 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 IronPDF 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 IronPDF in Program.vb (top-level statements, .NET 10)
Dim builder = WebApplication.CreateBuilder(args)

builder.Services.AddSingleton(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 İşlemeden Nasıl Bir Kalite Bekleyebilirsiniz?

PDF görüntüleyici, 'Modern PDF Oluşturma' başlığı ve CSS3, Bootstrap, ve JavaScript desteği hakkında alt başlık ile mor bir degrade başlık gösterirken, IronPDF'nin gelişmiş CSS3 degrade işleme yeteneklerini gösteriyor

ChromePdfRenderer karmaşık yerleşimleri elle çözümler gerektirmeden ele alır. Google Fonts'tan web fontları, JavaScript grafiklerle CSS Grid ve Flexbox'ı destekler. Kütüphane ayrıca dinamik içerik için işleme gecikmelerini yönetir ve duyarlı sayfalar için görünüm konfigürasyonunu destekler. Tam konfigürasyon seçenekleri için işleme seçenekleri referansına bakın.

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

IronPDF, Razor Motoru görünüm işleme yetenekleri ile öne çıkıyor. Tüm Razor görünümlerini doğrudan PDF'ye dönüştürebilir, ViewBag, ViewData ve model bağlamayı tam destek ile kullanabilirsiniz. Aşağıdaki örnek, bir fatura görünümü sunucu tarafında işler ve indirilebilir bir PDF olarak geri 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şturmayla Nasıl Karşılaştırılır?

ASP.NET Core web uygulaması ana sayfasının PDF işleme görüntüsü, navigasyon menüsü, hoşgeldiniz başlığı ve Bootstrap stilini koruyan alt bilgi ile web sayfası yerleşimlerinin PDF formatına nasıl dönüştüğünü gösteriyor

iTextSharp'in yaklasimi ile karsilastirildiginda, doküman yapisinin kod icinde manuel olarak insa edilmesi gerekiyor. Her baslik, tablo hucreleri, yazı tipi secimi ve bosluk ayarlamalarinin bir C# nesnesi olarak ifade edilmesi gerekiyor. Tarayicida yinelenebilecek bir HTML sabloni yok; her değişiklik, PDF cikisina karsi bir derleme ve kontrol dongusu gerektiriyor.

IronPDF'nin Razor entegrasyonu, mevcut Razor gorunumlerini, HTML dosyalarini veya HTML stringlerini PDF oluşturmak icin yeniden kullanmaniza olanak tanir. Ayrica HTML ZIP dosyalariyla calisabilir veya varlik yukleme icin temel URL konfigürasyonlarini uygulayabilirsiniz. CSHTML'den PDF'e nasıl yapilir rehberi, bagimlilik enjeksiyonu kurulumu da dahil olmak üzere tam Razor render paterni uzerinde duruyor.

Bir PDF oluşturmak icin dosya indirmlerini ve yayinlamayi nasıl yonetirsiniz?

Her iki kutuphane de web uygulamalari icin PDF dosyalarinin çeşitli ciktisi metodlarini destekler. IronPDF, PDF sikistirma, hizli web görüntüleme icin doğrusallaştırma ve resimlere rasterleştirme gibi ek özellikler sunar. Asagidaki yayin akisi denetleyicisi, cache ve aralik istek destegi ile buyuk PDF'leri nasıl ele alacaginizi gösteriyor:

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

Gelisimis senaryolar icin IronPDF, paralel PDF oluşturma, cokkontrollü işlem ve parti işlemelerini destekler. Özel Kayıt tutma uygulayabilir, ag kimligini doğrulama işlemi yonetebilir, cookieler ile calisabilir ve belge oluşturmak icin HTTP istek basliklarini ekleyebilirsiniz.

İki kutuphane yanyana nasıl karsilastirilir?

Asagidaki tablo ASP.NET MVC projeleri icin iTextSharp ve IronPDF arasindaki temel farkliklari ozetlemektedir:

iTextSharp vs. IronPDF -- ASP.NET MVC icin Özellik Karsilastirmasi
Özellik iTextSharp IronPDF
HTML'den PDF'ye işleme Sinirli (XMLWorker, modern CSS3 yok) Tam Chrome motoru (CSS3, JS, Flexbox)
Razor / CSHTML destegi Yerel destek yok Icilenmis Razor gorunumu işleme
İş parçacığı güvenliği Manuel kilitleme gerektirir Varsıyılan olarak iplik guvenli
Asenkron API Yerel async yok Tam async destek
Linux / Docker Destekli Destekli
Lisans tipi AGPL (acik kaynak) veya ticari Ücretli, ücretsiz deneme ile
Dijital imzalar Evet Evet
PDF formlari Evet (manuel) Evet (HTML form elamanlarindan)

iTextSharp, doküman yapisi basit ve sabitse programatik PDF oluşturma icin detayli kontrol sunar, bu da onu isler hale bir seçenek yapar. IronPDF, HTML şablonlarını veya Razor gorunumlerini tam CSS3 desteği, JavaScript calistirma ve kesin render ile profesyonel PDF belgelerine dönüştürmek gerektiginde daha guclu bir secenektir.

Uretim ASP.NET uygulamalari icin IronPDF, bagimlilik enjeksiyonu ve yazilim yolu (pipeline) dahil modern .NET methodlari ile daha ustun async destek ve entegrasyon sunar. Razor gorunumleri render etme kapasitesi, dijital imzalari destekleme ve karmaşık parcalar ile bas etmeyi kolaylastirir; bu da IronPDF'yi kurumsal uygulamalar icin tercih edilen bir seçenek haline getirir. Kutuphane ayrica Blazor Sunucu uygulamalari ve arşiv belgeleri icin PDF/A uyumunu da destekler.

Lisanslama ve Proje Düşüncüsü Neler?

iTextSharp kutuphanesi, acik kaynak versiyonu icin uygulamanizin kodunun da acik kaynak olmasini gerektiren bir AGPL lisansi kullanir. Ticari lisanslar, ozel projeler icin iText Grubu tarafından sunulmaktadır. Bu lisans düşüncesi, SaaS ürünleri veya kaynak kodunu yayınlayamayacağınız dahili kurumsal araçlar icin özellikle onemlidir.

IronPDF, geliştirma ve test icin bir ücretsiz deneme ile ticari bir lisanslama modeli kullanir. Lisanslar, geliştirici, tek sunucu veya sınırsız yayılım seçenekleri ile yayilim ortamina gore ölçeklenir. Her iki cozumu de uygularken, Docker, Azure ve Linux ortamları dahil yayılım senoryolarini dikkate alin.

Yüksek trafik senoryalari icin performans degerlendirmeleri, async işlemlerin uygulanması, uygun bellek yonetimi ve ön bellekleme stratejileri icerir. IronPDF'nin Chrome motoru, karmaşık HTML renderleme icin ustun performans sunarken, iTextSharp, HTML icermeyen basit programatik PDF oluşturma icin daha verimli olabilir. Dakikada yuzlerce PDF oluşturan uygulamalar icin, gercekci yuk altinda benchmarking hangi kutuphanenin altyapiniza uygun oldugunu belirlemenin en guvenilir yoludur.

Çoğu MVC projesi icin iTextSharp'tan IronPDF'e geçiş doğru hatti cekmetir. Ana değişiklik, belgelerin manuel olarak oluşturulmasını Chrome motoru ile işlenen bir HTML şablonuna dönüştürmektir. IronPDF, geniş belge, kod örnekleri ve mühendislik desteği sağlamaktadır, böylece gecisler sorunsuz olur.

Sıradaki Adımlarınız Neler?

Modern web standartları desteğiyle HTML'den PDF'ye dönüşüm gereken yeni projeler icin, IronPDF Chrome tabanli renderi ile belirgin bir avantaj sunar. Temel PDF oluşturmak icin halihazirda iTextSharp kullanilan eski projeler, HTML renderleme doğruluğu bir gereklilik haline gelmediği sürece mevcut uygulamalari ile devam edebilir.

IronPDF'nin ücretsiz denemesini kullanarak başlayın ve mevcut Razor gorunumlerinizi veya HTML şablonlarınızı doğrudan test edin. Tam dokümantasyonu ve API referansini keşfederek entegrasyonun ne kadar hızla bir araya geldigini görün. Mevcut iTextSharp tabanlı bir projeyi geçiş yapma veya PDF bellek akışı işleme ile PDF/A uyumluluğu konusunda yardim ihtiyaç duyuyorsanız, destek ekibi yardim etmeye hazır.

IronPDF'nin iText ürün ailesi ile nasıl kıyaslandığına daha geniş bir göz atmak icin, belirli iText vs. IronPDF karşılaştırma sayfasına bakın.

Lütfen dikkate aliniTextSharp, ilgili sahibine ait tescilli bir marka. Bu site, iTextSharp ile ilişkili, onaylanmış veya desteklenmiş değildir. Tüm ürün adları, logolar ve markalar ilgili sahiplerine aittir. Karşılaştırmalar yalnızca bilgilendirme amaçlıdır ve yazım sırasında kamuya açık bilgileri yansıtır.

Sıkça Sorulan Sorular

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

IronPDF, web içeriğinden yüksek kaliteli PDF'ler oluşturmayı daha kolay hale getiren, iTextSharp'a göre üstün HTML işleme yetenekleri sunar.

ASP.NET MVC uygulamasında IronPDF kullanarak fatura oluşturabilir miyim?

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

Kullanım kolaylığı açısından IronPDF'nin iTextSharp'a uygulaması nasıl karşılaştırılır?

IronPDF, PDF oluşturma özelliklerini hızlı bir şekilde entegre etmek isteyen geliştiriciler için, özellikle de kapsamlı bir kurulum gerektirmeden, iTextSharp'a göre genellikle daha kolay uygulanabilir olarak kabul edilir.

IronPDF, ASP.NET MVC'de karmaşık web sayfalarını PDF'ye dönüştürmeyi destekliyor mu?

Evet, IronPDF, web içeriğini doğru bir şekilde çoğaltan gelişmiş HTML işleme motoru sayesinde karmaşık web sayfalarını PDF'ye dönüştürmede mükemmeldir.

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

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

PDF oluşturma işlemlerinde IronPDF kullanımı için ideal senaryolar nelerdir?

IronPDF, HTML'den PDF'ye yüksek kaliteli dönüşüm gerektiren raporlar, faturalar veya indirilebilir belgeler oluşturma gibi senaryolar için idealdir.

IronPDF, iTextSharp'a göre modern web teknolojileri için daha iyi destek sunuyor mu?

Evet, IronPDF, modern web teknolojileri ile çalışmak üzere tasarlanmıştır ve iTextSharp'a göre daha iyi uyumluluk ve işleme doğruluğu sağlar.

IronPDF, PDF oluştururken resimleri ve CSS'yi nasıl ele alır?

IronPDF, görüntüleri ve CSS'yi yüksek sadakatle ele alır, böylece sonuçta elde edilen PDF orijinal HTML içeriğine, karmaşık düzenler ve stiller dahil olmak üzere, yakından uyar.

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

Evet, IronPDF mevcut ASP.NET MVC projelerine kolayca entegre edilebilir ve geliştiricilere PDF oluşturma işlevlerini uygulamak için basit bir API sunar.

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

ASP.NET MVC uygulamalarında IronPDF'nin ana kullanım durumları, raporlar, faturalar ve HTML'den PDF'ye doğru dönüşümün kritik olduğu diğer tüm belgeleri üretmektir.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

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