Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

Rotativa'dan IronPDF'e C# ile Nasıl Geçilir

Rotativa'dan IronPDF'e geçiş, işlev akışınızı modernize ederek kritik güvenlik açıklarını giderir. Bu rehber, kullanım dışı kalan wkhtmltopdf bağımlılığını ortadan kaldıran, modern CSS ve JavaScript desteğini etkinleştiren ve ASP.NET MVC'nin ötesinde çapraz platform uyumluluğu sağlayan eksiksiz, adım adım bir geçiş yolu sunar.

Neden Rotativa'dan IronPDF'e Geçin

Rotativa'yı Anlamak

Rotativa, C# dilinde PDF oluşturmak için geliştiriciler arasında uzun zamandır popüler bir seçim olmuştur. HTML içeriğini PDF formatına dönüştürmek için wkhtmltopdf aracını kullanır. Rotativa, özel olarak ASP.NET MVC uygulamaları için tasarlanmış açık kaynak kodlu bir kütüphanedir. Bununla birlikte, önemli bir kitle çekmiş olmasına rağmen, Rotativa'nın modası geçmiş bir teknoloji yığınına bağımlılığı, her geliştirici için hemen belirgin olmayabilecek zorluklar ortaya çıkarır.

Rotativa'nın temelinde, PDF oluşturmayı ASP.NET MVC projelerine entegre etmenin basit bir yolunu sağlar ve backend işlevsellikleri için wkhtmltopdf avantajından yararlanır.

Kritik Güvenlik Bildirimi

Rotativa, CRİTİK DÜZELTİLMEMİŞ GÜVENLİK AÇIKLARINA sahip olan wkhtmltopdf'i sarar.

Özellik Değer
CVE ID CVE-2022-35583
Şiddet KRİTİK (9.8/10)
Saldırı Vektörü
Durum ASLA DÜZELTİLMEYECEK
Etkilenen TÜMRotativasürümleri

wkhtmltopdf Aralık 2022'de resmi olarak bırakıldı. Bakımcılar, güvenlik açıklarını onarmayacaklarını açıkça belirtti.Rotativakullanan her uygulama kalıcı olarak maruz kalır.

Saldırı Nasıl Çalışır?


<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin" />

<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin" />
HTML

Etkileri:

  • AWS/Azure/GCP bulut meta veri uç noktalarına erişim
  • Dahili API verilerini ve kimlik bilgilerini çalmak
  • Dahili ağlarda port taraması yapmak
  • Hassas konfigürasyonu dışarıya aktarma

Teknoloji Krizi

