ASP.NET Core MVC'de Görünümleri PDF'ye 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

ASP.NET Core MVC Görünümlerini, MVC uygulamanızda tek bir satır kodla .cshtml dosyalarını yüksek kaliteli PDF belgelerine dönüştüren IronPDF'in RenderRazorViewToPdf yöntemi kullanarak PDF'lere dönüştürün.

Bir Görünüm, web uygulamalarında HTML işaretleme oluşturmak için ASP.NET frameworkünde kullanılan bir bileşendir. ASP.NET MVC ve ASP.NET Core MVC uygulamalarında yaygın olarak kullanılan Model-View-Controller (MVC) modelinin bir parçasıdır. Görünümler, HTML içeriğini dinamik olarak render ederek, kullanıcıya veriyi sunmaktan sorumludur. Görünümler genellikle, sunucu tabanlı kodu web sayfalarına yerleştirmek için bir işaretleme sözdizimi olan Razor sözdizimini kullanır, bu da onları veri odaklı PDF belgeleri oluşturmak için güçlü araçlar haline getirir.

Başlarken: ASP.NET Core'da CSHTML'yi PDF'ye Dönüştür

IronPDF kullanarak ASP.NET Core MVC Görünümlerini PDF'ye dönüştürün. Bir satır kodla '.cshtml' dosyalarınızı PDF belgelerine render edin. Bu işlevselliği, dinamik HTML görünümlerden sorunsuz PDF oluşturma için MVC uygulamanıza doğrudan entegre edin. Çevrenizi kurmak ve dönüştürmeye başlamak için bu kılavuzu takip edin.

  1. NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronPdf yükleyin

    PM > Install-Package IronPdf
  2. Bu kod parçasını kopyalayıp ç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 etmek için dağıtın

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

    arrow pointer

ASP.NET Core Web App MVC (Model-View-Controller), ASP.NET Core kullanarak web uygulamaları oluşturmak için Microsoft tarafından sağlanan bir web uygulama çerçevesidir.

  • 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, kullanıcılara bilgi iletir.
  • Controller: Kullanıcı girdisini işler, isteklere yanıt verir, Model ile iletişim kurar, Model-Görünüm etkileşimlerini organize eder.

IronPDF, ASP.NET Core MVC projeleri icinde View'lerden dogrudan PDF dosyasi oluşturmayi saglar. Bu, modern özellikleri içeren CSS stil, JavaScript yürütme ve özel fontlar dahil ASP.NET Core MVC'de PDF oluşturmayı kolaylaştırır.

IronPDF Ekstra Özellikleri İçin Hangi Pakete İhtiyacım Var?

IronPdf.Extensions.Mvc.Core paketi, ana IronPdf paketinin bir uzantısıdır. PDF belgeleri oluşturmak için, ASP.NET Core MVC'de hem IronPdf.Extensions.Mvc.Core hem de IronPdf paketlerine ihtiyaç vardır. Uzantı paketi, ASP.NET Core'un bağımlılık enjeksiyon sistemi ve Razor görünüm oluşturma hattı ile entegrasyon için belirli işlevsellik sağlar.

Install-Package IronPdf.Extensions.Mvc.Core

IronPDF ve Ekstra Paketlere Neden İhtiyacım Var?

Ana IronPDF paketi, temel PDF işleme motoru ve temel işlevselliği içerirken, Extensions.Mvc.Core paketi ASP.NET Core MVC'nin görünüm işleme sistemiyle özel bir entegrasyon sağlar. Bu ayrım, daha iyi modülerlik sağlar ve proje türünüz için gerekli olan belirli işlevselliği dahil etmenizi garanti eder. Uzantı paketi, Razor görünümlerini PDF oluşturulmadan önce HTML'e 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 uygun sürümlerde IronPDF ve IronPdf.Extensions.Mvc.Core kullanın. En son kararlı sürümler ve sürüm uyumluluğu bilgileri için NuGet paketleri dokümantasyonunu kontrol ediniz. Güncellerken, doğru işlevselliği korumak için her iki paketin de birlikte güncellendiğinden emin olun.

