ASP.NET Core MVC'de Görünümleri PDF'e Dönüştürme | IronPDF

C# ASP.NET Core MVC'de Görünümleri PDF'ye Dönüştürme

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF'nin RenderRazorViewToPdf yöntemini kullanarak ASP.NET Core MVC Görünümlerini PDF'lere dönüştürün. Bu yöntem, MVC uygulamanızda tek bir kod satırı ile .cshtml dosyalarını yüksek kaliteli PDF belgelerine dönüştürür.

Bir Görünüm, web uygulamalarında HTML işaretlemesi oluşturmak için kullanılan ASP.NET çerçevesinde bir bileşendir. Model-View-Controller (MVC) deseninin bir parçasıdır, genellikle ASP.NET MVC ve ASP.NET Core MVC uygulamalarında kullanılır. Görünümler, HTML içeriği dinamik olarak işleyerek verileri kullanıcılara sunmaktan sorumludur. Görünümler tipik olarak Razor sözdizimini kullanır, bu da sunucu tabanlı kodu web sayfalarına gömmek için bir işaretleme sözdizimidir, onları veri odaklı PDF belgeleri oluşturmak için güçlü araçlar yapar.

Hızlı Başlangıç: ASP.NET Core'da CSHTML'yi PDF'ye Dönüştür

ASP.NET Core MVC Görünümlerini IronPDF kullanarak PDF'lere dönüştürün. Tek bir kod satırı ile .cshtml dosyalarınızı PDF belgelerine dönüştürün. Bu işlevselliği MVC uygulamanıza doğrudan entegre ederek dinamik HTML görünümlerinden kesintisiz PDF oluşturun. Ortamınızı kurmak ve dönüştürmeye başlamak için bu kılavuzu izleyin.

  1. IronPDF aşağıdaki NuGet Paket Yöneticisi ile yükleyin

    PM > Install-Package IronPdf
  2. Bu kod parçacığını kopyalayın ve çalıştırın.

    // using IronPdf.Extensions.Mvc.Core
    new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml", model).SaveAs("report.pdf");
  3. Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronPDF kullanmaya başlayın

    arrow pointer

ASP.NET Core Web Uygulaması MVC (Model-View-Controller), ASP.NET Core kullanarak web uygulamaları geliştirmek için Microsoft tarafından sağlanan bir web uygulama çatısıdır.

  • Model: Verileri ve iş mantığını temsil eder, veri etkileşimlerini yönetir, veri kaynaklarıyla iletişim kurar.
  • View: Kullanıcı arayüzünü sunar, verileri görüntüler, bilgileri kullanıcılara aktarır.
  • Controller: Kullanıcı girdilerini işler, isteklere yanıt verir, Model ile iletişim kurar, Model-View etkileşimlerini koordine eder.

IronPDF, ASP.NET Core MVC projeleri içindeki Görünümlerden doğrudan PDF dosyası oluşturmayı sağlar. Bu, modern özellikleri destekleyen CSS stillendirme, JavaScript çalıştırma ve özel yazı tipleri dahil olmak üzere PDF oluşturmayı doğrudan sağlar.

IronPDF Eklentileri İçin Hangi Paketi Kullanmalıyım?

IronPdf.Extensions.Mvc.Core paketi, ana IronPdf paketinin bir uzantısıdır. ASP.NET Core MVC'de Görünümleri PDF belgelerine dönüştürmek için hem IronPdf.Extensions.Mvc.Core hem de IronPdf paketleri gereklidir. Uzantı paketi, ASP.NET Core'un bağımlılık enjeksiyon sistemi ve Razor görünüm işleme hattı ile entegrasyon için özel işlevsellik sağlar.

Install-Package IronPdf.Extensions.Mvc.Core

Neden Hem IronPDF Hem de Eklenti Paketine İhtiyacım Var?

Ana IronPDF paketi, temel PDF görüntüleme motorunu ve temel işlevleri içerirken, Extensions.Mvc.Core paketi, ASP.NET Core MVC'nin görünüm görüntüleme sistemi ile özel entegrasyon sağlar. Bu ayrım, daha iyi modülerlik sağlar ve proje tipi için gereken özel işlevselliği dahil etmenizi garanti eder. Uzantı paketi, PDF oluşturma öncesinde Razor görünümlerini HTML'ye dönüştürmek için gereken IRazorViewRenderer arayüzünü ve uygulamasını içerir.

Hangi NuGet Paket Sürümünü Kullanmalıyım?