Rotativa, wkhtmltopdf'i bir arayüze sarar, bu da şu teknolojileri kullanır:

  • Qt WebKit 4.8 (2012'den)
  • Flexbox desteği yok
  • CSS Grid desteği yok
  • Kırık JavaScript yürütümü
  • ES6+ desteği yok

Rotativa veIronPDFKarşılaştırması

Özellik Rotativa IronPDF
Proje Uyumluluğu Sadece ASP.NET MVC Herhangi bir .NET Proje Türü (MVC, Razor Pages, Blazor, vb.)
Bakım Terk edilmiş Aktif olarak destekleniyor
Güvenlik wkhtmltopdf bağımlılıkları nedeniyle risk altında (CVE-2022-35583) Düzenli güncellemeler ve güvenlik yamaları
HTML İşleme Eski WebKit Modern Chromium
CSS3 Kısmen Desteklenir
Flexbox/Grid Desteklenmiyor Desteklenir
JavaScript Güvenilmez Tam ES6+
Razor Sayfaları Desteklenmiyor Desteklenir
Blazor Desteklenmiyor Desteklenir
PDF Manipulasyonu Mevcut değil Tam
Dijital İmzalar Mevcut değil Tam
PDF/A Uyumluluğu Mevcut değil Tam
Async/Await Yalnızca eşzamanlı Tam asenkron
Açık Kaynak Evet, MIT Lisansı Hayır, Ticari Lisans

.NET 10 ve C# 14'ü 2025 ve 2026 boyunca benimsemeyi planlayan ekipler için IronPDF, Rotativa'nın sunamayacağı modern Chromium işleme ve çapraz platform desteği sağlar.


Başlamadan Önce

Önkoşullar

  1. .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Erişimi: NuGet paketlerini yükleme yeteneği
  3. IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin

NuGet Paket Değişiklikleri

# Remove Rotativa
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore

# Install IronPDF
dotnet add package IronPdf
# Remove Rotativa
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore

# Install IronPDF
dotnet add package IronPdf
SHELL

wkhtmltopdf İkili Dosyalarını Kaldır

Projeden bu dosyaları silin:

  • wkhtmltopdf.exe
  • wkhtmltox.dll
  • Herhangi bir Rotativa/ klasörleri

Bunlar, CVE-2022-35583'ün kaynağıdır.IronPDFyerel ikili dosyalara ihtiyaç duymaz.

Lisans Yapılandırması

// Add in Program.cs or Startup.cs
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add in Program.cs or Startup.cs
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add in Program.vb or Startup.vb
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

API Referansının Tamamı

Namespace Değişiklikleri

// Before: Rotativa
using Rotativa;
using Rotativa.Options;
using Rotativa.AspNetCore;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Rotativa
using Rotativa;
using Rotativa.Options;
using Rotativa.AspNetCore;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: Rotativa
Imports Rotativa
Imports Rotativa.Options
Imports Rotativa.AspNetCore

' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Temel Sınıf Eşlemeleri

RotativaSınıfı IronPDF Eşdeğeri
ViewAsPdf ChromePdfRenderer
ActionAsPdf ChromePdfRenderer.RenderUrlAsPdf()
UrlAsPdf ChromePdfRenderer.RenderUrlAsPdf()
Orientation enum PdfPaperOrientation enum
Size enum PdfPaperSize enum

Sayfa Yer Tutucu Dönüşümü

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

Kod Geçiş Örnekleri

Örnek 1: HTML'den PDF'e Dönüştürme

Önce (Rotativa):

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

Sonra (IronPDF):

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

Bu örnek temel mimari farkı göstermektedir. Rotativa, ASP.NET MVC frameworküne bağlı kalarak bir MVC denetleyici eyleminden ViewAsPdf sonucu döndürmeyi gerektirir. Kalıp yalnızca MVC istek hattı içinde çalışır ve görünümü render etmek için bir Razor görünümü gerektirir.

IronPDF her yerde çalışır: konsol uygulamaları, web API'leri, Blazor, Razor Pages veya herhangi bir .NET proje türü. RenderHtmlAsPdf(), bir HTML dizesi ile çağrılır ve sonuç kaydedilir. MVC controller gerekmez, görünüm bağımlılığı yoktur. Kapsamlı örnekler için HTML'den PDF'e döndürme belgesine bakın.

Örnek 2: URL'den PDF'e Dönüştürme

Önce (Rotativa):

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

Sonra (IronPDF):

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

Rotativa'nın UrlAsPdf sınıfı, bir MVC denetleyicisinden ActionResult dönüşünü gerektirir. IronPDF'nin RenderUrlAsPdf() yöntemi herhangi bir bağlamdan çağrılabilir ve doğrudan bir PdfDocument nesnesi döndürür. URL render etmeye modern Chromium kullaniyor, wkhtmltopdf'in guvenligi zayif ve eski WebKit motoru yerine. Daha fazlasi icin eğitimlerimize bakin.

Örnek 3: Sayfa Numaralı Başlıklar ve Altbilgiler

Önce (Rotativa):

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

Sonra (IronPDF):

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

Rotativa, wkhtmltopdf'e komut satırı argümanları geçirmek için CustomSwitches kullanır ve yer tutucularla başlık ve altbilgi yapılandırmasını içerebilir [page] ve [toPage]. Bu dize temelli yaklasim hata yapmaya acik ve derleme zamaninda doğrulamak zordur.

IronPDF, TextHeaderFooter gibi özelliklere sahip güçlü türde CenterText ve DrawDividerLine olan nesneler kullanır. Yer tutucu sözdizimi [page]'den {page}'ye ve [toPage]'ten {total-pages}'ye değişir. Typed property'ler IntelliSense, derleme zamani kontrolu ve yazim hatasi riski olmadan gelir.


Sadece MVC Mimari Sorunu

Rotativa ASP.NET MVC 5 ve daha onceki versiyonlar icin tasarlandi:

// ❌Rotativa- Only works with classic MVC pattern
public class InvoiceController : Controller
{
    public ActionResult InvoicePdf(int id)
    {
        var model = GetInvoice(id);
        return new ViewAsPdf("Invoice", model);  // Tied to MVC Views
    }
}

// Problems:
// - No Razor Pages support
// - No Blazor support
// - No minimal APIs support
// - No ASP.NET Core native integration
// ❌Rotativa- Only works with classic MVC pattern
public class InvoiceController : Controller
{
    public ActionResult InvoicePdf(int id)
    {
        var model = GetInvoice(id);
        return new ViewAsPdf("Invoice", model);  // Tied to MVC Views
    }
}

// Problems:
// - No Razor Pages support
// - No Blazor support
// - No minimal APIs support
// - No ASP.NET Core native integration
Imports System.Web.Mvc

Public Class InvoiceController
    Inherits Controller

    Public Function InvoicePdf(id As Integer) As ActionResult
        Dim model = GetInvoice(id)
        Return New ViewAsPdf("Invoice", model) ' Tied to MVC Views
    End Function
End Class

' Problems:
' - No Razor Pages support
' - No Blazor support
' - No minimal APIs support
' - No ASP.NET Core native integration
$vbLabelText   $csharpLabel

IronPDF, gorunum render etmeyi PDF oluşturmadan ayirir, bu aslinda daha esnektir—sadece MVC gorunumleri değil, her turlu HTML'yi render edebilirsiniz.


Asenkron Desen Gocerimi

Rotativa thread'i bloklar; IronPDF, tam asenkron/await destegi saglar:

// ❌Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}

// ✅IronPDF-Tam asenkronsupport
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
}
// ❌Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}