Ortak Kurulum Sorunları Nelerdir?

Yaygın kurulum sorunları, çekirdek ile uzantı paketleri arasında sürüm uyumsuzlukları, eksik bağımlılıklar veya platforma özgü gereksinimleri içerir. 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ı gözden geçirin.

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 Dönüştürürüm?

Gorunumleri PDF dosyalarina dönüştürmek icin bir ASP.NET Core Web Uygulamasi (Model-View-Controller) projesine ihtiyaçiniz var. Süreç, Razor görünümlerinizi PDF belgelerine dönüştürmek için IronPDF'in RenderRazorViewToPdf yöntemini kullanan bir denetleyici eylemi oluşturmayı içerir. Bu yaklaşım, Razor sözdiziminin tam gücünden yararlanarak dinamik içerik ile 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 en iyi uyumluluk için ASP.NET Core Web Uygulaması (Model-View-Controller) şablonunu kullanın. Bu proje türü, Razor görüntüleme motoru ve uygun yönlendirme dahil olmak üzere görüntüleme işleme için gerekli altyapıyı sağlar. Mevcut projeler için, MVC desenine uyduklarından ve gerekli görünüm oluşturma yeteneklerinin kurulu olduğundan emin olun.

Bunu Minimal API'ler ile Kullanabilir miyim?

Minimal API'lerin yerleşik view desteği olmasa da, IronPDF'in HTML'yi PDF'e dönüştürme özelliklerini kullanabilirsiniz. Görünüm tabanlı PDF oluşturma için, geleneksel MVC yaklaşımını kullanın veya alternatif olarak Razor Pages'ı düşünebilirsiniz.

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

  • "Models" klasörüne gidin.
  • Yeni bir C# sınıf dosyası "Person" adını verin. Bu sınıf, bireysel verileri temsil edecek bir model olarak işlev görecektir. 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

PDF Oluşturma Icin Neden Bir Modele İhtiyaçim Var?

Modeller, görüntüleme icin gorunumlere aktarilabilecek yapılandırilmis veriler saglar. Bu sorumlulukların ayrılması, PDF oluşturma mantığınızın temiz ve sürdürülebilir kalmasını sağlar. Model, denetleyiciniz ve görünümünüz arasında bir sözleşme olarak hareket eder, tür güvenliğini sağlar ve Razor görünümlerinizde IntelliSense desteğini etkinleştirir.

Gorunumlerle Hangi Veri Tipleri En Iyi Calisir?

Basit veri türleri ve koleksiyonlar, PDF oluşturma için en iyi şekilde çalışır. Karmaşık iç içe nesneler kullanılabilir ancak ek görünüm mantığı gerektirebilir. En iyi performans icin, karmasik veri yapilarini gorunume gecirmeden once denetleyicinizde basinlastirin. Alan modelleriniz çok karmaşıksa, PDF çıktısı için özel olarak tasarlanmış ViewModel'leri kullanmayı düşünün.

İşte PDF oluşturma için uygun olan daha karmaşık bir model yapısına bir örnek:

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

Denetleyici Nasıl Düzenlenir?

"Controllers" klasörüne gidin ve "HomeController" dosyasını açın. Yalnızca HomeController değişiklik yapacağız ve Persons eylemini ekleyeceğiz. Aşağıdaki kodu referans alarak yol gösterici olarak kullanın:

Aşağıdaki kod, ilk olarak bir ChromePdfRenderer sınıfı oluşturur, bir IRazorViewRenderer, Views/Home/Persons.cshtml yolunu ve gerekli verileri içeren Listeyi RenderRazorViewToPdf metoduna gönderir. Kullanıcılar, özelleştirilmiş metin eklemek, çıkan PDF'de HTML başlıkları ve altlıkları dahil etmek, özel kenar boşlukları belirlemek ve sayfa numaraları uygulamak gibi bir dizi özelliğe erişmek için RenderingOptions kullanabilir. Daha gelişmiş işleme seçenekleri için işleme seçenekleri dokümantasyonuna bakınız.

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

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 modifikasyona açık bir PdfDocument nesnesi alırsınız. PDF'yi PDF/A veya PDF/UA formatlarına dönüştürebilir, oluşturulan PDF'ye dijital imzanızı ekleyebilir veya gerektiği gibi PDF belgelerini birleştirebilir ve bölebilirsiniz. Ayrıca, kütüphane sayfaları döndürmenize, açıklamalar veya yer imleri eklemenize ve benzersiz filigranları PDF dosyalarınıza bastırmanıza olanak tanır.

