IRONSOFTWAREHOME
使用IRONPDF

在ASP.NET Core中使用C#將HTML轉換為PDF -- IronPDF指南

Curtis Chau
Curtis Chau
Updated: 2026年6月20日

將PDF檢視器內建到ASP.NET Core應用程式中比大多數開發人員想像的更容易。 透過在伺服器端產生PDF並回傳正確的MIME型別,您可以在任何現代瀏覽器中直接顯示文件──不需要插件,不需要Adobe Acrobat Reader。 IronPDF透過其基於Chrome的引擎處理渲染,將HTML、CSS和JavaScript轉換成高保真的PDF,並在瀏覽器的內建檢視器中內嵌顯示。

本教程引導您完成每個主要場景:顯示從HTML字串生成的PDF、渲染即時URL、轉換Razor視圖、串流大型檔案,並在ASP.NET Core MVC控制器中完成所有連結。 程式碼範例針對.NET 10,其中適用時使用頂層語句。

在ASP.NET中基於瀏覽器的PDF檢視是如何工作的?

現代瀏覽器配有內建的PDF檢視器。 當伺服器回應Content-Type: application/pdf標頭時,瀏覽器會將文件內嵌渲染,而不是觸發檔案下載。 關鍵在於將該標頭與Content-Disposition: inline配對。

在伺服器端,您的任務是生成有效的PDF二進位文件並透過FileResult回傳。 瀏覽器處理分頁、縮放、文字選擇、搜尋、列印和下載,而您不需要額外的UI程式碼。

IronPDF自然符合這種模式。 其File()助手。 結果是完全功能的文件檢視器,適用於Chrome、Firefox、Edge和Safari。

現代瀏覽器透過其原生檢視器引擎實現W3C PDF渲染規範,這意味著您的伺服器回傳的任何合格PDF都將正確顯示,無需額外配置。 IronPDF的輸出完全符合標準,因此您可以依賴於不同瀏覽器版本間的一致渲染。

對於容器化部署,IronPDF提供官方Docker映像,預配置Chromium依賴項,避免您需要在每個節點上手動安裝Chrome。 Linux和Windows容器均受支持。 如果您需要獨立擴展PDF生成,IronPDF引擎Docker映像可讓您將渲染過程運行為單獨的微服務。

您如何在ASP.NET Core專案中安裝IronPDF?

在Visual Studio中打開您的ASP.NET Core專案,然後透過NuGet包管理器主控台安裝IronPDF:

PM > Install-Package IronPdf

或使用.NET CLI:

dotnet add package IronPdf

安裝完成後,將您的授權金鑰新增到Program.cs中,然後再調用任何IronPDF API:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

如果您正在部署到Azure,請將授權金鑰儲存在Azure Key Vault或應用配置中,而不是硬編碼。 對於AWS Lambda部署,使用配置在Lambda函式設置中的環境變數。

這就是整個設置過程。IronPDF會自動在Windows上於運行時檢測並配置Chromium。 在Linux上,請參閱Linux設置指南以獲取所需的系統包。

您可以免費試用以評估完整功能集,然後再選擇生產授權等級。

您如何從HTML字串生成和顯示PDF?

將PDF呈現在使用者面前的最快方法是渲染HTML字串並內嵌返回。建立一個名為PdfController的控制器並新增如下操作:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();

var app = builder.Build();
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();

public class PdfController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public PdfController()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.WaitFor.RenderDelay(100);
        _renderer.RenderingOptions.Timeout = 30;
    }

    public IActionResult DisplayFromHtml()
    {
        string html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; padding: 40px; }
                    h1   { color: #2c3e50; }
                    p    { line-height: 1.7; color: #444; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p>This PDF was generated using IronPDF in an ASP.NET Core application.</p>
            </body>
            </html>";

        PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        Response.Headers.Append("Content-Disposition", "inline; filename=document.pdf");
        return File(pdf.BinaryData, "application/pdf");
    }
}

渲染的PDF在瀏覽器中顯示為什麼樣子?

瀏覽器顯示一個標題為

ChromePdfRenderer在底層使用Chromium,因此CSS網格、flexbox、網頁字體和現代CSS功能均正確渲染。 設置inline告訴瀏覽器顯示文件而不是保存它。 如果您將該值改為attachment,瀏覽器會提示使用者下載。

對於具有複雜布局的文件,您可以通過渲染選項微調輸出,如自定義紙張大小、邊距和印刷CSS媒體型別。 WaitFor API特別適合在網路延遲可能延遲外部資產載入的容器化環境中使用。