Uyumluluğu sağlamak için her zaman IronPdf ve IronPdf.Extensions.Mvc.Core'nin eşleşen sürümlerini kullanın. En son kararlı sürümler ve sürüm uyumluluğu bilgileri için NuGet paket dokümanlarını kontrol edin. Güncellerken, her iki paketin aynı zamanda güncellendiğinden emin olun, böylece uygun işlevsellik korunur.

Yaygın Kurulum Sorunları Nelerdir?

Sık karşılaşılan kurulum sorunları arasında çekirdek ve uzantı paketleri arasındaki sürüm uyumsuzlukları, eksik bağımlılıklar veya platforma özgü gereksinimler bulunur. Sorunlarla karşılaşırsanız, projenizin desteklenen bir .NET sürümünü hedeflediğinden emin olun ve sorun giderme adımları için kurulum genel bakışını inceleyin.

PDF için C# NuGet Kütüphanesi

NuGet ile yükleyin

Install-Package IronPdf.Extensions.Mvc.Core

Görünümleri PDF'lere Nasıl İşlerim?

Görünümleri PDF dosyalarına dönüştürmek için bir ASP.NET Core Web Uygulaması (Model-View-Controller) projesine ihtiyacınız var. Bu süreç, Razor görünümlerinizi PDF belgelerine dönüştürmek için IronPDF'nin RenderRazorViewToPdf yöntemini kullanan bir denetleyici eylemi oluşturmayı içerir. Bu yaklaşım, Razor sözdiziminin tam gücünü kullanır, dinamik içerikle karmaşık, veri odaklı PDF'ler oluşturmanıza olanak tanır.

Hangi Proje Türünü Kullanmalıyım?

IronPDF'nin görünüm işleme özellikleri ile optimum uyumluluk için ASP.NET Core Web Uygulaması (Model-View-Controller) şablonunu kullanın. Bu proje türü, Razor görünüm motoru ve uygun yönlendirme dahil olmak üzere görünüm işleme için gerekli altyapıyı sağlar. Mevcut projeler için, MVC desenini izlediklerinden ve gerekli görünüm işleme yeteneklerine sahip olduklarından emin olun.

Bunu Minimal API'lerle Kullanabilir Miyim?

Minimal API'ler yerleşik görünüm desteğine sahip olmasa da, IronPDF'nin HTML'den PDF'ye dönüştürme özelliklerini yine de kullanabilirsiniz. Görünüme dayalı PDF oluşturma için geleneksel MVC yaklaşımını kullanın veya alternatif olarak Razor Sayfalarını düşünün.

Bir Model Sınıfı Nasıl Eklerim?

  • "Modeller" klasörüne gidin.
  • "Person" adında yeni bir C# sınıf dosyası oluşturun. Bu sınıf, bireysel verileri temsil etmek için bir model olarak hizmet edecektir. Aşağıdaki kod parçasını kullanın:
:path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-mvc-core-model.cs
namespace ViewToPdfMVCCoreSample.Models
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
    }
}
Namespace ViewToPdfMVCCoreSample.Models
	Public Class Person
		Public Property Id() As Integer
		Public Property Name() As String
		Public Property Title() As String
		Public Property Description() As String
	End Class
End Namespace
$vbLabelText   $csharpLabel

Neden PDF Oluşturma için Bir Modele İhtiyacım Var?

Modeller, render için görünümlere iletilebilecek yapılandırılmış veriler sağlar. Bu işlev ayrılığı, PDF oluşturma mantığınızın temiz ve sürdürülebilir kalmasını sağlar. Model, denetleyiciniz ile görünümünüz arasında bir sözleşme görevi görür, tür güvenliğini sağlar ve Razor görünümlerinizde IntelliSense desteği sunar.

Hangi Veri Türleri Görünüm ile En İyi Çalışır?

Basit veri türleri ve koleksiyonlar PDF oluşturma için en iyi şekilde çalışır. Karmaşık iç içe geçmiş nesneler de kullanılabilir, ancak ek görünüm mantığı gerektirebilir. Optimum performans için, karmaşık veri yapıları denetleyicinizde düzleştirin ve görünümüne sunmadan önce. Alan modelleriniz çok karmaşıksa, PDF çıktısı için özel olarak tasarlanmış ViewModel'ler kullanmayı düşünün.

PDF oluşturma için uygun daha karmaşık bir model yapısının bir örneği:

public class InvoiceViewModel
{
    public string InvoiceNumber { get; set; }
    public DateTime InvoiceDate { get; set; }
    public decimal TotalAmount { get; set; }
    public List<InvoiceLineItem> LineItems { get; set; }
    public CustomerInfo Customer { get; set; }

