Jak przekonwertować CSHTML na PDF przy użyciu Razor Headlessly w C# | IronPDF

Jak konwertować widoki Razor na PDF bez interfejsu graficznego w C

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

Przekonwertuj widoki Razor na PDF w C# używając Razor.Templating.Core do przekształcania plików cshtml na HTML, a następnie użyj metody RenderHtmlAsPdf IronPDF, aby wygenerować dokumenty PDF bez potrzeby okna GUI lub przeglądarki.

Proces renderowania bez interfejsu graficznego przetwarza zawartość sieciową bez graficznego interfejsu użytkownika. Chociaż IronPdf.Extensions.Razor jest przydatny, brakuje mu możliwości renderowania bez interfejsu graficznego. Ten przewodnik zajmuje się tą luką.

Użyjemy Razor.Templating.Core do konwersji cshtml na HTML, a następnie IronPDF do generowania PDF.

Szybki start: Przekonwertuj widoki Razor na PDF w kilka sekund

Przekształć widoki Razor w PDF za pomocą konwersji bez interfejsu IronPDF. Użyj IronPdf.HtmlToPdf.StaticRender.RenderHtmlAsPdf, aby wyrenderować HTML z widoków Razor na PDF. To podejście działa bezproblemowo w środowiskach ASP.NET Core.

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    var html = await RazorTemplateEngine.RenderAsync("Views/Template.cshtml", model); 
    new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf(html).SaveAs("output.pdf");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Zainstaluj Razor.Templating.Core, aby konwertować widoki Razor na HTML w ASP.NET Core Web Apps.

# Install the Razor.Templating.Core package using NuGet Package Manager
Install-Package Razor.Templating.Core
# Install the Razor.Templating.Core package using NuGet Package Manager
Install-Package Razor.Templating.Core
SHELL

Jak skonfigurować projekt ASP.NET Core do konwersji Razor na PDF?

Potrzebujesz projektu ASP.NET Core Web App (Model-View-Controller), aby konwertować widoki na PDF. Konfiguracja obejmuje tworzenie projektu w Visual Studio, instalację pakietów NuGet oraz konfigurację struktury projektu. W przypadku podobnych technik zapoznaj się z konwersją CSHTML na PDF w MVC Core lub konwersją CSHTML na PDF używając stron Razor.

Dlaczego należy użyć Razor.Templating.Core zamiast IronPdf.Extensions.Razor?

Razor.Templating.Core zapewnia prawdziwe renderowanie bez interfejsu—konwertuje widoki Razor na HTML bez kontekstu sieciowego lub okna przeglądarki. To pasuje do usług w tle, aplikacji konsolowych lub środowisk bez interfejsu użytkownika. IronPdf.Extensions.Razor wymaga kontekstu sieciowego do działania.

Jaki typ projektu najlepiej nadaje się do generowania PDF bez interfejsu?

Projekty ASP.NET Core Web App (Model-View-Controller) zapewniają niezbędną infrastrukturę widoków Razor z elastycznymi opcjami wdrożenia. Należy użyć tego podejścia w usługach w tle, funkcjach Azure lub aplikacjach konsolowych. Więcej informacji zawiera artykuł wdrażanie IronPDF na Azure.

Jak zainstalować wymagane pakiety NuGet?

Zainstaluj pakiety używając Menedżera Pakietów NuGet. Potrzebujesz IronPDF i Razor.Templating.Core:

// Install via Package Manager Console
Install-Package IronPdf
Install-Package Razor.Templating.Core

// Or add to your .csproj file
// <PackageReference Include="IronPdf" Version="2024.x.x" />
// <PackageReference Include="Razor.Templating.Core" Version="1.x.x" />
// Install via Package Manager Console
Install-Package IronPdf
Install-Package Razor.Templating.Core

// Or add to your .csproj file
// <PackageReference Include="IronPdf" Version="2024.x.x" />
// <PackageReference Include="Razor.Templating.Core" Version="1.x.x" />
' Install via Package Manager Console
' Install-Package IronPdf
' Install-Package Razor.Templating.Core

' Or add to your .vbproj file
' <PackageReference Include="IronPdf" Version="2024.x.x" />
' <PackageReference Include="Razor.Templating.Core" Version="1.x.x" />
$vbLabelText   $csharpLabel

Jak utworzyć i skonfigurować widok Razor do generowania PDF?

  • Kliknij prawym przyciskiem myszy na folderze "Home". Wybierz "dodaj", a następnie "Dodaj widok".
  • Utwórz pusty widok Razor o nazwie "Data.cshtml".

 related to Jak utworzyć i skonfigurować widok Razor do generowania PDF?