// ✅IronPDF-Tam asenkronsupport
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
}
' ❌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

' ✅IronPDF-Tam asenkronsupport
Public Async Function GeneratePdfAsync() 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

Geçiş Sonrası Yeni Özellikler

IronPDF'ye gecerken, Rotativa'nin saglayamayacagi yetenekler kazanirsiniz:

PDF Birleştirme

var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete.pdf");
Dim merged = PdfDocument.Merge(pdf1, pdf2, pdf3)
merged.SaveAs("complete.pdf")
$vbLabelText   $csharpLabel

Dijital İmzalar

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim signature = New PdfSignature("certificate.pfx", "password")
pdf.Sign(signature)
$vbLabelText   $csharpLabel

Şifre Koruması

pdf.SecuritySettings.UserPassword = "secret";
pdf.SecuritySettings.UserPassword = "secret";
pdf.SecuritySettings.UserPassword = "secret"
$vbLabelText   $csharpLabel

Filigranlar

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF/A Arsivleme Uyumlulugu

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

Modern CSS Destegi

// This now works (broke in Rotativa)
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>
    <div style='display: grid; grid-template-columns: 1fr 1fr 1fr;'>
        <div>Col 1</div><div>Col 2</div><div>Col 3</div>
    </div>";
var pdf = renderer.RenderHtmlAsPdf(html);  // Works!
// This now works (broke in Rotativa)
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>
    <div style='display: grid; grid-template-columns: 1fr 1fr 1fr;'>
        <div>Col 1</div><div>Col 2</div><div>Col 3</div>
    </div>";
var pdf = renderer.RenderHtmlAsPdf(html);  // Works!
' This now works (broke in Rotativa)
Dim html As String = "
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>
    <div style='display: grid; grid-template-columns: 1fr 1fr 1fr;'>
        <div>Col 1</div><div>Col 2</div><div>Col 3</div>
    </div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)  ' Works!
$vbLabelText   $csharpLabel

Goc Kontrol Listesi

Geçiş Öncesi

  • Kod tabanindaki tumRotativakullanimlarini tespit edin
  • RenderingOptions'a dönüştürme icin kullanilan CustomSwitches'i dokümante edin
  • Dönüşüm için başlık/altbilgi yer tutucu sözdizimini not edin ([page]{page})
  • ironpdf.com adresindenIronPDFlisans anahtarını alın

Paket Değişiklikleri

  • Rotativa ve Rotativa.AspNetCore NuGet paketlerini kaldırın
  • wkhtmltopdf ikili dosyalarını silin (wkhtmltopdf.exe, wkhtmltox.dll)
  • IronPdf NuGet paketini yükleyin

Kod Değişiklikleri

  • Namespace ithalatlarını güncelleyin (using Rotativa;using IronPdf;)
  • ViewAsPdf'i ChromePdfRenderer + RenderHtmlAsPdf() ile değiştirin
  • UrlAsPdf'i RenderUrlAsPdf() ile değiştirin
  • CustomSwitches'yi RenderingOptions özelliklerine dönüştürün
  • Yer tutucu sözdizimini güncelleyin ([page]{page}, [topage]{total-pages})
  • PageMargins'i bireysel MarginRight ile değiştirin
  • Dogru oldugu yerde asenkron desene gecin
  • Uygulama başlatıldığında lisans başlatma ekleyin

Geçişten Sonra

  • Tüm PDF oluşturmalarinin dogru calistigini dogrulayin
  • PDF cikis kalitesini karsilastirin (Chromium daha dogru render eder)
  • CSS render iyilestirmelerini dogrulayin (Flexbox/Grid simdi calisiyor)
  • JavaScript calistirimini test edin (Chromium ile artik guvenilir)
  • Güvenlik taramasının geçtiğini doğrulayın (CVE-2022-35583 bayrakları artık yok)
  • Docker konfigurasiyonlarini wkhtmltopdf kurulumunu kaldirmak icin güncelleyin

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