    // Computed property for PDF display
    public string FormattedTotal => TotalAmount.ToString("C");
}

public class InvoiceLineItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal LineTotal => Quantity * UnitPrice;
}

public class CustomerInfo
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
}
public class InvoiceViewModel
{
    public string InvoiceNumber { get; set; }
    public DateTime InvoiceDate { get; set; }
    public decimal TotalAmount { get; set; }
    public List<InvoiceLineItem> LineItems { get; set; }
    public CustomerInfo Customer { get; set; }

    // Computed property for PDF display
    public string FormattedTotal => TotalAmount.ToString("C");
}

public class InvoiceLineItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal LineTotal => Quantity * UnitPrice;
}

public class CustomerInfo
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
}
Public Class InvoiceViewModel
    Public Property InvoiceNumber As String
    Public Property InvoiceDate As DateTime
    Public Property TotalAmount As Decimal
    Public Property LineItems As List(Of InvoiceLineItem)
    Public Property Customer As CustomerInfo

    ' Computed property for PDF display
    Public ReadOnly Property FormattedTotal As String
        Get
            Return TotalAmount.ToString("C")
        End Get
    End Property
End Class

Public Class InvoiceLineItem
    Public Property Description As String
    Public Property Quantity As Integer
    Public Property UnitPrice As Decimal
    Public ReadOnly Property LineTotal As Decimal
        Get
            Return Quantity * UnitPrice
        End Get
    End Property
End Class

Public Class CustomerInfo
    Public Property Name As String
    Public Property Email As String
    Public Property Address As String
End Class
$vbLabelText   $csharpLabel

Denetleyiciyi Nasıl Düzenlerim?

"Controllers" klasörüne gidin ve HomeController.cs dosyasını açın. Yalnızca HomeController üzerinde değişiklikler yapacağız ve Persons eylemini ekleyeceğiz. Kılavuz için aşağıdaki kodu gözden geçirin:

Aşağıdaki kod önce ChromePdfRenderer sınıfını örneklendirir ve IRazorViewRenderer, Views/Home/Persons.cshtml dosyasının yolunu ve gerekli verileri içeren List'yi RenderRazorViewToPdf yöntemine aktarır. Kullanıcılar, RenderingOptions komutunu kullanarak, sonuç PDF'ye HTML üstbilgileri ve altbilgileri ekleme, özel kenar boşlukları tanımlama ve sayfa numaraları uygulama gibi çeşitli özelliklere erişebilir. Daha gelişmiş işleme seçenekleri için işleme seçenekleri dökümantasyonunu inceleyin.

Lütfen dikkate alınPDF belgesi, aşağıdaki kod kullanılarak tarayıcıda görüntülenebilir: File(pdf.BinaryData, "application/pdf"). Ancak, tarayıcıda görüntüledikten sonra PDF'yi indirmek bozuk bir PDF belgesiyle sonuçlanır.

using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using ViewToPdfMVCCoreSample.Models;

namespace ViewToPdfMVCCoreSample.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly IRazorViewRenderer _viewRenderService;
        private readonly IHttpContextAccessor _httpContextAccessor;

        public HomeController(ILogger<HomeController> logger, IRazorViewRenderer viewRenderService, IHttpContextAccessor httpContextAccessor)
        {
            _logger = logger;
            _viewRenderService = viewRenderService;
            _httpContextAccessor = httpContextAccessor;
        }

        public IActionResult Index()
        {
            return View();
        }

        public async Task<IActionResult> Persons()
        {
            // Example list of persons
            var persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            // Check if the request method is POST
            if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
            {
                // Create a new PDF renderer
                ChromePdfRenderer renderer = new ChromePdfRenderer();

                // Configure rendering options for better output
                renderer.RenderingOptions.MarginTop = 40;
                renderer.RenderingOptions.MarginBottom = 40;
                renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;
                renderer.RenderingOptions.Title = "Persons Report";

                // Render View to PDF document
                PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);

                Response.Headers.Add("Content-Disposition", "inline");

                // Output PDF document
                return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
            }

            return View(persons);
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using ViewToPdfMVCCoreSample.Models;