要深入了解HTML轉換選項,請參閱HTML字串轉PDF指南

您如何從URL和Razor視圖渲染PDF文件?

IronPDF可以捕獲任何即時網頁作為PDF——非常適合存檔網頁內容或從現有頁面生成報告。 ASP.NET Core文件涵蓋了控制器操作返回結果的模式,本模式在此使用。

public IActionResult RenderFromUrl(string url = "https://en.wikipedia.org/wiki/Main_Page")
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    renderer.RenderingOptions.WaitFor.NetworkIdle();

    PdfDocument pdf = renderer.RenderUrlAsPdf(url);

    Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf");
    Response.Headers.Append("Cache-Control", "public, max-age=3600");
    return File(pdf.BinaryData, "application/pdf");
}

基於URL的PDF渲染如何顯示?

ASP.NET web應用使用IronPDF渲染維基百科首頁的PDF檢視器截圖,顯示主頁內容和導航元素,完全保留CSS樣式

當您需要轉換Razor視圖——如發票或報表範本時,首先將視圖渲染為HTML字串,然後將該字串傳給IronPDF。 這使得您的範本在網頁及PDF輸出上皆可重用:

public async Task<IActionResult> ViewToPdf()
{
    var model = new InvoiceModel
    {
        InvoiceNumber = 1001,
        InvoiceDate   = DateTime.Now,
        CustomerName  = "Acme Corp.",
        Items = new List<ItemModel>
        {
            new ItemModel { Description = "Product A", Quantity = 2, UnitPrice = 50.00m },
            new ItemModel { Description = "Service B", Quantity = 1, UnitPrice = 150.00m }
        }
    };
    model.TotalAmount = model.Items.Sum(i => i.LineTotal);

    string htmlContent = await RenderViewToStringAsync("Invoice", model);

    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop    = 40;
    renderer.RenderingOptions.MarginBottom = 40;

    string baseUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}";
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrl);

    return File(pdf.BinaryData, "application/pdf");
}

private async Task<string> RenderViewToStringAsync(string viewName, object model)
{
    var actionContext = new ActionContext(
        HttpContext, RouteData, ControllerContext.ActionDescriptor);

    var viewEngine      = HttpContext.RequestServices.GetRequiredService<IRazorViewEngine>();
    var tempDataFactory = HttpContext.RequestServices.GetRequiredService<ITempDataDictionaryFactory>();
    var tempData        = tempDataFactory.GetTempData(HttpContext);

    ViewData.Model = model;

    var viewResult = viewEngine.FindView(actionContext, viewName, isMainPage: false);
    if (!viewResult.Success)
    {
        string searched = string.Join(
            Environment.NewLine,
            viewResult.SearchedLocations ?? Array.Empty<string>());
        throw new InvalidOperationException(
            $"Could not find view '{viewName}'. Searched:{Environment.NewLine}{searched}");
    }

    await using var writer      = new StringWriter();
    var             viewContext = new ViewContext(
        actionContext, viewResult.View, ViewData, tempData,
        writer, new HtmlHelperOptions());

    await viewResult.View.RenderAsync(viewContext);
    return writer.ToString();
}

Razor視圖PDF生成的結果是什麼?

PDF invoice displayed in a web browser showing Invoice #1001 for Acme Corp with two line items totaling $250.00, demonstrating successful Razor view to PDF conversion

當您的Razor視圖引用相對CSS或圖像路徑時,baseUrl參數很重要。 傳遞當前主機URL可讓IronPDF正確解析這些路徑。 查看Razor到PDF教程以獲得完整的步驟,包括Blazor應用模式。

您如何通過流式處理處理大型PDF文件?

對於可能大小達幾MB的文件,流式處理可以減少峰值記憶體使用量並更早地開始傳遞位元組給使用者端。 使用File()和一個原始位元組陣列:

public async Task<IActionResult> StreamLargePdf()
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CreatePdfFormsFromHtml = false;

    PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(
        "<h1>Large Document</h1><p>Full content here...</p>");

    pdf.CompressImages(80);

    var stream = new MemoryStream(pdf.BinaryData);

    Response.Headers.Append("Content-Length", pdf.BinaryData.Length.ToString());
    Response.Headers.Append("Accept-Ranges",  "bytes");

    return new FileStreamResult(stream, "application/pdf");
}

CompressImages(80)將JPEG品質減少到80%,從而顯著降低文件大小,尤其是含大量圖片的文件,並可見質量損失很小。 設置Accept-Ranges: bytes告訴瀏覽器它可以請求位元組範圍的塊,以便在大PDF中更快地尋找,而不必先下載整個文件。

