Jak konwertować widoki na pliki PDF w C# ASP.NET Core MVC
Konwertuj Widoki ASP.NET Core MVC na pliki PDF przy użyciu metody RenderRazorViewToPdf IronPDF, która przekształca pliki .cshtml w wysokiej jakości dokumenty PDF za pomocą jednej linii kodu w Twojej aplikacji MVC.
Widok to komponent w .NET Framework używany do generowania znaczników HTML w aplikacjach internetowych. Jest to część wzorca Model-View-Controller (MVC), powszechnie stosowanego w aplikacjach ASP.NET MVC i ASP.NET Core MVC. Widoki są odpowiedzialne za prezentowanie danych użytkownikom poprzez dynamiczne renderowanie treści HTML. Widoki zazwyczaj wykorzystują składnię Razor, czyli składnię znaczników służącą do osadzania kodu serwerowego w stronach internetowych, co czyni je potężnymi narzędziami do tworzenia dokumentów PDF opartych na danych.
Szybki start: Konwersja CSHTML do formatu PDF w ASP.NET CoreKonwertuj widoki ASP.NET Core MVC na pliki PDF za pomocą IronPDF. Przy użyciu jednej linii kodu renderuj pliki .cshtml do dokumentów PDF. Zintegruj tę funkcjonalność bezpośrednio ze swoją aplikacją MVC, aby płynnie generować pliki PDF z dynamicznych widoków HTML. Postępuj zgodnie z tym przewodnikiem, aby skonfigurować swoje środowisko i rozpocząć konwersję.
-
1Install IronPDF with NuGet Package Manager
-
2Skopiuj i uruchom ten fragment kodu.
// using IronPdf.Extensions.Mvc.Core new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml", model).SaveAs("report.pdf");C# -
3Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
ASP.NET Core Web App MVC (Model-View-Controller) to framework aplikacji internetowych dostarczany przez firmę Microsoft do tworzenia aplikacji internetowych przy użyciu .NET Core.
Model: Reprezentuje dane i logikę biznesową, zarządza interakcjami z danymi, komunikuje się z źródłami danych.View: Prezentuje interfejs użytkownika, wyświetla dane, renderuje informacje dla użytkowników.Controller: Obsługuje dane wejściowe użytkownika, reaguje na żądania, komunikuje się zModel, orkiestruje interakcje Model-View.
IronPDF umożliwia bezpośrednie tworzenie plików PDF z poziomu widoków w projektach ASP.NET Core MVC. Dzięki temu generowanie plików PDF w ASP.NET Core MVC jest proste i obsługuje nowoczesne funkcje, w tym stylizację CSS, wykonywanie kodu JavaScript oraz niestandardowe czcionki.
Minimalny proces (5 kroków)
- Pobierz bibliotekę C# do konwersji widoków do formatu PDF w ASP.NET Core MVC
- Dodaj klasę modelu dla danych
- Edytuj plik "HomeController.cs" i użyj metody
RenderRazorViewToPdf - Utwórz nowy widok i edytuj plik ".cshtml", aby wyrenderować plik PDF
- Pobierz przykładowy projekt, aby szybko rozpocząć pracę
Jakiego pakietu potrzebuję do rozszerzeń IronPDF?
Pakiet IronPdf.Extensions.Mvc.Core jest rozszerzeniem głównego pakietu IronPdf. Potrzebne są zarówno pakiety IronPdf.Extensions.Mvc.Core, jak i IronPdf, aby renderować widoki do dokumentów PDF w ASP.NET Core MVC. Pakiet rozszerzeń zapewnia konkretne funkcje umożliwiające integrację z systemem wstrzykiwania zależności .NET Core oraz potokiem renderowania widoków Razor.
Dlaczego potrzebuję zarówno IronPDF, jak i pakietu rozszerzeń?
Główny pakiet IronPDF zawiera podstawowy silnik renderowania PDF i podstawową funkcjonalność, podczas gdy pakiet Extensions.Mvc.Core zapewnia specjalistyczną integrację z systemem renderowania widoków ASP.NET Core MVC. Takie rozdzielenie pozwala na lepszą modułowość i gwarantuje, że uwzględnisz tylko te funkcje, które są potrzebne w danym typie projektu. Pakiet rozszerzeń obejmuje interfejs IRazorViewRenderer i implementację potrzebną do konwersji widoków Razor na HTML przed generowaniem PDF.
Którą wersję pakietu NuGet należy użyć?
Zawsze używaj zgodnych wersji IronPdf i IronPdf.Extensions.Mvc.Core w celu zapewnienia kompatybilności. Najnowsze stabilne wersje i informacje o kompatybilności wersji znajdziesz w dokumentacji pakietów NuGet. Podczas aktualizacji należy upewnić się, że oba pakiety są aktualizowane razem, aby zachować prawidłowe działanie.
Jakie są typowe problemy związane z instalacją?
Typowe problemy z instalacją obejmują niezgodności wersji między pakietami podstawowymi a rozszerzeniami, brakujące zależności lub wymagania specyficzne dla platformy. W razie problemów upewnij się, że projekt jest przeznaczony dla obsługiwanej wersji .NET, i zapoznaj się z przeglądem instalacji, aby uzyskać informacje na temat rozwiązywania problemów.
Zainstaluj za pomocą NuGet
Install-Package IronPdf.Extensions.Mvc.Core
Jak renderować widoki do plików PDF?
Potrzebujesz projektu aplikacji internetowej ASP.NET Core (Model-View-Controller), aby konwertować widoki na pliki PDF. Proces polega na utworzeniu akcji kontrolera, która używa metody RenderRazorViewToPdf IronPDF do przekształcenia widoków Razor w dokumenty PDF. Takie podejście pozwala w pełni wykorzystać możliwości składni Razor, umożliwiając tworzenie złożonych, opartych na danych plików PDF z dynamiczną treścią.
Jakiego typu projekt powinienem użyć?
Aby uzyskać optymalną kompatybilność z funkcjami renderowania widoku IronPDF, należy użyć szablonu aplikacji internetowej ASP.NET Core (Model-View-Controller). Ten typ projektu zapewnia infrastrukturę niezbędną do renderowania widoków, w tym silnik widoków Razor i odpowiednie routowanie. W przypadku istniejących projektów należy upewnić się, że są one zgodne z wzorcem MVC i mają zainstalowane wymagane funkcje renderowania widoku.
Czy mogę z tego korzystać przy minimalnym wykorzystaniu API?
Chociaż Minimal API nie obsługują wbudowanych widoków, nadal można korzystać z funkcji konwersji HTML na PDF w IronPDF. W przypadku generowania plików PDF na podstawie widoku należy zastosować tradycyjne podejście MVC lub rozważyć Razor Pages jako alternatywę.
Jak dodać klasę modelu?
- Przejdź do folderu "Models".
- Utwórz nowy plik klasy C# o nazwie "Person". Klasa ta będzie pełnić rolę modelu reprezentującego dane dotyczące poszczególnych osób. Użyj poniższego fragmentu kodu:
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 NamespaceDlaczego potrzebuję modelu do generowania plików PDF?
Modele dostarczają dane strukturalne, które mogą być przekazywane do widoków w celu renderowania. Takie rozdzielenie zadań gwarantuje, że logika generowania plików PDF pozostaje przejrzysta i łatwa w utrzymaniu. Model pełni rolę umowy między kontrolerem a widokiem, zapewniając bezpieczeństwo typów i umożliwiając obsługę IntelliSense w widokach Razor.
Jakie typy danych najlepiej sprawdzają się w widokach?
Do generowania plików PDF najlepiej nadają się proste typy danych i kolekcje. Można używać złożonych obiektów zagnieżdżonych, ale może to wymagać dodatkowej logiki widoku. Aby uzyskać optymalną wydajność, spłaszcz złożone struktury danych w kontrolerze przed przekazaniem ich do widoku. Jeśli modele domenowe są zbyt złożone, warto rozważyć użycie ViewModels zaprojektowanych specjalnie do generowania plików PDF.
Oto przykład bardziej złożonej struktury modelu, odpowiedniej do generowania plików PDF:
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 ClassJak edytować kontroler?
Przejdź do folderu "Controllers" i otwórz plik HomeController.cs. Dokonamy zmian tylko w HomeController i dodamy akcję Persons. Wskazówki można znaleźć w poniższym kodzie:
Kod poniżej najpierw tworzy instancję klasy ChromePdfRenderer, przekazując IRazorViewRenderer, ścieżkę do naszego Views/Home/Persons.cshtml i List, który zawiera wymagane dane do metody RenderRazorViewToPdf. Użytkownicy mogą używać RenderingOptions, aby uzyskać dostęp do szeregu funkcji, takich jak dodawanie niestandardowego tekstu, włączanie nagłówków HTML i stopek w generowanym PDF, definiowanie niestandardowych marginesów i stosowanie numeracji stron. Aby uzyskać więcej informacji na temat zaawansowanych opcji renderowania, zapoznaj się z dokumentacją dotyczącą opcji renderowania.
File(pdf.BinaryData, "application/pdf"). Jednak pobranie pliku PDF po wyświetleniu go w przeglądarce powoduje uszkodzenie dokumentu PDF.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 NamespacePo użyciu metody RenderRazorViewToPdf otrzymujesz obiekt PdfDocument, który jest otwarty na dalsze ulepszenia i modyfikacje. Możesz przekonwertować plik PDF do formatów PDF/A lub PDF/UA, dodać swój podpis cyfrowy do wygenerowanego pliku PDF lub łączyć i dzielić dokumenty PDF w razie potrzeby. Dodatkowo biblioteka umożliwia obracanie stron, wstawianie adnotacji lub zakładek oraz nanoszenie unikalnych znaków wodnych na pliki PDF.
Czym jest usługa IRazorViewRenderer?
IRazorViewRenderer to interfejs usługi dostarczony przez pakiet IronPdf.Extensions.Mvc.Core, który obsługuje konwersję widoków Razor na HTML. Integruje się z silnikiem widoków ASP.NET Core do przetwarzania plików .cshtml z ich powiązanymi modelami, wykonując całą składnię Razor i generując końcowy HTML, który IronPDF przekształca w PDF.
Dlaczego warto sprawdzić metodę POST przed renderowaniem?
Sprawdzanie POST gwarantuje, że plik PDF zostanie wygenerowany tylko wtedy, gdy zostanie to wyraźnie zlecone poprzez przesłanie formularza. Zapobiega to przypadkowemu generowaniu plików PDF podczas ładowania stron i pozwala, aby ta sama akcja obsługiwała zarówno widok HTML (przy GET), jak i pobieranie pliku PDF (przy POST). Ten wzorzec podąża za zasadami RESTful i zapewnia lepsze doświadczenie użytkownika.
Jak mogę dostosować plik PDF?
IronPDF oferuje szerokie opcje dostosowywania poprzez właściwość RenderingOptions. Oto przykład z bardziej zaawansowanymi ustawieniami:
// 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
};
Jakie są typowe błędy kontrolera?
Typowe błędy to wyjątki odwołania do wartości null, gdy usługi nie są poprawnie wstrzykiwane, problemy ze ścieżkami podczas określania lokalizacji widoków oraz problemy z powiązaniem modeli. Upewnij się, że wszystkie wymagane usługi są zarejestrowane w Program.cs i używaj ścieżek względnych od katalogu głównego projektu podczas określania lokalizacji widoku. W celu rozwiązywania problemów należy włączyć szczegółowe komunikaty o błędach w trybie programowania.
IronSuite odgrywa kluczową rolę w naszej działalności. Są to narzędzia zwiększające wydajność w całej firmie, w tym tworzenie planów pięter i poprawa zarządzania zapasami.
Jak dodać widok?
- Kliknij prawym przyciskiem myszy na nowo dodanej akcji
Personi wybierz "Dodaj widok".