namespace ViewToPdfMVCCoreSample.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly IRazorViewRenderer _viewRenderService;
        private readonly IHttpContextAccessor _httpContextAccessor;

        public HomeController(ILogger<HomeController> logger, IRazorViewRenderer viewRenderService, IHttpContextAccessor httpContextAccessor)
        {
            _logger = logger;
            _viewRenderService = viewRenderService;
            _httpContextAccessor = httpContextAccessor;
        }

        public IActionResult Index()
        {
            return View();
        }

        public async Task<IActionResult> Persons()
        {
            // Example list of persons
            var persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            // Check if the request method is POST
            if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
            {
                // Create a new PDF renderer
                ChromePdfRenderer renderer = new ChromePdfRenderer();

                // Configure rendering options for better output
                renderer.RenderingOptions.MarginTop = 40;
                renderer.RenderingOptions.MarginBottom = 40;
                renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;
                renderer.RenderingOptions.Title = "Persons Report";

                // Render View to PDF document
                PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);

                Response.Headers.Add("Content-Disposition", "inline");

                // Output PDF document
                return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
            }

            return View(persons);
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}
Imports IronPdf.Extensions.Mvc.Core
Imports Microsoft.AspNetCore.Mvc
Imports System.Diagnostics
Imports ViewToPdfMVCCoreSample.Models

Namespace ViewToPdfMVCCoreSample.Controllers
    Public Class HomeController
        Inherits Controller

        Private ReadOnly _logger As ILogger(Of HomeController)
        Private ReadOnly _viewRenderService As IRazorViewRenderer
        Private ReadOnly _httpContextAccessor As IHttpContextAccessor

        Public Sub New(logger As ILogger(Of HomeController), viewRenderService As IRazorViewRenderer, httpContextAccessor As IHttpContextAccessor)
            _logger = logger
            _viewRenderService = viewRenderService
            _httpContextAccessor = httpContextAccessor
        End Sub

        Public Function Index() As IActionResult
            Return View()
        End Function

        Public Async Function Persons() As Task(Of IActionResult)
            ' Example list of persons
            Dim persons = New List(Of Person) From {
                New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
                New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
                New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
            }

            ' Check if the request method is POST
            If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.Method Then
                ' Create a new PDF renderer
                Dim renderer As New ChromePdfRenderer()

                ' Configure rendering options for better output
                renderer.RenderingOptions.MarginTop = 40
                renderer.RenderingOptions.MarginBottom = 40
                renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait
                renderer.RenderingOptions.Title = "Persons Report"

                ' Render View to PDF document
                Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons)

                Response.Headers.Add("Content-Disposition", "inline")

                ' Output PDF document
                Return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf")
            End If

            Return View(persons)
        End Function

        Public Function Privacy() As IActionResult
            Return View()
        End Function

        <ResponseCache(Duration:=0, Location:=ResponseCacheLocation.None, NoStore:=True)>
        Public Function Error() As IActionResult
            Return View(New ErrorViewModel With {.RequestId = If(Activity.Current?.Id, HttpContext.TraceIdentifier)})
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

RenderRazorViewToPdf yöntemini kullandıktan sonra, daha fazla geliştirme ve değişikliğe açık bir PdfDocument nesnesi elde edersiniz. PDF'yi PDF/A veya PDF/UA formatlarına dönüştürebilir, oluşturulan PDF'ye dijital imzanızı ekleyebilir veya PDF belgelerini ihtiyaçlarınıza göre birleştirip bölebilirsiniz. Ayrıca, kütüphane sayfaları döndürmenize, açıklamalar veya yer imleri eklemenize ve PDF dosyalarınıza benzersiz filigranlar eklemenize olanak tanır.

IRazorViewRenderer Hizmeti Nedir?

IRazorViewRenderer, Razor görünümlerinin HTML'ye dönüştürülmesini sağlayan IronPdf.Extensions.Mvc.Core paketi tarafından sunulan bir hizmet arayüzüdür. ASP.NET Core'un görünüm motoruyla entegre olarak, .cshtml dosyalarını ilişkili modelleriyle birlikte işler, tüm Razor sözdizimini yürütür ve IronPDF'nin PDF'ye dönüştürdüğü nihai HTML'yi üretir.

İşlemden Önce POST Yöntemini Kontrol Etmenin Neden Önemi Var?

POST kontrolü, PDF oluşturmanın yalnızca bir form gönderimiyle açıkça talep edildiğinde gerçekleşmesini sağlar. Bu, sayfa yüklemelerinde yanlışlıkla PDF oluşturulmasını önler ve aynı eylemin hem HTML görünümüne (GET) hem de PDF indirmesine (POST) hizmet etmesine olanak sağlar. Bu desen RESTful ilkeleri takip eder ve daha iyi bir kullanıcı deneyimi sağlar.

PDF Çıkışını Nasıl Özelleştirebilirim?

