TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #488 193
تبدیل Razor Views به HTML 🖥➡️📄

گام بعدی که نیاز داریم، راهی برای تبدیل Razor view به HTML است. می‌توانیم از کتابخانه Razor.Templating.Core استفاده کنیم. این کتابخانه یک API ساده ارائه می‌دهد تا فایل .cshtml را به یک رشته (string) تبدیل کند.
Install-Package Razor.Templating.Core

می‌توانید از کلاس static RazorTemplateEngine برای فراخوانی متد RenderAsync استفاده کنید. این متد مسیر Razor view و نمونه مدل (model) که به view منتقل می‌شود را می‌پذیرد.

نمونه کد:
Invoice invoice = invoiceFactory.Create();

string html = await RazorTemplateEngine.RenderAsync(
"Views/InvoiceReport.cshtml",
invoice);

همچنین می‌توانید به جای کلاس static از IRazorTemplateEngine استفاده کنید. در این حالت باید متد AddRazorTemplating را برای ثبت سرویس‌های مورد نیاز با DI فراخوانی کنید. این کار همچنین زمانی لازم است که بخواهید از dependency injection در داخل Razor views با @inject استفاده کنید. توصیه می‌شود بعد از ثبت تمام dependencies، AddRazorTemplating را فراخوانی کنید.
services.AddRazorTemplating();


تبدیل HTML به PDF 📄✨

حالا که Razor view ما به HTML تبدیل شد، می‌توانیم از آن برای تولید یک گزارش PDF استفاده کنیم. کتابخانه‌های زیادی این قابلیت را ارائه می‌دهند. کتابخانه‌ای که من بیشترین استفاده را از آن داشته‌ام IronPDF است. این یک کتابخانه پولی است (و واقعاً ارزشش را دارد)، اما می‌دانم توسعه‌دهندگان به گزینه‌های رایگان هم علاقه دارند، بنابراین چند گزینه رایگان را در انتها معرفی می‌کنم.

می‌توانیم از ChromePdfRenderer در IronPDF استفاده کنیم، که از مرورگر Chrome تعبیه‌شده استفاده می‌کند. این renderer متد RenderHtmlAsPdf را ارائه می‌دهد که یک PdfDocument تولید می‌کند. پس از داشتن سند، می‌توانید آن را در سیستم فایل ذخیره کنید یا به صورت داده باینری صادر کنید.
var renderer = new ChromePdfRenderer();

using var pdfDocument = renderer.RenderHtmlAsPdf(html);

pdfDocument.SaveAs($"invoice-{invoice.Number}.pdf");

اگر به دنبال گزینه‌های رایگان هستید، کتابخانه Puppeteer Sharp را بررسی کنید. این یک نسخه NET. از کتابخانه Puppeteer است و امکان اجرای headless Chrome را فراهم می‌کند.

گزینه دیگر که به صورت مشروط رایگان است، NReco.PdfGenerator می‌باشد، اما تنها برای استقرار روی یک سرور (single-server) رایگان است.

ترکیب همه چیز با هم 🛠

بیایید همه مواردی که بررسی کردیم را استفاده کنیم تا یک Minimal API endpoint برای تولید گزارش PDF فاکتور بسازیم و آن را به صورت فایل بازگردانیم.
app.MapGet("invoice-report", async (InvoiceFactory invoiceFactory) =>
{
Invoice invoice = invoiceFactory.Create();

var html = await RazorTemplateEngine.RenderAsync(
"Views/InvoiceReport.cshtml",
invoice);

var renderer = new ChromePdfRenderer();

using var pdfDocument = renderer.RenderHtmlAsPdf(html);

return Results.File(
pdfDocument.BinaryData,
"application/pdf",
$"invoice-{invoice.Number}.pdf");
});

این همان PDF گزارش تولید شده است که خروجی می‌دهد: 📄✅
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →