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ızdaki sadece bir satırlık kodla .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 satırlık kod ile .cshtml dosyalarınızı PDF belgelere 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österir, kullanıcılara bilgileri yansıtır.
  • Controller: Kullanıcı girdisini işler, isteklere yanıt verir, Model ile iletişim kurar, Model-View etkileşimlerini düzenler.

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. Hem IronPdf.Extensions.Mvc.Core hem de IronPdf paketleri, ASP.NET Core MVC'de Görünümleri PDF belgelerine dönüştürmek için 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 oluşturma motorunu ve temel işlevselliği içerirken, Extensions.Mvc.Core paketi ASP.NET Core MVC'nin görünüm oluşturma sistemiyle ö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 öncesi Razor görünümlerini HTML'ye dönüştürmek için gerekli olan IRazorViewRenderer arayüzü ve uygulamasını içerir.

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

Uyumluluğu sağlamak için her zaman uyumlu sürümleri IronPdf ve IronPdf.Extensions.Mvc.Core 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. İşlem, Razor görünümlerinizi PDF belgelere 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şiklik yapacağız ve Persons eylemi ekleyeceğiz. Kılavuz için aşağıdaki kodu gözden geçirin:

Aşağıdaki kod, önce ChromePdfRenderer sınıfını IRazorViewRenderer ile örnekler, bizim Views/Home/Persons.cshtml yolumuzu ve gerekli verileri içeren List üzerindeki RenderRazorViewToPdf yöntemine geçirir. Kullanıcılar, ortaya çıkan PDF'ye özel metin ekleme, HTML üstbilgi ve altbilgileri dahil etme, özel kenar boşlukları tanımlama ve sayfa numaraları uygulama gibi bir dizi özelliğe erişmek için RenderingOptions kullanabilirler. 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ştirmeye ve değişikliğe 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 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 sağlanan bir hizmet arayüzüdür. Bu, ASP.NET Core'un görünüm motoruyla entegre olur ve .cshtml dosyalarını, ilişkili modelleriyle işleyerek tüm Razor söz dizimini yürütür ve IronPDF'nin PDF'ye çevirdiği son 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 geniş özelleştirme seçenekleri sunar. Daha gelişmiş ayarlarla bir örnek:

:path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-mvc-core-6.cs
// 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.RenderDelay(500); // Wait 500ms for JS execution
renderer.RenderingOptions.WaitFor.NetworkIdle0(); // Wait for network requests

// Apply watermark
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    DrawDividerLine = true,
    CenterText = "CONFIDENTIAL",
    Font = IronSoftware.Drawing.FontTypes.Arial,
    FontSize = 16
};
Imports IronPdf
Imports IronSoftware.Drawing

' Advanced rendering configuration example
Dim 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() 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.RenderDelay(500) ' Wait 500ms for JS execution
renderer.RenderingOptions.WaitFor.NetworkIdle0() ' Wait for network requests

' Apply watermark
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
    .DrawDividerLine = True,
    .CenterText = "CONFIDENTIAL",
    .Font = FontTypes.Arial,
    .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. Tüm gerekli hizmetlerin Program.cs içinde kayıtlı olduğundan emin olun ve görünüm konumlarını belirtirken proje kökünden göreli yollar kullanın. Hata ayıklama için geliştirme modunda detaylı hata mesajlarını etkinleştirin.

Icon Quote related to Yaygın Denetleyici Hataları Nelerdir?

Bu türden favori kütüphanem IronPDF'dir. PDF dosyalarının hızlı ve verimli bir şekilde işlenmesine olanak tanır. Ayrıca, PDF/A formatına dışa aktarma ve dijital imzalama gibi birçok değerli özelliğe sahiptir.

Milan Jovanovic related to Yaygın Denetleyici Hataları Nelerdir?

Milan Jovanovic

Microsoft MVP

Vaka çalışmasını görüntüle
Icon Quote related to Yaygın Denetleyici Hataları Nelerdir?