- Wybierz "Razor View" dla nowego elementu szkieletowego.

- Wybierz szablon "List" i klasę modelu
Person.

To tworzy plik .cshtml o nazwie Persons.
- Przejdź do folderu "Views" -> folderu "Home" -> pliku
Persons.cshtml.
IronPdf.Extensions.Mvc.Core
Aby dodać przycisk, który wywołuje akcję Persons, użyj poniższego kodu:
@using (Html.BeginForm("Persons", "Home", FormMethod.Post))
{
<input type="submit" value="Print Person" />
}
Dlaczego używać FormMethod.Post do generowania PDF?
Użycie FormMethod.Post do generowania PDF idzie za najlepszymi praktykami dla stron internetowych, czyniąc akcję wyraźną i zapobiegając niechcianemu generowaniu PDF z odświeżeń przeglądarki lub zapełnionych zakładek URL. Żądania POST powinny być idempotentne (nie zmieniać stanu serwera), natomiast żądania POST wskazują na akcję, która generuje wynik – w tym przypadku generując dokument PDF.
Jak mogę stylizować przycisk drukowania w pliku PDF?
Stylizuj przycisk drukowania, używając klas CSS i ulepsz go za pomocą JavaScript dla lepszego doświadczenia użytkownika. Oto ulepszona wersja:
@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>
Jakie szablony widoku najlepiej sprawdzają się w przypadku plików PDF?
Szablony List i Details działają szczególnie dobrze przy generowaniu PDF, ponieważ zapewniają strukturę układu. Najlepsze wyniki często dają niestandardowe szablony zaprojektowane specjalnie do generowania plików PDF. Rozważ utworzenie dedykowanych widoków PDF, które są zoptymalizowane pod kątem układu wydruku, a nie wyświetlania na ekranie, usuwając elementy nawigacyjne i skupiając się na prezentacji treści.
Jak dodać sekcję do górnego paska nawigacyjnego?
- W tym samym folderze "Views" przejdź do folderu "Shared" ->
_Layout.cshtml. Umieść element nawigacjiPersonpoHome.
Upewnij się, że wartość atrybutu asp-action dokładnie odpowiada naszej nazwie pliku, która w tym przypadku to 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>
Dlaczego akcja asp musi być dokładnie dopasowana?
Atrybut asp-action używa tagów pomocniczych ASP.NET Core, aby wygenerować poprawny URL na podstawie Twojej konfiguracji routingu. Dokładne dopasowanie gwarantuje, że link przekierowuje do właściwej akcji kontrolera. Niezgodności powodują błędy 404 lub przekierowanie do niezamierzonych działań. System tag helperów rozróżnia wielkość liter i musi dokładnie odpowiadać nazwie metody w kontrolerze.
Co się stanie, jeśli linki nawigacyjne nie będą pasować?
Gdy linki nawigacyjne nie odpowiadają akcjom kontrolera, użytkownicy napotykają błędy 404 lub są przekierowywani na nieprawidłowe strony. Podczas tworzenia aplikacji strona wyjątków programistycznych ASP.NET Core wyświetla szczegółowe błędy routingu. W środowisku produkcyjnym użytkownicy widzą ogólne strony błędów. Zawsze sprawdzaj, czy linki nawigacyjne dokładnie odpowiadają nazwom akcji kontrolera, aby uniknąć problemów z obsługą strony.
Jak edytować plik Program.cs?
Zarejestruj interfejsy IHttpContextAccessor i IRazorViewRenderer wewnątrz kontenera iniekcji zależności (DI). Sprawdź poniższy kod w celach informacyjnych.
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()Dlaczego warto rejestrować usługi jako singletony?
Usługi Singleton są tworzone raz i ponownie używane przez cały czas życia aplikacji, dzięki czemu są wydajne dla bezstanowych usług takich jak IRazorViewRenderer. Ten wzorzec zmniejsza obciążenie pamięci i poprawia wydajność, ponieważ usługa renderowania widoku nie utrzymuje stanu specyficznego dla żądania. Usługa IHttpContextAccessor musi być singletonem, aby była dostępna w różnych okresach życia usługi.
Do czego służy ITempDataProvider?
ITempDataProvider umożliwia tymczasowe przechowywanie danych między żądaniami, często używane do wyświetlania wiadomości po przekierowaniach. W kontekście generowania PDF zapewnia, że stan widoku jest odpowiednio zachowany przy renderowaniu widoków na PDF. CookieTempDataProvider przechowuje te tymczasowe dane w zaszyfrowanych plikach cookie, zapewniając bezpieczny mechanizm zarządzania stanem.
Czy mogę używać usług zasięgu zamiast tego?
Chociaż możesz używać usług zakresowych w niektórych scenariuszach, IRazorViewRenderer działa najlepiej jako singleton, ponieważ nie przechowuje stanu specyficznego dla żądania. Używanie usług zasięgu powodowałoby tworzenie nowych instancji dla każdego żądania, zwiększając zużycie pamięci bez korzyści. Jednak jeśli potrzebujesz wstrzykiwać usługi zasięgu do swoich widoków, zapewnij odpowiednie zarządzanie czasem życia usług, aby uniknąć błędów w trakcie działania.
Uruchom projekt
To pokazuje, jak uruchomić projekt i wygenerować dokument PDF. Kiedy uruchamiasz aplikację, przejdź do strony Persons używając górnego menu nawigacyjnego, a następnie kliknij przycisk Print Person, aby wygenerować i pobrać PDF.
Skąd mogę pobrać projekt ASP.NET Core MVC?
Pobierz kompletny kod dla tego przewodnika. Jest dostarczony jako plik zip, który można otworzyć w Visual Studio jako projekt ASP.NET Core Web App (Model-View-Controller).
Pobierz przykładowy projekt ASP.NET Core MVC
Co zawiera przykładowy projekt?
Przykładowy projekt zawiera w pełni skonfigurowaną aplikację ASP.NET Core MVC z integracją IronPDF, demonstrując przekształcanie widoków na PDF. Zawiera model Person, HomeController z logiką generowania PDF, widok Persons z poprawną składnią Razor i wszystkie niezbedne rejestracje usług w Program.cs. Projekt zawiera również przykładowe style i konfiguracje układu zoptymalizowane dla wyników PDF.
Jaką wersję Visual Studio powinienem używać?
Visual Studio 2022 (wersja 17.0 lub późniejsza) jest zalecana dla najlepszych wrażeń z projektami .NET 6+. Visual Studio Code z rozszerzeniami C# również dobrze sprawdza się w rozwoju międzyplatformowym. Upewnij się, że masz zainstalowany pakiet pracy ASP.NET i web development. Projekt domyślnie celuje w .NET 6.0, ale może być zaktualizowany do nowszych wersji.
Jak rozwiązywać problemy z konfiguracją projektu?
Typowe problemy z konfiguracją obejmują brakujące pakiety NuGet, nieprawidłowe wersje SDK .NET lub problemy z konfiguracją. Najpierw przywróć pakiety NuGet przy użyciu dotnet restore lub za pomocą Menadżera Pakietów Visual Studio. Zweryfikuj, czy Twoja wersja .NET SDK odpowiada wymaganiom projektu używając dotnet --version. W kwestii problemów licencyjnych, zobacz dokumentację kluczy licencyjnych. Jeśli wystąpią problemy z renderowaniem, sprawdź przewodnik rozwiązywania problemów dla rozwiązań.
Gotowy, aby sprawdzić, co jeszcze możesz zrobić? Sprawdź naszą stronę z samouczkami tutaj: Konwersja PDF-ów
Często Zadawane Pytania
Jaki jest najprostszy sposób konwersji widoków CSHTML do formatu PDF w ASP.NET Core MVC?
Najłatwiejszym sposobem jest użycie metody RenderRazorViewToPdf biblioteki IronPDF, która pozwala przekonwertować pliki .cshtml na dokumenty PDF za pomocą zaledwie jednej linii kodu. Wystarczy wywołać: new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml", model).SaveAs("report.pdf");
Jakie pakiety NuGet są potrzebne do konwersji widoków do formatu PDF w ASP.NET Core MVC?
Potrzebne są dwa pakiety: IronPdf (pakiet główny) oraz IronPdf.Extensions.Mvc.Core (pakiet rozszerzeń). Pakiet rozszerzeń zapewnia konkretne funkcje umożliwiające integrację z systemem wstrzykiwania zależności ASP.NET Core oraz potokiem renderowania widoków Razor.
Czy podczas konwersji CSHTML do formatu PDF mogę zastosować style CSS i JavaScript?
Tak, IronPDF w pełni obsługuje style CSS, wykonywanie kodu JavaScript oraz czcionki niestandardowe podczas renderowania widoków do formatu PDF. Dzięki temu pliki PDF zachowują ten sam wygląd i funkcjonalność co widoki internetowe, w tym responsywne style CSS i dynamiczną zawartość JavaScript.
Jakie są główne kroki wdrożenia konwersji View do PDF w moim projekcie ASP.NET Core MVC?
Proces składa się z 5 kroków: 1) Pobierz IronPDF i jego rozszerzenie MVC Core, 2) Dodaj klasę modelu dla swoich danych, 3) Edytuj kontroler, aby używał metody RenderRazorViewToPdf, 4) Utwórz lub zmodyfikuj widok (plik .cshtml) do renderowania PDF oraz 5) Uruchom aplikację, aby wygenerować pliki PDF.
Jak działa wzorzec MVC w przypadku generowania plików PDF z widoków?
W ASP.NET Core MVC model zawiera dane i logikę biznesową, widok (plik .cshtml) przedstawia interfejs użytkownika i wyświetla dane, a kontroler obsługuje żądania i wykorzystuje metodę RenderRazorViewToPdf biblioteki IronPDF do koordynowania generowania pliku PDF z poziomu widoku.

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.