Jaką treść HTML należy dodać do mojego widoku Razor?

Dodaj HTML, który ma zostać wyrenderowany jako PDF:

<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    <tr>
        <td>John Doe</td>
        <td>Software Engineer</td>
        <td>Experienced software engineer specializing in web development.</td>
    </tr>
    <tr>
        <td>Alice Smith</td>
        <td>Project Manager</td>
        <td>Seasoned project manager with expertise in agile methodologies.</td>
    </tr>
    <tr>
        <td>Michael Johnson</td>
        <td>Data Analyst</td>
        <td>Skilled data analyst proficient in statistical analysis and data visualization.</td>
    </tr>
</table>
<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    <tr>
        <td>John Doe</td>
        <td>Software Engineer</td>
        <td>Experienced software engineer specializing in web development.</td>
    </tr>
    <tr>
        <td>Alice Smith</td>
        <td>Project Manager</td>
        <td>Seasoned project manager with expertise in agile methodologies.</td>
    </tr>
    <tr>
        <td>Michael Johnson</td>
        <td>Data Analyst</td>
        <td>Skilled data analyst proficient in statistical analysis and data visualization.</td>
    </tr>
</table>
HTML

Dla skomplikowanych układów użyj CSS i stylów druku, aby zapewnić doskonałe renderowanie PDF. IronPDF obsługuje nowoczesne funkcje CSS3 dla zaawansowanych układów dokumentów.

Dlaczego warto używać tabel do wyświetlania danych PDF?

Tabele dostarczają zorganizowanej, uporządkowanej informacji, która dobrze przekłada się na drukowane dokumenty. Zachowują spójność formatowania na różnych platformach i są czytelne w formacie PDF. Silnik renderujący IronPDF dobrze obsługuje układy tabel, zachowując granice, odstępy i wyrównanie. Dla zaawansowanego formatowania zapoznaj się z niestandardowymi marginesami do optymalizacji układu.

Jakie są powszechne kwestie stylizacyjne dotyczące wyników PDF?

Dla wyników PDF używaj zapytań medialnych specyficznych dla druku CSS, wartości w pikselach zamiast jednostek względnych i osadzonych czcionek dla spójnego renderowania. IronPDF obsługuje czcionki internetowe i ikonograficzne dla spójności marki. Rozważ przerwy stron dla dokumentów wielostronicowych i odpowiednie marginesy dla profesjonalnego wyglądu.

Jak skonfigurować Program.cs do renderowania PDF bez interfejsu?

W "Program.cs" dodaj ten kod. Używa RenderAsync z Razor.Templating.Core do konwersji widoków Razor na HTML, a następnie instancuje ChromePdfRenderer i przekazuje HTML do RenderHtmlAsPdf. Użyj RenderingOptions dla niestandardowego tekstu, nagłówków, stopek, marginesów i numerów stron.

