using IronPDF 的无头转换功能将 Razor 视图转换为 PDF。 使用IronPdf.HtmlToPdf.StaticRender.RenderHtmlAsPdf将Razor视图中的HTML渲染为PDF。 这种方法可在 ASP.NET Core 环境中无缝运行。
1Install IronPDF with NuGet Package Manager
PM > Install-Package IronPdf
Install-Package IronPdf
2复制并运行这段代码。
var html = awaitRazorTemplateEngine.RenderAsync("Views/Template.cshtml", model); newIronPdf.ChromePdfRenderer().RenderHtmlAsPdf(html).SaveAs("output.pdf");
var html = await RazorTemplateEngine.RenderAsync("Views/Template.cshtml", model);
new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf(html).SaveAs("output.pdf");
app.MapGet("/PrintPdf", async () =>{ // Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"; // Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All; // Render the Razor view to an HTML string string html = awaitRazorTemplateEngine.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 returnResults.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");
});
ImportsIronPdfImportsMicrosoft.AspNetCore.Httpapp.MapGet("/PrintPdf", Async Function() AsTask(OfIResult) ' Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01" ' Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All ' Render the Razor view to an HTML string Dim html AsString = AwaitRazorTemplateEngine.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 AsPdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot") ' Return the PDF file as a response ReturnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")End Function)
Imports IronPdf
Imports Microsoft.AspNetCore.Http
app.MapGet("/PrintPdf", Async Function() As Task(Of IResult)
' 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)
try{ var html = awaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml"); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot"); returnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");}catch (Exception ex){ // Log the error detailsIronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}"); returnResults.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);
}
ImportsIronPdfImportsSystem.Threading.TasksTry Dim html = AwaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml") Dim renderer As New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot") ReturnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")Catch ex AsException ' Log the error detailsIronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}") ReturnResults.Problem("Failed to generate PDF", statusCode:=500)EndTry
Imports IronPdf
Imports System.Threading.Tasks
Try
Dim html = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")
Dim renderer As 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
何时应启用详细日志记录?
确保在开发和故障排除过程中记录详细日志。 IronPDF 的日志记录可以深入了解渲染情况,帮助识别 HTML 解析、资产加载或配置问题。 对于生产,请使用自定义日志与应用程序的日志基础架构集成。
我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。
using ASP.NET Core Web App(模型-视图-控制器)项目,该项目提供了必要的 Razor View 基础架构和灵活的部署选项。这种设置与 IronPDF 的后台服务、Azure Functions或控制台应用程序配合使用效果很好。
如何安装 Razor to PDF 转换所需的软件包?
using NuGet 软件包管理器,使用 "Install-Package Razor.Templating.Core "命令安装 Razor.Templating.Core。你还需要在项目中安装 IronPDF,以处理 HTML 到 PDF 的转换步骤。
我能否在云环境中使用这种无头 PDF 生成方法?
是的,IronPDF 的无头 Razor 至 PDF 转换可在云环境中出色地运行,包括 Azure Functions、AWS Lambda 和容器化应用程序,使其成为可扩展文档生成服务的理想选择。
What are the key considerations for styling HTML content for PDF rendering?
When styling HTML for PDF, focus on using print-specific CSS, fixed pixel values, and embedded fonts to ensure consistent rendering, as well as defining margins and breaks appropriately for professional output.
How can static assets impact PDF generation with IronPDF?
Static assets such as CSS, JavaScript, and images influence the quality and speed of PDF rendering. Ensuring assets are accessible and optimized is crucial for consistent performance and visual accuracy.
What should you do if asset paths cause issues in PDF rendering?
Ensure asset paths are correctly formatted, avoiding problematic paths like '~/' and using absolute or properly relative path references to guarantee that all resources load during the rendering process.
What are the prerequisites for running the sample Razor to PDF conversion project?
To run the sample project, you need Visual Studio 2019 or later with the .NET 8.0 SDK and an active internet connection for NuGet package restoration. Additionally, update your IronPDF license key in the code.