IronPDF, RenderingOptions özelliği aracılığıyla kapsamlı özelleştirme seçenekleri sunar. Daha gelişmiş ayarlarla bir örnek:

// Advanced rendering configuration example
var renderer = new ChromePdfRenderer();

// Page setup
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Headers and footers with merge fields
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    Height = 25,
    HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Page {page} of {total-pages}</div>"
};

// JavaScript execution delay for dynamic content
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    RenderDelay = 500, // Wait 500ms for JS execution
    NetworkIdle = NetworkIdleTypes.NetworkIdle0 // Wait for network requests
};

// Apply watermark
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    DrawDividerLine = true,
    CenterText = "CONFIDENTIAL",
    Font = new FontTypes() { FontSize = 16 }
};
// Advanced rendering configuration example
var renderer = new ChromePdfRenderer();

// Page setup
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Headers and footers with merge fields
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    Height = 25,
    HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Page {page} of {total-pages}</div>"
};

// JavaScript execution delay for dynamic content
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    RenderDelay = 500, // Wait 500ms for JS execution
    NetworkIdle = NetworkIdleTypes.NetworkIdle0 // Wait for network requests
};

// Apply watermark
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    DrawDividerLine = true,
    CenterText = "CONFIDENTIAL",
    Font = new FontTypes() { FontSize = 16 }
};
' Advanced rendering configuration example
Dim renderer As New ChromePdfRenderer()

' Page setup
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20

' Headers and footers with merge fields
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
    .Height = 25,
    .HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Page {page} of {total-pages}</div>"
}

' JavaScript execution delay for dynamic content
renderer.RenderingOptions.WaitFor = New WaitFor() With {
    .RenderDelay = 500, ' Wait 500ms for JS execution
    .NetworkIdle = NetworkIdleTypes.NetworkIdle0 ' Wait for network requests
}

' Apply watermark
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
    .DrawDividerLine = True,
    .CenterText = "CONFIDENTIAL",
    .Font = New FontTypes() With {.FontSize = 16}
}
$vbLabelText   $csharpLabel

Yaygın Denetleyici Hataları Nelerdir?

Yaygın hatalar arasında hizmetlerin düzgünce enjekte edilmediği durumlarda oluşan null referans istisnaları, görünüm konumlarını belirtirken oluşan yol sorunları ve model bağlama problemleri vardır. Gerekli tüm hizmetlerin Program.cs içinde kayıtlı olduğundan emin olun ve görünüm konumlarını belirtirken proje kök dizininden göreli yollar kullanın. Hata ayıklama için geliştirme modunda detaylı hata mesajlarını etkinleştirin.

Bir Görünüm Nasıl Eklenir?

  • Yeni eklenen Person eylemine sağ tıklayın ve "Görünüm Ekle"yi seçin.

Persons() yöntemine sağ tıklandığında 'Add View...' seçeneğinin vurgulandığı Visual Studio bağlam menüsü

  • Yeni iskeleli öğe için "Razor Görünümü" seçeneğini seçin.

Visual Studio'da, düzen seçenekleriyle birlikte List şablonu ve Person model sınıfı seçimini gösteren Razor View iletişim kutusu

  • "List" şablonunu ve Person model sınıfını seçin.

Visual Studio'da, düzen seçenekleriyle birlikte List şablonu ve Person model sınıfı seçimini gösteren Razor View iletişim kutusu

Bu, .cshtml adlı bir Persons dosyası oluşturur.

  • "Views" klasörüne -> "Home" klasörüne -> Persons.cshtml dosyasına gidin.

IronPdf.Extensions.Mvc.Core

Persons eylemini çağıran bir düğme eklemek için aşağıdaki kodu kullanın:

@using (Html.BeginForm("Persons", "Home", FormMethod.Post))
{
    <input type="submit" value="Print Person" />
}
@using (Html.BeginForm("Persons", "Home", FormMethod.Post))
{
    <input type="submit" value="Print Person" />
}
HTML

PDF Oluşturma İçin Neden FormMethod.Post Kullanılmalı?

PDF oluşturmak için FormMethod.Post kullanımı, eylemi açık hale getirerek ve tarayıcının yenilenmesi veya yer imlerine eklenmiş URL'lerden kaynaklanan istenmeyen PDF oluşturulmasını önleyerek web en iyi uygulamalarına uygundur. POST istekleri idempotent (sunucu durumunu değiştirmeyen) olmalıdır, POST istekleri ise bir sonuç üreten eylemi belirtir – bu durumda, bir PDF belgesi oluşturmak.