IRazorViewRenderer Servisi Nedir?

IRazorViewRenderer, Razor görünümlerini HTML'e dönüştüren IronPdf.Extensions.Mvc.Core paketi tarafından sağlanan bir hizmet arayüzüdür. ASP.NET Core'un görünüm motoruyla entegre olarak, ilişkili modelleriyle birlikte .cshtml dosyalarını işler, tüm Razor söz dizimini çalıştırır ve IronPDF'in PDF'ye dönüştürdüğü nihai HTML'yi üretir.

Neden Çizim Öncesi POST Yöntemini Kontrol Etmelisiniz?

Yalnızca bir form gönderimi aracılığıyla açıkça talep edildiğinde PDF oluşturmanın gerçekleşmesini sağlamak için POST kontrol edilir. Bu, sayfa yüklemelerinde kazara PDF oluşturulmasını engeller ve aynı işlemin hem HTML görünümüne (GET) hem de PDF indirilmeye (POST) hizmet etmesini sağlar. Bu desen RESTful ilkelerini takip eder ve daha iyi bir kullanıcı deneyimi sağlar.

PDF Çıktısını Nasıl Özelleştirebilirim?

IronPDF, RenderingOptions özelliği üzerinden geniş ölçekte özelleştirme seçenekleri sunar. İleri düzey ayarlarla ilgili 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?

Ortak hatalar arasında, servisler düzgün bir şekilde enjekte edilmediğinde oluşan null referans istisnaları, görünüm konumlarını belirtirken yol sorunları ve model bağlama problemleri yer almaktadır. Gerekli tüm hizmetlerin Program.cs içinde kayıtlı olduğundan ve görünüm konumlarını belirtirken proje kökünden göreli yollar kullandığınızdan emin olun. Hata ayiklama icin geliştirme modunda ayrintili hata mesajlarini etkinlestirin.

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

  • Yeni eklenen Person eylemine sağ tıklayın ve 'Add View' seçeneğini seçin.

Visual Studio bağlam menüsü 'Add View...' seçeneğini sağ tıklanmış Persons() metodunda vurgulanmış olarak gösteriyor

  • Yeni Sarılmış öğe için "Razor Görünümü" seçin.

Visual Studio'da List şablonunu ve Kişi model sınıfı seçimiyle düzen seçeneklerini gösteren Razor View ekle diyalogu

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

Visual Studio'da List şablonunu ve Kişi model sınıfı seçimiyle düzen seçeneklerini gösteren Razor View ekle diyalogu

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

  • "Görünümler" klasörüne gidin -> "Ana Sayfa" klasörü -> Persons.cshtml dosyası.

Persons eylemini başlatan 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ılır?

PDF oluşturma için POST kullanmak, eylemi belirgin hale getirerek ve istenmeyen PDF oluşturmayı tarayıcı yenilemelerinden veya yer imlerine alınmış URL'lerden önleyerek web en iyi uygulamalarını takip eder. GET istekleri etkisiz olmalıdır (sunucu durumunu değiştirmemeli), oysa POST istekleri bir sonuç üreten bir işlemi belirtir – bu durumda bir PDF belgesinin oluşturulması.

PDF Yazdir Butonunu Nasıl Stileyebilirim?

Print düğmesini CSS sınıflarını kullanarak stillendirin ve daha iyi bir kullanıcı deneyimi için JavaScript ile geliştirin. Iste geliştirilmis 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

PDF'ler için Hangi Görünüm Şablonları En İyi Çalışır?

