C# ASP.NET Core MVC'de Görünümleri PDF'ye Dönüştürme
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.
-
IronPDF aşağıdaki NuGet Paket Yöneticisi ile yükleyin
PM > Install-Package IronPdf -
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"); -
Canlı ortamınızda test için dağıtım yapın
Ücretsiz deneme ile bugün projenizde IronPDF kullanmaya başlayın
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,Modelile 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.
Asgari İş Akışı (5 adım)
- ASP.NET Core MVC'de Görünümleri PDF'lere dönüştürmek için C# kütüphanesini indirin
- Veri için bir model sınıfı ekleyin
- "HomeController.cs" dosyasını düzenleyin ve
RenderRazorViewToPdfyöntemini kullanın - Yeni bir Görünüm oluşturun ve PDF'yi işlemek için ".cshtml" dosyasını düzenleyin
- Hızlı başlamak için örnek projeyi indirin
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.
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
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
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.
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
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}
}
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
Personeylemine sağ tıklayın ve "Görünüm Ekle"yi seçin.

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

- "List" şablonunu ve
Personmodel sınıfını seçin.

Bu, .cshtml adlı bir Persons dosyası oluşturur.
- "Views" klasörüne -> "Home" klasörüne ->
Persons.cshtmldosyası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" />
}
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>
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.Persongezinme öğesiniHomeöğ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>
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()
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.
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.