PDF Yazdırma Düğmesini Nasıl Tasarlayabilirim?

Yazdırma düğmesini CSS sınıfları kullanarak stillendirin ve daha iyi bir kullanıcı deneyimi için JavaScript ile geliştirin. İşte daha geliştirilmiş bir versiyon:

@using (Html.BeginForm("Persons", "Home", FormMethod.Post, new { @class = "pdf-form" }))
{
    <button type="submit" class="btn btn-primary pdf-download-btn">
        <i class="fas fa-file-pdf"></i> Download as PDF
    </button>
}

<style>
    .pdf-download-btn {
        background-color: #dc3545;
        color: white;
        padding: 10px 20px;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        transition: background-color 0.3s ease;
    }

    .pdf-download-btn:hover {
        background-color: #c82333;
    }

    .pdf-download-btn:active {
        transform: translateY(1px);
    }
</style>

<script>
    // Optional: Show loading indicator during PDF generation
    document.querySelector('.pdf-form').addEventListener('submit', function() {
        const button = this.querySelector('button');
        button.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating PDF...';
        button.disabled = true;
    });
</script>
@using (Html.BeginForm("Persons", "Home", FormMethod.Post, new { @class = "pdf-form" }))
{
    <button type="submit" class="btn btn-primary pdf-download-btn">
        <i class="fas fa-file-pdf"></i> Download as PDF
    </button>
}

<style>
    .pdf-download-btn {
        background-color: #dc3545;
        color: white;
        padding: 10px 20px;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        transition: background-color 0.3s ease;
    }

    .pdf-download-btn:hover {
        background-color: #c82333;
    }

    .pdf-download-btn:active {
        transform: translateY(1px);
    }
</style>

<script>
    // Optional: Show loading indicator during PDF generation
    document.querySelector('.pdf-form').addEventListener('submit', function() {
        const button = this.querySelector('button');
        button.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating PDF...';
        button.disabled = true;
    });
</script>
HTML

Hangi Görüntü Şablonları PDF İçin Daha İyi Çalışır?

List ve Details şablonları, yapılandırılmış düzenler sağladıkları için özellikle PDF oluşturma işlemlerinde çok etkilidir. PDF çıkışı için özel olarak tasarlanmış özel şablonlar genellikle en iyi sonuçları verir. Ekran gösterimi yerine yazdırma düzenini optimize eden özel PDF görünümleri oluşturmayı düşünün, navigasyon unsurlarını kaldırın ve içerik sunumuna odaklanın.

Üst Navigasyon Çubuğuna Nasıl Bir Bölüm Eklerim?

  • Aynı "Views" klasöründe "Shared" klasörüne gidin -> _Layout.cshtml. Person gezinme öğesini Home öğesinin arkasına yerleştirin.

asp-action özniteliğinin değeri, dosya adımızla tam olarak eşleşmelidir; bu durumda dosya adı Persons'dir.

<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container-fluid">
            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">ViewToPdfMVCCoreSample</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>
<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container-fluid">
            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">ViewToPdfMVCCoreSample</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>
HTML

Neden asp-action Tam Eşleşmelidir?

asp-action özniteliği, yönlendirme yapılandırmanıza göre doğru URL'yi oluşturmak için ASP.NET Core'un etiket yardımcılarını kullanır. Tam bir eşleşme, bağlantının doğru denetleyici eylemine çözülmesini sağlar. Uyumsuzluklar 404 hatalarına veya beklenmeyen eylemlere yönlendirmelere neden olur. Etiket yardımcı sistemi büyük harf küçük harf duyarlıdır ve denetleyicinizdeki tam yöntem adıyla eşleşmelidir.

Gezinme Bağlantıları Eşleşmezse Ne Olur?

Gezinme bağlantıları denetleyici eylemleriyle eşleşmezse, kullanıcılar 404 hataları alır veya yanlış sayfalara yönlendirilir. Geliştirme sırasında ASP.NET Core'un geliştirici hata sayfası detaylı yönlendirme hatalarını gösterir. Üretimde kullanıcılar genel hata sayfalarını görür. Kırık kullanıcı deneyimlerini önlemek için her zaman gezinme bağlantılarının denetleyici eylem adlarıyla tam olarak eşleştiğinden emin olun.

Program.cs Dosyasını Nasıl Düzenlerim?

IHttpContextAccessor ve IRazorViewRenderer arayüzlerini bağımlılık enjeksiyonu (DI) konteynerine kaydedin. Referans için aşağıdaki koda bakın.

using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc.ViewFeatures;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();

