KARşıLAşTıRMA

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

.NET geliştiricileri PDF üretim çözümlerini değerlendirirken,Rotativave IronPDF, temelde farklı yaklaşımlar sundukları için belirgin mimari temellere ve bakım eğilimlerine sahiptirler. Rotativa, ASP.NET MVC uygulamaları içinde HTML içeriğini PDF formatına dönüştürmek için wkhtmltopdf aracından faydalanırken, IronPDF, tüm .NET proje tipleriyle uyumlu modern bir Chromium tabanlı render motoru sağlar. Bu teknik karşılaştırma, profesyonel geliştiriciler ve mimarlar için 2025 ve ötesinde .NET uygulamaları için PDF üretim kararları alırken önem taşıyan boyutlarda her iki kütüphaneyi incelemektedir.

Rotativa'yı Anlamak

Rotativa, özellikle ASP.NET MVC uygulamaları için tasarlanmış açık kaynaklı bir kütüphanedir. HTML içeriğini PDF formatına dönüştürmek için wkhtmltopdf komut satırı aracını sarmalar. Kütüphane, MVC denetleyici deseniyle doğrudan entegre olan ViewAsPdf ve UrlAsPdf gibi MVC'ye özgü işlem sonucu türleri sağlar.

Rotativa, temelinde, 2012'den kalma wkhtmltopdf'nin Qt WebKit 4.8 render motorunu kullanır. Bu, kütüphanenin Flexbox veya CSS Grid gibi modern CSS özelliklerini render edemeyeceği ve JavaScript çalışmasının ES6+ desteği olmaksızın güvenilmez olduğu anlamına gelir.

Kritik Dikkat:Rotativayıllardır güncelleme veya bakım almamıştır. Altyapı wkhtmltopdf Aralık 2022'de resmi olarak terk edildi ve bakıcılar güvenlik açıklarını düzeltmeyeceklerini açıkça belirttiler. Bu durum, ciddiyeti 9,8/10 olan kritik bir Sunucu Tarafı İstek Sahteciliği (SSRF) güvenlik açığı olan CVE-2022-35583'ü içerir.

IronPDF'yi Anlamak

IronPDF, .NET uygulamaları için modern, Chromium tabanlı bir PDF oluşturma çözümü sunar. Kütüphane; ASP.NET MVC, Razor Pages, Blazor, minimal API'ler, konsol uygulamaları ve masaüstü projeleri dâhil her tür .NET projesiyle çalışır.

IronPDF'nin mimarisi, HTML render'ını PDF oluşturmasından ayırır, böylece geliştiricilerin uygulamalarını yapılandırma biçimi konusunda daha fazla esneklik sunar. ChromePdfRenderer sınıfı, modern CSS3, JavaScript ES6+ ve async/await desenleri için tam destek sağlayarak tüm dönüştürme işlemlerini yönetir.

Güvenlik Karşılaştırması

Bu kütüphanelerin güvenlik duruşu dramatik bir şekilde farklılık gösterir:

RiskRotativaIronPDF
CVE-2022-35583 (SSRF)SavunmasızKorumalı
Yerel Dosya ErişimiSavunmasızKumlanmış
Dahili Ağ ErişimiSavunmasızSınırlı
Güvenlik YamalarıAsla (terk edilmiş)Düzenli güncellemeler
Aktif GeliştirmeTerkedilmişAylık sürümler

CVE-2022-35583 güvenlik açığı, saldırganların hazırlanmış HTML içeriği aracılığıyla dahili ağ kaynaklarına, bulut meta veri uç noktalarına ve hassas yapılandırmaya erişim sağlamasına izin verir. wkhtmltopdf asla yamalanmayacağı için,Rotativakullanan her uygulama bu kritik güvenlik açığına karşı kalıcı olarak savunmasız durumda kalır.

Proje Uyumluluğu

Rotativa'nın en önemli sınırlaması, yalnızca ASP.NET MVC'ye odaklanmasıdır:

ÖzellikRotativaIronPDF
ASP.NET MVCEvetEvet
Razor PagesDesteklenmiyorDesteklenen
BlazorDesteklenmiyorDesteklenen
Minimal API'lerDesteklenmiyorDesteklenen
Konsol UygulamalarıDesteklenmiyorDesteklenen
Masaüstü UygulamalarıDesteklenmiyorDesteklenen