List ve Details şablonları PDF oluşturma için özellikle iyi çalışır çünkü yapılandırılmış düzenler sağlarlar. Genellikle PDF çıktı için özel olarak tasarlanmış özel şablonlar en iyi sonuçları verir. PDF görünümlerini yalnızca baskı düzeni için optimize etmeyi düşünebilirsiniz. Ekran görüntüsü yerine içerik sunumuna odaklanan ve navigasyon öğelerini kaldıran özel PDF görünümleri oluşturun.

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

  • Aynı "Görünümler" klasörüne gidin, "Paylaşılan" klasörüne -> _Layout.cshtml. Person navigasyon öğesini Home sonrasına yerleştirin.

asp-action özniteliğinin değeri, dosya adımızla tam olarak eşleştiğinden emin olun, bu durumda Persons.

<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 Olarak Eşleşmelidir?

asp-action özniteliği, yönlendirme konfigurasyonunuza göre doğru URL'yi oluşturmak için ASP.NET Core'un etiket yardımcılarını kullanır. Doğru bir eşleşme, bağlantının doğru controller action'a yönlenmesini sağlar. Eşleşmelerin uyumsuzluğu, 404 hatalarına veya istenmeyen eylemlere yönlendirmeye neden olur. Etiket yardımcı sistemi büyük/küçük harfe duyarlıdır ve kontrolcünüzdeki tam yöntem adıyla eşleşmelidir.

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

Navigasyon bağlantıları kontrolör eylemleriyle eşleşmediğinde, kullanıcılar 404 hatalarıyla karşılaşır veya yanlış sayfalara yönlendirilirler. Geliştirme sırasında ASP.NET Core'un geliştirici istisna sayfası ayrıntılı yönlendirme hatalarını gösterir. Üretimde kullanıcılar genel hata sayfalarını görürler. Kırık kullanıcı deneyimlerini önlemek için navigasyon bağlantılarının kontrolör eylem adlarıyla tam olarak eşleştiğini daima doğrulayın.

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

IHttpContextAccessor ve IRazorViewRenderer arayüzünü bağımlılık enjeksiyonu (DI) konteynerine kaydedin. Referans için aşağıdaki kodu kontrol edin.

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

Hizmetler Neden Tekil Olarak Kaydedilmeli?

Singleton hizmetler bir kez oluşturulur ve uygulamanın ömrü boyunca yeniden kullanılır, bu da onları IRazorViewRenderer gibi durumsuz hizmetler için verimli kılar. Bu desen bellek yükünü azaltır ve performansı artırır çünkü görünüm oluşturma hizmeti istek özelinde durum korumaz. IHttpContextAccessor, farklı hizmet ömürleri boyunca erişilebilir olabilmesi için singleton olmalıdır.

ITempDataProvider Ne İçin Kullanılır?

ITempDataProvider, istekler arasında geçici veri depolama sağlar, genellikle yönlendirmelerden sonra mesajlar görüntülemek için kullanılır. PDF oluşturma bağlamında, görünümlerin PDF'ye dönüştürülmesi sırasında görüntü durumunun doğru bir şekilde korunmasını sağlar. CookieTempDataProvider, bu geçici verileri şifreli çerezlerde saklar, durum yönetimi için güvenli bir mekanizma sağlar.

Yerine Kapsamlı Hizmetler Kullanabilir miyim?

Bazı senaryolar için kapsamlı hizmetler kullanabilseniz de, IRazorViewRenderer, istek-spesifik durum tutmadığından bir singleton olarak en iyi şekilde çalışır. Kapsamlı hizmetler kullanmak her istek için yeni örnekler oluşturur ve herhangi bir fayda olmadan bellek kullanımını artırır. Ancak, eğer görünümünüze kapsamlı hizmetler enjekte etmeniz gerekiyorsa, çalışma süresi hatalarından kaçınmak için doğru hizmet ömrü yönetimini sağlayın.

Projeyi Çalıştır