// Register IRazorViewRenderer here
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();

// Optional: Configure IronPDF license if you have one
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc.ViewFeatures;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();

// Register IRazorViewRenderer here
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();

// Optional: Configure IronPDF license if you have one
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();
Imports IronPdf.Extensions.Mvc.Core
Imports Microsoft.AspNetCore.Mvc.ViewFeatures

Dim builder = WebApplication.CreateBuilder(args)

' Add services to the container.
builder.Services.AddControllersWithViews()

builder.Services.AddSingleton(Of IHttpContextAccessor, HttpContextAccessor)()
builder.Services.AddSingleton(Of ITempDataProvider, CookieTempDataProvider)()

' Register IRazorViewRenderer here
builder.Services.AddSingleton(Of IRazorViewRenderer, RazorViewRenderer)()

' Optional: Configure IronPDF license if you have one
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"

Dim app = builder.Build()

' Configure the HTTP request pipeline.
If Not app.Environment.IsDevelopment() Then
    app.UseExceptionHandler("/Home/Error")
    ' The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts()
End If

app.UseHttpsRedirection()
app.UseStaticFiles()

app.UseRouting()

app.UseAuthorization()

app.MapControllerRoute(
    name:="default",
    pattern:="{controller=Home}/{action=Index}/{id?}")

app.Run()
$vbLabelText   $csharpLabel

Hizmetleri Neden Singleton Olarak Kayıt Etmeli?

Singleton hizmetleri bir kez oluşturulur ve uygulamanın ömrü boyunca yeniden kullanılır, bu da onları IRazorViewRenderer gibi durum bilgisi olmayan hizmetler için verimli kılar. Bu desen, bellek yükünü azaltır ve performansı artırır çünkü görünüm işleme hizmeti taleplere özgü bir durum tutmaz. IHttpContextAccessor, farklı hizmet ömürleri boyunca erişilebilir olması için tekil olmalıdır.

ITempDataProvider Nedir?

ITempDataProvider, istekler arasında geçici veri depolamasına olanak tanır ve genellikle yönlendirmelerden sonra mesajları görüntülemek için kullanılır. PDF oluşturma bağlamında, görünümleri PDF'ye dönüştürürken görünüm durumunun düzgün şekilde korunmasını sağlar. CookieTempDataProvider, bu geçici verileri şifrelenmiş çerezlerde depolar ve durum yönetimi için güvenli bir mekanizma sağlar.

Yerine Kapsamlı Hizmetler Kullanabilir Miyim?

Bazı senaryolarda kapsamlı hizmetler kullanabilirsiniz, ancak IRazorViewRenderer, istek özel durumlarını tutmadığı için tekil olarak en iyi şekilde çalışır. Kapsamlı hizmetler kullanmak, her istek için yeni örnekler oluşturur, bu da bellek kullanımı artırır, ancak fayda sağlamaz. Ancak, görünümlerinize kapsamlı hizmetler enjekte etmeniz gerekiyorsa, çalışma zamanı hatalarından kaçınmak için uygun hizmet yaşam döngüsü yönetimini sağlayın.

Projeyi Çalıştırın

Bu, projeyi nasıl çalıştıracağınızı ve bir PDF belgesi oluşturacağınızı gösterir. Uygulamayı çalıştırdığınızda, üst gezinme menüsünü kullanarak Persons sayfasına gidin, ardından Print Person düğmesine tıklayarak PDF'yi oluşturun ve indirin.

Visual Studio showing HomeController.cs with ASP.NET Core MVC controller code and IntelliSense assistance

ASP.NET Core MVC Projesini Nereden İndirebilirim?

Bu kılavuzun tam kodunu indirin. Visual Studio'da bir ASP.NET Core Web Uygulaması (Model-View-Controller) projesi olarak açabileceğiniz bir zip dosyası olarak gelir.

ASP.NET Core MVC Örnek Projesini İndirin

Örnek Projede Neler Bulunmaktadır?

Örnek proje, görünümden-PDF'ye dönüştürmeyi gösteren IronPDF entegrasyonu ile tam yapılandırılmış bir ASP.NET Core MVC uygulaması içerir. Person modelini, PDF oluşturma mantığına sahip HomeController'yi, uygun Razor sözdizimine sahip Persons görünümünü ve Program.cs'deki tüm gerekli hizmet kayıtlarını içerir. Proje ayrıca PDF çıktısı için optimize edilmiş örnek stil ve düzen konfigürasyonlarını içerir.

Hangi Visual Studio Sürümünü Kullanmalıyım?