Rotativa, ASP.NET MVC 5 ve önceki sürümleri için tasarlandı ve kontrolör aksiyon sonuç modeline dayanır. Bu mimari, Razor Pages, Blazor veya minimal API'leri kullanan modern .NET Core uygulamaları için uygun değildir.

HTML'den PDF'e Dönüşüm

HTML'den PDF'ye dönüştürme için kod kalıpları temel mimari farklılıkları ortaya koyar.

RotativaHTML Dönüşümü

Rotativa, MVC kontrolör bağlamını gerektirir ve işlem sonuç kalıplarını kullanır:

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class PdfController : Controller
    {
        public async Task<IActionResult> GeneratePdf()
        {
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            //Rotativarequires returning a ViewAsPdf result from MVC controller
            return new ViewAsPdf()
            {
                ViewName = "PdfView",
                PageSize = Rotativa.AspNetCore.Options.Size.A4
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class PdfController : Controller
    {
        public async Task<IActionResult> GeneratePdf()
        {
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            //Rotativarequires returning a ViewAsPdf result from MVC controller
            return new ViewAsPdf()
            {
                ViewName = "PdfView",
                PageSize = Rotativa.AspNetCore.Options.Size.A4
            };
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports Rotativa.AspNetCore
Imports System.Threading.Tasks

Namespace RotativaExample
    Public Class PdfController
        Inherits Controller

        Public Async Function GeneratePdf() As Task(Of IActionResult)
            Dim htmlContent As String = "<h1>Hello World</h1><p>This is a PDF document.</p>"

            ' Rotativa requires returning a ViewAsPdf result from MVC controller
            Return New ViewAsPdf() With {
                .ViewName = "PdfView",
                .PageSize = Rotativa.AspNetCore.Options.Size.A4
            }
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

Rotativa'nın yaklaşımı, PDF oluşturmayı MVC görünüm ve kontrolörlerine bağlar. ViewAsPdf işlem sonucu, bir Razor görünümünü işler ve PDF'ye dönüştürür, ancak doğrudan bir görünüm olmadan ham HTML dizgilerini kabul edemez.

IronPDFHTML Dönüştürme

IronPDF, MVC bağlamı gerektirmeden doğrudan HTML dizgi dönüşümü sağlar:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("output.pdf");

            Console.WriteLine("PDF generated successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("output.pdf");

            Console.WriteLine("PDF generated successfully!");
        }
    }
}
Imports IronPdf
Imports System

Namespace IronPdfExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Dim renderer = New ChromePdfRenderer()
            Dim htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>"

            Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
            pdf.SaveAs("output.pdf")

            Console.WriteLine("PDF generated successfully!")
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

RenderHtmlAsPdf metodu HTML içeriğini doğrudan kabul eder, herhangi bir uygulama bağlamından—konsol uygulamaları, arka plan hizmetleri veya herhangi bir türden web uygulamaları—PDF oluşturmayı sağlar.

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

Canlı web sayfalarını PDF'ye dönüştürme, her kütüphanenin navigasyon ve render işlemini nasıl ele aldığını gösterir.

RotativaURL Dönüşümü

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class UrlPdfController : Controller
    {
        public async Task<IActionResult> ConvertUrlToPdf()
        {
            //Rotativaworks within MVC framework and returns ActionResult
            return new UrlAsPdf("https://www.example.com")
            {
                FileName = "webpage.pdf",
                PageSize = Rotativa.AspNetCore.Options.Size.A4,
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class UrlPdfController : Controller
    {
        public async Task<IActionResult> ConvertUrlToPdf()
        {
            //Rotativaworks within MVC framework and returns ActionResult
            return new UrlAsPdf("https://www.example.com")
            {
                FileName = "webpage.pdf",
                PageSize = Rotativa.AspNetCore.Options.Size.A4,
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait
            };
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports Rotativa.AspNetCore
Imports System.Threading.Tasks

Namespace RotativaExample
    Public Class UrlPdfController
        Inherits Controller

        Public Async Function ConvertUrlToPdf() As Task(Of IActionResult)
            ' Rotativa works within MVC framework and returns ActionResult
            Return New UrlAsPdf("https://www.example.com") With {
                .FileName = "webpage.pdf",
                .PageSize = Rotativa.AspNetCore.Options.Size.A4,
                .PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait
            }
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

Rotativa'nın UrlAsPdf sonuç türü, MVC denetleyici bağlamını gerektirir ve bir işlem sonucu döndürür. URL render'lama wkhtmltopdf üzerinden gerçekleştirildiğinde, saldırganların dahili ağ kaynaklarına potansiyel erişim sağlamalarına izin veren SSRF güvenlik açığı ortaya çıkar.

IronPDFURL Dönüşümü

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
            pdf.SaveAs("webpage.pdf");

            Console.WriteLine("URL converted to PDF successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
            pdf.SaveAs("webpage.pdf");

            Console.WriteLine("URL converted to PDF successfully!");
        }
    }
}
Imports IronPdf
Imports System

Namespace IronPdfExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Dim renderer = New ChromePdfRenderer()

            Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
            pdf.SaveAs("webpage.pdf")

            Console.WriteLine("URL converted to PDF successfully!")
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

IronPDF'nin RenderUrlAsPdf metodu, herhangi bir web çerçevesinden bağımsız olarak çalışır ve SSRF saldırılarını önleyen yerleşik güvenlik sınırlamaları içerir.

Başlıklar ve Altbilgiler Uygulaması

Belge başlıkları ve alt başlıkları, önemli API tasarım farklılıklarını gösterir.

RotativaBaşlıklar ve Alt Başlıklar

Rotativa, dize olarak geçirilen komut satırı anahtarlarını kullanır:

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using Rotativa.AspNetCore.Options;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class HeaderFooterController : Controller
    {
        public async Task<IActionResult> GeneratePdfWithHeaderFooter()
        {
            return new ViewAsPdf("Report")
            {
                PageSize = Size.A4,
                PageMargins = new Margins(20, 10, 20, 10),
                CustomSwitches = "--header-center \"Page Header\" --footer-center \"Page [page] of [toPage]\""
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using Rotativa.AspNetCore.Options;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class HeaderFooterController : Controller
    {
        public async Task<IActionResult> GeneratePdfWithHeaderFooter()
        {
            return new ViewAsPdf("Report")
            {
                PageSize = Size.A4,
                PageMargins = new Margins(20, 10, 20, 10),
                CustomSwitches = "--header-center \"Page Header\" --footer-center \"Page [page] of [toPage]\""
            };
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports Rotativa.AspNetCore
Imports Rotativa.AspNetCore.Options
Imports System.Threading.Tasks

Namespace RotativaExample
    Public Class HeaderFooterController
        Inherits Controller

        Public Async Function GeneratePdfWithHeaderFooter() As Task(Of IActionResult)
            Return New ViewAsPdf("Report") With {
                .PageSize = Size.A4,
                .PageMargins = New Margins(20, 10, 20, 10),
                .CustomSwitches = "--header-center ""Page Header"" --footer-center ""Page [page] of [toPage]"""
            }
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

CustomSwitches özelliği, wkhtmltopdf'ye ham komut satırı argümanları geçirir. Bu yaklaşım tür güvenliğinden, IntelliSense desteğinden ve derleme zamanı kontrolünden yoksundur. Anahtar sözcük sözdizimindeki hatalar yalnızca çalışma zamanında ortaya çıkar.

IronPDFBaşlıklar ve Altbilgiler

IronPDF, başlık ve alt başlık yapılandırması için türlendirilmiş özellikler sağlar:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
            {
                CenterText = "Page Header",
                DrawDividerLine = true
            };

            renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
            {
                CenterText = "Page {page} of {total-pages}",
                DrawDividerLine = true
            };

            var htmlContent = "<h1>Report Title</h1><p>Report content goes here.</p>";
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("report.pdf");

            Console.WriteLine("PDF with headers and footers created successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
            {
                CenterText = "Page Header",
                DrawDividerLine = true
            };

            renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
            {
                CenterText = "Page {page} of {total-pages}",
                DrawDividerLine = true
            };

            var htmlContent = "<h1>Report Title</h1><p>Report content goes here.</p>";
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("report.pdf");

            Console.WriteLine("PDF with headers and footers created successfully!");
        }
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Namespace IronPdfExample
    Class Program
        Shared Sub Main(ByVal args As String())
            Dim renderer = New ChromePdfRenderer()

            renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
                .CenterText = "Page Header",
                .DrawDividerLine = True
            }

            renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
                .CenterText = "Page {page} of {total-pages}",
                .DrawDividerLine = True
            }

            Dim htmlContent = "<h1>Report Title</h1><p>Report content goes here.</p>"
            Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
            pdf.SaveAs("report.pdf")

            Console.WriteLine("PDF with headers and footers created successfully!")
        End Sub
    End Class
End Namespace
$vbLabelText   $csharpLabel

IronPDF'nin TextHeaderFooter sınıfı, IntelliSense desteği, derleme zamanı tür denetimi ve net özellik isimleri sağlar. Yer tutucu söz dizimi farklıdır: Rotativa, [page] ve [toPage] kullanırken,IronPDF{page} ve {total-pages} kullanır.

Yer Tutucu Sözdizimi Referansı

RotativaYer TutucuIronPDF Yer Tutucu
[page]{page}
[topage]{total-pages}
[date]{date}
[time]{time}
[title]{html-title}
[sitepage]{url}

Özellik Karşılaştırma Matrisi

ÖzellikRotativaIronPDF
GüvenlikKritik CVE'ler (yaması yapılmamış)Hiçbir güvenlik açığı yok
HTML İşlemeGüncel olmayan WebKit (2012)Modern Krom
CSS3Kısmi destekDesteklenen
Flexbox/GridDesteklenmiyorDesteklenen
JavaScriptGüvensizTam ES6+
ASP.NET CoreSınırlı portlarYerel destek
Razor PagesDesteklenmiyorDesteklenen
BlazorDesteklenmiyorDesteklenen
PDF ManipülasyonuMevcut değilDesteklenen
Dijital İmzalarMevcut değilDesteklenir
PDF/A UyumluMevcut değilDesteklenen
Async/AwaitYalnızca senkronizeTam asenkron
Aktif BakımTerkedilmişHaftalık güncellemeler

API Eşleme Başvurusu

Rotativa'dan IronPDF'ye geçişi değerlendiren takımlar, eşdeğer işlemler haritasını referans alabilirler:

RotativaSınıfıIronPDF Eşdeğeri
ViewAsPdfChromePdfRenderer
ActionAsPdfChromePdfRenderer.RenderUrlAsPdf()
UrlAsPdfChromePdfRenderer.RenderUrlAsPdf()
Orientation enumPdfPaperOrientation enum
Size enumPdfPaperSize enum
MarginsRenderingOptions.Margin*
CustomSwitchesRenderingOptions.*

Threading Problemi

Rotativa, wkhtmltopdf'nin threading sınırlamalarını devralır:

//Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}
//Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}
'Rotativa- Blocks the thread
Public Function GeneratePdf() As ActionResult
    Return New ViewAsPdf("Report")
    ' This blocks the request thread until PDF is complete
    ' Poor scalability under load
End Function
$vbLabelText   $csharpLabel

IronPDF, tam asenkron destek sağlar:

//IronPDF- Tam asenkron support
public async Task<IActionResult> GeneratePdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
    // Non-blocking, better scalability
}
//IronPDF- Tam asenkron support
public async Task<IActionResult> GeneratePdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
    // Non-blocking, better scalability
}
Imports IronPdf

Public Async Function GeneratePdf() As Task(Of IActionResult)
    Dim renderer As New ChromePdfRenderer()
    Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
    Return File(pdf.BinaryData, "application/pdf")
    ' Non-blocking, better scalability
End Function
$vbLabelText   $csharpLabel

Rotativa'da sadece eşzamanlı model, istek ipliklerini engelleyerek yük altında uygulama ölçeklenebilirliğini azaltır. IronPDF'nin asenkron desteği, yüksek geçirgenlik senaryolarında daha iyi kaynak kullanımı sağlar.

Dağıtım Dikkatleri

Rotativa, wkhtmltopdf ikili dosyalarının dağıtım ortamlarında yönetilmesini gerektirir:

  • x86/x64/Linux/Mac platformları için farklı ikili dosyalar
  • Manuel PATH ortam yapılandırması
  • Tüm ikili sürümlerinde güvenlik açıkları
  • Docker görüntüleri wkhtmltopdf kurulumunu içermelidir

IronPDF, dış ikili dosya yönetimi olmaksızın NuGet paketleme aracılığıyla dağıtımı basitleştirir.

TakımlarRotativaGeçişini Düşündüğünde

Birçok faktör, geliştirme ekiplerini Rotativa'ya alternatifleri değerlendirmeye itiyor:

Güvenlik gereksinimleri, güvenlik tarayıcıları CVE-2022-35583'ü işaretlediğinde kritik hâle gelir. wkhtmltopdf asla yamalanmayacağından, güvenlik denetimlerine veya uyumluluk gereksinimlerine tabi kuruluşlar, Rotativa'dan geçiş yapmalıdır.

Modern .NET benimsenmesi, takımlar Razor Pages, Blazor veya minimal API'lere geçtiğinde uyumsuzluk yaratır. Rotativa'nın yalnızca MVC'ye yönelik mimarisi, bu modern kalıpları destekleyemez.

CSS render sınırlamaları, tasarımlar Flexbox veya CSS Grid kullanırken doküman kalitesini etkiler. Rotativa'nın 2012'den kalma WebKit motoru bu düzenleri doğru bir şekilde render edemez.

JavaScript güvenilirliği, dinamik içeriğin render edilmesini etkiler. Tarayıcılarda çalışan karmaşık JavaScript, genellikle wkhtmltopdf'nin sınırlı JavaScript desteğiyle başarısız olur veya yanlış render edilir.

Asenkron ölçeklenebilirlik, yüksek geçirgenlikli uygulamalar için önemlidir. Rotativa'nın sadece eşzamanlı modeli iplikleri engellerken,IronPDFtam asenkron/await desteği sunar, böylece daha iyi kaynak kullanımı sağlar.

Güçlü Yönler ve Uzlaşmalar

RotativaGüçlü Yönleri

  • Temel kullanım senaryoları için basit MVC entegrasyonu
  • Açık kaynak (MIT Lisansı)
  • Eski MVC uygulamaları için tanıdık kalıp
  • Ticari lisanslama maliyeti yok

RotativaSınırlamaları

  • Yalnızca ASP.NET MVC—Razor Pages, Blazor veya Minimal API'ler yok
  • Terk edilmiş—güncelleme veya bakım yok
  • Hiçbir zaman yama almayacak kritik güvenlik açıkları
  • Eski WebKit render motoru (2012)
  • Flexbox veya CSS Grid desteği yok
  • Güvenilmez JavaScript yürütümü
  • Yalnızca eşzamanlı—zayıf ölçeklenebilirlik
  • PDF manipülasyon yetenekleri yok
  • Dijital imza veya PDF/A uyumluluğu yok

IronPDFGüçlü Yönleri

  • Her türlü .NET projesiyle çalışır
  • Tam CSS3/JavaScript destekli modern Chromium render
  • Düzenli güvenlik güncellemeleriyle aktif bakım
  • Tam asenkron/await desteği
  • Kapsamlı PDF düzenleme özellikleri
  • Dijital imzalar ve güvenlik
  • PDF/A arşiv uyumluluğu
  • Profesyonel destek ve belgeleme

IronPDFDikkate Alınacaklar

  • Ticari lisanslama modeli
  • Lisans anahtarı başlatma gerektirir

Sonuç

Rotativa, aktif olarak korunurken ASP.NET MVC uygulamalarında PDF oluşturma için basit bir çözüm sağlıyordu. Ancak, kütüphanenin terk edilmesi ve wkhtmltopdf temelinde ki kritik yaması yapılmamış güvenlik açıkları, üretim uygulamaları için önemli bir risk oluşturur.

Rotativa'yı hâlâ kullanan ekipler için güvenlik açıkları, yalnızca MVC mimarisi ve eski render yeteneklerinin kombinasyonu, alternatifleri değerlendirmek için ikna edici nedenler sunar. 2026 yılında .NET 10 ve C# 14 hedefleyen yeni projeler için, Rotativa'nın mimarisi Razor Pages, Blazor veya minimal API'ler gibi modern kalıpları destekleyemez.

IronPDF, Rotativa'nın hiç sunmadığı modern bir Chromium render motoru, çapraz platform .NET uyumluluğu, aktif bakım ve kapsamlı PDF düzenleme yetenekleri ile bu sınırlamaları ele alır. Rotativa'dan IronPDF'ye geçiş yolu öncelikle MVC işlem sonuçlarını doğrudan ChromePdfRenderer çağrılarıyla değiştirmeyi ve üstbilgi ile altbilgilerdeki yer tutucu söz dizimini güncellemeyi içerir.


Uygulama rehberliği için, IronPDF ASP.NET Core öğreticisi ve modern .NET uygulamaları için PDF oluşturma kalıplarını kapsayan belgelemeyi inceleyin.

Lütfen dikkate alınRotativa ve wkhtmltopdf, ilgili sahiplerinin tescilli markalarıdır. Bu site,Rotativaveya wkhtmltopdf ile ilişkili, onaylı veya destekli 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.