Bu, projeyi çalıştırmanın ve bir PDF dokümanı oluşturmanın nasıl yapıldığını gösterir. Uygulamayı çalıştırdığınızda, PDF oluşturup indirmek için üst navigasyon menüsünden Persons sayfasına gidin, ardından Print Person düğmesine tıklayın.

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 ASP.NET Core Web App (Model-View-Controller) projesi olarak açabileceğiniz bir sıkıştırılmış dosya olarak gelir.

ASP.NET Core MVC Örnek Projesini İndirin

Örnek Projede Neler Var?

Örnek proje, IronPDF entegrasyonu ile tam olarak yapılandırılmış bir ASP.NET Core MVC uygulamasını ve görünümden PDF'ye dönüşüm örneğini içerir. Bu, Person modeli, PDF oluşturma mantığı ile HomeController, uygun Razor sözdizimi ile Persons görünümü ve Program.cs tüm gerekli hizmet kayıtlarını içerir. Proje ayrıca PDF çıktısı için optimize edilmiş örnek stil ve yerleşim yapılandırmalarını da içerir.

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

.NET 6+ projeleriyle en iyi deneyim için Visual Studio 2022 (sürüm 17.0 veya üzeri) önerilir. Visual Studio Code, C# eklentileri ile birlikte çapraz platform geliştirme için de iyi çalışır. ASP.NET ve web geliştirme yükünün yüklü 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 Çözebilirim?

Genel kurulum sorunları arasında eksik NuGet paketleri, yanlış .NET SDK sürümleri veya yapılandırma sorunları bulunur. İlk olarak, dotnet restore kullanarak veya Visual Studio'nun Paket Yöneticisi aracılığıyla NuGet paketlerini geri yükleyin. dotnet --version kullanarak .NET SDK sürümünüzün proje gereksinimlerini karşıladığını doğrulayın. Lisans sorunları için lisans anahtarı belgesine bakın. Önbellek sorunları meydana gelirse, sorun giderme klavuzunu kontrol edin.

Başka neler yapabileceğinizi görmek için hazır mısınız? Eğitim sayfamızı burada inceleyin: PDF'leri Dönüştürün

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 yöntem, .cshtml dosyalarınızı PDF belgelerine dönüştürmek için sadece bir satır kod gerektirir. Sadece şu şekilde ç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'lere dönüştürmek için hangi NuGet paketlerine ihtiyaçım var?

İki pakete ihtiyaçınız var: IronPdf (ana paket) ve IronPdf.Extensions.Mvc.Core (uzantı paketi). Uzantı paketi, ASP.NET Core'un bağımlılık enjeksiyon sistemi ve Razor görünüm işleme boru hattı ile entegrasyon için özel işlevsellik sağlar.

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

Evet, IronPDF, CSS stilizasyonu, JavaScript yürütmesi ve özel fontları tamamen destekler ve Görünümleri PDF'ye işlerken, bu PDF'lerinizin web görünümlerinizle aynı görünüm ve işlevselliği sürdürmesini sağlar, duyarlı CSS ve dinamik JavaScript içeriği dahil.

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

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

Görünüm'den PDF oluşturma sırasında MVC modeli nasıl çalışır?

ASP.NET Core MVC'de, Model verilerinizi ve iş mantığını içerir, Görünüm (.cshtml dosyanız) UI'yi sunar ve verileri görüntüler, ve Kontrolcü istekleri ele alır ve Görünüm'den PDF oluşturmak için IronPDF'nin RenderRazorViewToPdf metodunu kullanır.

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
İnceleyen
Jeff Fritz
Jeffrey T. Fritz
Baş Program Yöneticisi - .NET Topluluk Ekibi
Jeff, aynı zamanda .NET ve Visual Studio ekipleri için Baş Program Yöneticisi'dir. Microsoft geliştirici etkinlikleri (Microsoft Build, Microsoft Ignite, .NET Conf, Microsoft MVP Summit) için atölye çalışmaları, sunumlar yazar ve içerik planlar ve haftada iki kez yayınlanan 'Fritz ve Arkadaşları' canlı yayınının ev sahibidir.
Başlamaya Hazır mısınız?
Nuget Indirmeler 18,332,619 | Sürüm: 2026.4 yeni yayınlandı
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizin PDF olduğunu izleyin.