IronOCR, manuel işleme maliyetinden yıllık 40.000 USD tasarruf etmemizi sağlıyor, üretkenliği artırıyor ve yüksek etkili görevler için kaynakları serbest bırakıyor. Kesinlikle tavsiye ederim.

Brent Matzelle related to Yaygın Denetleyici Hataları Nelerdir?

Brent Matzelle

Teknoloji Müdürü, OPYN

Vaka çalışmasını görüntüle
Icon Quote related to Yaygın Denetleyici Hataları Nelerdir?

IronSuite, operasyonlarımızda kritik bir rol oynar. Bunlar, iş süreçlerinde verimliliği artıran, kat planları oluşturmak ve envanter yönetimini geliştirmek gibi araçlardır.

David Jones related to Yaygın Denetleyici Hataları Nelerdir?

David Jones

Baş Yazılım Mühendisi, Agorus Build

Vaka çalışmasını görüntüle

Bir 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ği vurgulandığında Persons() yöntemine sağ tıklarken

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

Visual Studio'da List şablonu ve Person model sınıfının seçimi ile düzen seçeneklerini gösteren Add Razor View iletişim kutusu

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

Visual Studio'da List şablonu ve Person model sınıfının seçimi ile düzen seçeneklerini gösteren Add Razor View iletişim kutusu

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

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

IronPdf.Extensions.Mvc.Core

Aşağıdaki kodu kullanarak Persons eylemini çağıran bir düğme ekleyin:

@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

Neden PDF Oluşturma için FormMethod.Post Kullanmalıyız?

PDF oluşturma için FormMethod.Post kullanmak, eylemi belirgin hale getirerek ve tarayıcı yenilemeleri veya yer imlenmiş URL'lerden istenmeyen PDF oluşturmayı önleyerek web için en iyi uygulamaları takip eder. POST istekleri idemponant olmalıdır (sunucu durumunu değiştirmemelidir), POST istekleri ise bir sonuç üreten eylemi belirtir - bu durumda, bir PDF belgesi oluşturma.

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ı özellikle PDF oluşturma için iyi çalışır, çünkü yapısal düzenler sağlarlar. 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 gezinti öğesini Home sonrasına yerleştirin.

asp-action özniteliğinin değeri, tam olarak, bu durumda dosya adımız olan Persons ile eşleşmelidir.

<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üzünü bağımlılık enjeksiyon (DI) konteynerine kaydedin. Referans için aşağıdaki koda bakın.

:path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-mvc-core-10.cs
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 hizmetler bir kez oluşturulur ve uygulamanın yaşam süresi 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 işleme hizmeti taleplere özgü bir durum tutmaz. IHttpContextAccessor, farklı hizmet ömürleri arasında erişilebilir olması için singleton olmalıdır.

ITempDataProvider Nedir?

ITempDataProvider, istekler arası geçici veri depolamayı etkinleştirir, genellikle yönlendirmeler sonrası mesajların görüntülenmesi 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 veriyi şifreli çerezlerde depolar, durum yönetimi için güvenli bir mekanizma sağlar.

Yerine Kapsamlı Hizmetler Kullanabilir Miyim?

Bazı senaryolar için scoped hizmetler kullanabilseniz de, IRazorViewRenderer, istek özel durumu taşımadığı için singleton 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 navigasyon menüsünü kullanarak Persons sayfasına gidin, ardından PDF oluşturup indirmek için Print Person düğmesine tıklayın.

ASP.NET Core MVC denetleyici kodu ve IntelliSense yardımıyla HomeController.cs'yi gösteren Visual Studio

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. Bu, Person modelini, PDF oluşturma mantığıyla HomeController ve uygun Razor sözdizimi ile Persons görünümünü ve tüm gerekli hizmet kayıtlarını Program.cs 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. NuGet paketlerini dotnet restore veya Visual Studio'nun Paket Yöneticisi aracılığıyla önce geri yükleyin. Projede gerekliliklerle eşleştiğinden emin olmak için .NET SDK sürümünüzü dotnet --version kullanarak 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,936,792 | Sürüm: 2026.7 yeni yayınlandı
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.