app.MapGet("/PrintPdf", async () =>
{
    // Set your IronPDF license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Enable detailed logging for troubleshooting
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

    // Render the Razor view to an HTML string
    string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");

    // Create a new instance of ChromePdfRenderer 
    ChromePdfRenderer renderer = new ChromePdfRenderer();

    // Configure rendering options for professional output
    renderer.RenderingOptions.PaperSize = IronPdf.PdfPaperSize.A4;
    renderer.RenderingOptions.MarginTop = 25;
    renderer.RenderingOptions.MarginBottom = 25;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    // Render the HTML string as a PDF document
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");

    // Return the PDF file as a response
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
app.MapGet("/PrintPdf", async () =>
{
    // Set your IronPDF license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Enable detailed logging for troubleshooting
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

    // Render the Razor view to an HTML string
    string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");

    // Create a new instance of ChromePdfRenderer 
    ChromePdfRenderer renderer = new ChromePdfRenderer();

    // Configure rendering options for professional output
    renderer.RenderingOptions.PaperSize = IronPdf.PdfPaperSize.A4;
    renderer.RenderingOptions.MarginTop = 25;
    renderer.RenderingOptions.MarginBottom = 25;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    // Render the HTML string as a PDF document
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");

    // Return the PDF file as a response
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
Imports IronPdf
Imports Microsoft.AspNetCore.Builder

app.MapGet("/PrintPdf", Async Function()
    ' Set your IronPDF license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"

    ' Enable detailed logging for troubleshooting
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All

    ' Render the Razor view to an HTML string
    Dim html As String = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")

    ' Create a new instance of ChromePdfRenderer 
    Dim renderer As New ChromePdfRenderer()

    ' Configure rendering options for professional output
    renderer.RenderingOptions.PaperSize = IronPdf.PdfPaperSize.A4
    renderer.RenderingOptions.MarginTop = 25
    renderer.RenderingOptions.MarginBottom = 25
    renderer.RenderingOptions.MarginLeft = 20
    renderer.RenderingOptions.MarginRight = 20

    ' Render the HTML string as a PDF document
    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot")

    ' Return the PDF file as a response
    Return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")
End Function)
$vbLabelText   $csharpLabel

Jakie opcje renderowania mogę zastosować do moich PDF?

IronPDF zapewnia rozległe opcje renderowania. Dodaj nagłówki i stopki, ustaw niestandardowe rozmiary papieru, kontroluj orientację stron i dodaj znaki wodne. ChromePdfRenderer oferuje ponad 50 właściwości do dostosowania generacji PDF.

Jak radzić sobie z błędami podczas generowania PDF?

Implementuj obsługę błędów dla solidnego generowania PDF:

try
{
    var html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
}
catch (Exception ex)
{
    // Log the error details
    IronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}");
    return Results.Problem("Failed to generate PDF", statusCode: 500);
}
try
{
    var html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
}
catch (Exception ex)
{
    // Log the error details
    IronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}");
    return Results.Problem("Failed to generate PDF", statusCode: 500);
}
Imports IronPdf
Imports System.Threading.Tasks

Public Class PdfGenerator
    Public Shared Async Function GeneratePdfAsync() As Task(Of IResult)
        Try
            Dim html = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")
            Dim renderer = New ChromePdfRenderer()
            Dim pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot")
            Return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")
        Catch ex As Exception
            ' Log the error details
            IronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}")
            Return Results.Problem("Failed to generate PDF", statusCode:=500)
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

Kiedy należy włączyć szczegółowe logowanie?

Szczegółowe logowanie należy włączyć podczas tworzenia aplikacji i rozwiązywania problemów. Logowanie IronPDF dostarcza wglądu w renderowanie, pomagając zidentyfikować problemy z parsowaniem HTML, ładowaniem zasobów lub konfiguracją. W środowisku produkcyjnym należy korzystać z niestandardowego logowania do integracji z infrastrukturą logowania aplikacji.

Dlaczego należy zmieniać ścieżki linków do zasobów?

Należy przejść do Views > Shared > "_Layout.cshtml". W etykietach link zmień "~/" na "./", ponieważ "~/" nie działa dobrze z IronPDF.

Na jakie inne problemy związane ze ścieżkami należy zwrócić uwagę?

Oprócz problemu ze ścieżką tyldy (~), upewnij się, że źródła obrazów używają ścieżek absolutnych lub prawidłowych odniesień względnych. Dla zewnętrznych zasobów używaj podstawowych adresów URL do zapewnienia prawidłowego ładowania zasobów. Dla obrazów z Azure Blob Storage zobacz osadzanie obrazów z Azure Blob Storage.

Jak statyczne zasoby wpływają na generowanie PDF?

Statyczne zasoby (CSS, JavaScript, obrazy) wpływają na wydajność i jakość generowania PDF. Upewnij się, że zasoby są dostępne podczas renderowania, używaj zoptymalizowanych obrazów i rozważ osadzanie krytycznego CSS inline dla szybszego renderowania. Dowiedz się o opóźnieniach renderowania i limitach czasowych dla treści z dużą ilością JavaScript.

Jak przetestować moje generowanie PDF bez interfejsu?

Uruchom projekt, aby wygenerować dokument PDF.

Visual Studio showing running ASP.NET Core MVC app with Program.cs open and successful debug output

Wynik w formacie PDF

Jak powinien wyglądać mój końcowy PDF?

Wygenerowany PDF powinien zachować formatowanie całego widoku Razor — struktury tabel, czcionki, kolory i układ. Powinien być odpowiednio dostosowany z czystymi marginesami i profesjonalnym wyglądem. Aby zweryfikować jakość wyników, należy użyć funkcji rasteryzacji IronPDF do podglądu stron jako obrazów.

Jak mogę rozwiązywać typowe problemy z renderowaniem PDF?

Typowe problemy to brakujące style, uszkodzone układy lub niekompletna treść. Włącz szczegółowe logowanie, zweryfikuj ścieżki zasobów i upewnij się, że HTML jest prawidłowo walidowany. Dla skomplikowanych układów użyj narzędzi do debugowania Chrome do podglądu HTML przed konwersją. Dla specyficznych problemów z renderowaniem użyj opóźnień WaitFor, aby zapewnić załadowanie treści przed renderowaniem.

Gdzie mogę pobrać kompletny działający przykład?

Pobierz kompletny kod jako spakowany projekt Visual Studio ASP.NET Core Web App (Model-View-Controller).

Kliknij tutaj, aby pobrać projekt.

Jakie są wymagania wstępne do uruchomienia przykładowego projektu?

Wymagany jest Visual Studio 2019 lub nowszy z .NET 6.0 SDK lub wyższym. Projekt wymaga połączenia z internetem do przywracania pakietów NuGet. Przed uruchomieniem należy zaktualizować klucz licencyjny IronPDF w Program.cs. Przy wdrożeniu warto przejrzeć przewodnik instalacji Windows.

Jak dostosować przykład do własnego przypadku użycia?

Przykład stanowi podstawę do rozbudowy. Można dodać dynamiczne modele danych, zaimplementować buforowanie dla często generowanych PDF lub zintegrować z istniejącą autoryzacją. W zaawansowanych scenariuszach warto zbadać asynchroniczne generowanie PDF w celu poprawy wydajności lub zaimplementować kompresję PDF do zmniejszenia rozmiaru plików. Można też dodać podpisy cyfrowe lub ochronę hasłem dla wrażliwych dokumentów.

Często Zadawane Pytania

Jak przekonwertować widoki Razor do formatu PDF bez interfejsu graficznego w języku C#?

Użyj Razor.Templating.Core do konwersji plików cshtml na HTML, a następnie użyj metody RenderHtmlAsPdf biblioteki IronPDF do generowania plików PDF w trybie bezinterfejsowym. Ten dwuetapowy proces pozwala przekształcić widoki Razor w dokumenty PDF bez konieczności korzystania z graficznego interfejsu użytkownika lub okna przeglądarki.

Jaki jest najszybszy sposób na renderowanie widoku Razor do formatu PDF bez użycia interfejsu graficznego?

Najszybszym sposobem jest użycie dwóch linii kodu: najpierw przekonwertuj widok Razor na HTML za pomocą RazorTemplateEngine.RenderAsync, a następnie użyj metody IronPDF ChromePdfRenderer().RenderHtmlAsPdf(html).SaveAs(), aby utworzyć i zapisać plik PDF.

Dlaczego warto używać Razor.Templating.Core zamiast IronPdf.Extensions.Razor?

Razor.Templating.Core zapewnia prawdziwe możliwości renderowania bezinterfejsowego, umożliwiając konwersję widoków Razor do formatu HTML bez kontekstu internetowego lub okna przeglądarki. Chociaż IronPdf.Extensions.Razor jest przydatny, do działania wymaga kontekstu internetowego, co sprawia, że Razor.Templating.Core lepiej nadaje się do usług działających w tle i aplikacji konsolowych.

Jakiego rodzaju projektu ASP.NET Core potrzebuję do generowania plików PDF w trybie headless?

Należy skorzystać z projektu aplikacji internetowej ASP.NET Core (Model-View-Controller), który zapewnia niezbędną infrastrukturę Razor View z elastycznymi opcjami wdrażania. Ta konfiguracja dobrze współpracuje z IronPDF w przypadku usług działających w tle, funkcji Azure lub aplikacji konsolowych.

Jak zainstalować pakiety wymagane do konwersji Razor do formatu PDF?

Zainstaluj Razor.Templating.Core za pomocą menedżera pakietów NuGet, używając polecenia „Install-Package Razor.Templating.Core”. Będziesz również potrzebować zainstalowanego w projekcie IronPDF, aby obsłużyć etap konwersji HTML do PDF.

Czy mogę używać tego podejścia do generowania plików PDF bez interfejsu użytkownika w środowiskach chmurowych?

Tak, bezinterfejsowa konwersja Razor do PDF firmy IronPDF doskonale sprawdza się w środowiskach chmurowych, w tym Azure Functions, AWS Lambda i aplikacjach kontenerowych, dzięki czemu idealnie nadaje się do skalowalnych usług generowania dokumentów.

Curtis Chau
Autor tekstów technicznych

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ę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,135,201 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.