ISO制定的PDF/A規範定義了存檔品質的PDF要求。 如果您的應用需要生成長期存檔文件,IronPDF的PDF/A合規模式確保輸出符合這些標準,這對於合規或法律工作流程尤為重要。

對於傳統ASP.NET Web Forms專案,模式稍有不同,因為您直接將內容寫入HTTP響應:

protected void btnGeneratePdf_Click(object sender, EventArgs e)
{
    using var renderer = new ChromePdfRenderer();
    PdfDocument pdf    = renderer.RenderHtmlAsPdf("<h1>Web Form PDF</h1>");
    Response.ContentType = "application/pdf";
    Response.BinaryWrite(pdf.BinaryData);
    Response.End();
}

對於同時生成許多PDF的工作負載,查閱IronPDF非同步API指南性能優化參考以獲得在高吞吐量情況下減少記憶體負擔的設置。

基於瀏覽器的檢視器給您的使用者帶來哪些功能?

當瀏覽器內嵌顯示PDF時,它會自動提供一個功能齊全的檢視器。 您的使用者可以選擇文字以複製內容、有內建搜尋欄來定位特定單字或數字、列印控制和一鍵下載——都無需您撰寫任何前端程式碼。

除了基本檢視,IronPDF支援一系列影響使用者在檢視器中觀看的文件功能:

下表總結了該程式庫中可用的主要轉換方法及何時使用它們:

IronPDF轉換方法及推薦使用案例
方法輸入最佳適用於
RenderHtmlAsPdfHTML字串範本文件、發票、報告
RenderUrlAsPdfURL網頁存檔、即時內容快照
RenderHtmlAsPdf + Razor渲染視圖HTML重用現有MVC範本作為PDF
RenderHtmlFileAsPdf本地HTML文件儲存在磁碟上的靜態範本

對於容器化部署,IronPDF還提供遠程引擎支持,這樣您可以作為獨立微服務運行PDF生成。檢閱記憶體優化指南以獲得針對受限資源環境的設置。

如需完整功能概覽,請存取IronPDF功能頁面

IronPDF支持哪些格式化和編輯選項?

IronPDF遠超於基礎渲染。 您可以使用下列選項為每份文件新增結構和品牌標誌。

頁面佈局控制包括自定義紙張大小、方向設置和邊距配置。 字體排列支持透過CSS @font-face聲明進行全網站字體渲染,意味著文件與您的品牌字體精確匹配。 您還可以在PDF頁面中嵌入和調整圖像大小,以便於完全控制視覺逼真度。

對於文件操作,IronPDF允許您合併或拆分現有PDF,新增或移除單獨頁面,以及程式性地提取文字和圖像。 在擷取前執行JavaScript支持動態圖表和資料視覺化——當生成依賴於Chart.jsD3.js等使用者端渲染庫的報告時特別有用。

這些能力意味著您可以直接從應用中生成精美的、準備列印的文件,而不需要額外的文件處理層。

若需接受使用者上傳的PDF並將它們與生成的文件一起顯示,IronPDF讀取現有PDF二進位檔案就如同建立新文件一樣簡單。 使用File()

請參閱C#編輯PDF教程以獲得有關編輯、註解和修改現有文件的詳細說明。

相比其他方法,IronPDF怎樣?

相較於IronPDF伺服器端方法的兩個最常見替代方案是嵌入使用者端PDF檢視程式庫(如PDF.js,Mozilla的開源檢視器)和將使用者導向到獨立文件管理系統內。

像PDF.js這樣的使用者端檢視器適用於簡單顯示情況,但需要服務檢視程式JavaScript包、處理外部PDF的CORS以及自行管理瀏覽器相容性。 使用IronPDF的伺服器端生成將PDF流水線完全保留在.NET堆疊中,簡化了安全政策並避免了跨源複雜性。

專用的文件管理系統增加了大多數網頁應用無需的操作負擔。 對於已運行ASP.NET Core的團隊,直接從控制器生成和串流PDF是最少阻力的方式。

下一步如何?

在ASP.NET Core web應用中顯示PDF只需幾行程式碼。 使用FileResult——瀏覽器的內建檢視器處理其他一切。

對於生產部署,請考慮以下步驟以準備您的設置:

準備將PDF檢視新增到您的專案了嗎? 開始使用免費試用版,幾分鐘內運行上述範例。 準備好部署時,檢閱適合您團隊規模和使用情況的授權選項。 要探索相關轉換,瀏覽IronPDF處理DOCX到PDF圖像到PDF及其他格式的指南庫

第一步:
arrow pointer
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立