.NET 6+ projelerinde en iyi deneyim için Visual Studio 2022 (sürüm 17.0 veya üstü) önerilir. C# uzantıları ile Visual Studio Code da çapraz platform geliştirme için iyi çalışır. ASP.NET ve web geliştirme iş yükünün kurulu olduğundan emin olun. Proje varsayılan olarak .NET 6.0'ı hedefler ancak daha yeni sürümlere güncellenebilir.

Proje Kurulum Sorunlarını Nasıl Giderebilirim?

Yaygın kurulum sorunları arasında eksik NuGet paketleri, yanlış .NET SDK sürümleri veya yapılandırma sorunları yer alır. İlk olarak, dotnet restore komutunu kullanarak veya Visual Studio'nun Paket Yöneticisi aracılığıyla NuGet paketlerini geri yükleyin. dotnet --version kullanarak .NET Sürümü'nüzün proje gereksinimlerine uygun olduğunu doğrulayın. Lisansla ilgili sorunlar için lisans anahtarı belgelerine bakın. İşleme sorunları oluşursa, çözümler için sorun giderme kılavuzunu kontrol edin.

Başka neler yapabileceğinizi görmek için hazır mısınız? Buradaki öğretici sayfamıza göz atın: PDF'leri Dönüştürme

Sıkça Sorulan Sorular

ASP.NET Core MVC'de CSHTML görünümlerini PDF'ye dönüştürmenin en kolay yolu nedir?

En kolay yol, IronPDF'nin RenderRazorViewToPdf metodunu kullanmaktır, bu metodla .cshtml dosyalarınızı yalnızca bir satır kodla PDF belgelerine dönüştürebilirsiniz. Sadece çağırın: new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, 'Views/Home/Report.cshtml', model).SaveAs('report.pdf');

ASP.NET Core MVC'de Görünümleri PDF'ye Dönüştürmek İçin Hangi NuGet Paketlerine İhtiyacım Var?

İki pakete ihtiyacınız var: IronPdf (ana paket) ve IronPdf.Extensions.Mvc.Core (genişleme paketi). Genişleme paketi, ASP.NET Core'un bağımlılık ekleme sistemi ve Razor görünüm renderleme hattıyla entegre olmak için özel işlevsellik sağlar.

CSHTML'yi PDF'ye dönüştürürken CSS stil ve JavaScript uygulayabilir miyim?

Evet, IronPDF, CSS stil, JavaScript yürütme ve özel yazı tiplerini PDF'ye görünüm render ederken tam olarak destekler. Bu, PDF'lerinizin web görünümlerinizle aynı görünüm ve işlevselliği korumasını sağlar, duyarlı CSS ve dinamik JavaScript içeriği dahil.

ASP.NET Core MVC projemde Görünümden PDF'ye dönüştürmeyi uygulamak için ana adımlar nelerdir?

İş akışı 5 aşamadan oluşur: 1) IronPDF ve MVC Core uzantısını indirin, 2) Verileriniz için bir model sınıfı ekleyin, 3) Denetleyicinizi RenderRazorViewToPdf metodunu kullanacak şekilde düzenleyin, 4) PDF render için bir Görünüm (.cshtml dosyası) oluşturun veya değiştirin ve 5) Uygulamanızı çalıştırarak PDF'ler üretin.

PDF oluşturma ile Görünümlerden MVC deseni nasıl çalışır?

ASP.NET Core MVC'de, Model, verilerinizi ve iş mantığınızı içerir, Görünüm (.cshtml dosyanız) UI'yi sunar ve verileri görüntüler ve Denetleyici isteği işler ve IronPDF'nin RenderRazorViewToPdf metodunu kullanarak Görünümden PDF oluşturma sürecini organize eder.

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
Gözden Geçiren
Jeff Fritz
Jeffrey T. Fritz
Baş Program Yöneticisi - .NET Topluluğu Ekibi
Jeff, .NET ve Visual Studio ekipleri için bir Baş Program Yöneticisidir. .NET Conf sanal konferans serisinin baş yapımcısıdır ve haftada iki kez canlı yayınlanan 'Fritz and Friends' adlı bir akış programı sunar; burada izleyicilerle birlikte teknoloji konuşur ve kod yazar. Jeff, en büyük Microsoft geliştirici etkinlikleri için atölyeler, sunumlar ve içerik planları yazar, Microsoft Build, Microsoft Ignite, .NET Conf ve Microsoft MVP Summit gibi etkinliklerde yer alır.
Başlamaya Hazır mısınız?
Nuget İndirmeler 19,014,616 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.