跳至頁尾內容
使用IRONPDF

如何在ASP.NET Core中將HTML轉為PDF

將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:

Install-Package IronPdf

或使用.NET CLI:

dotnet add package IronPdf

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

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

如果您正在部署到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");
    }
}
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");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()

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

Public Class PdfController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        _renderer.RenderingOptions.WaitFor.RenderDelay(100)
        _renderer.RenderingOptions.Timeout = 30
    End Sub

    Public Function DisplayFromHtml() As IActionResult
        Dim html As String = "
            <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>"

        Dim pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)

        Response.Headers.Append("Content-Disposition", "inline; filename=document.pdf")
        Return File(pdf.BinaryData, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

渲染的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");
}
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");
}
Public Function RenderFromUrl(Optional url As String = "https://en.wikipedia.org/wiki/Main_Page") As IActionResult
    Dim renderer As New ChromePdfRenderer()
    renderer.RenderingOptions.EnableJavaScript = True
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    renderer.RenderingOptions.WaitFor.NetworkIdle()

    Dim pdf As PdfDocument = 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")
End Function
$vbLabelText   $csharpLabel

基於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();
}
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();
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.ViewEngines
Imports Microsoft.AspNetCore.Mvc.Rendering
Imports Microsoft.AspNetCore.Mvc.ViewFeatures
Imports Microsoft.Extensions.DependencyInjection
Imports IronPdf

Public Class YourController
    Inherits Controller

    Public Async Function ViewToPdf() As Task(Of IActionResult)
        Dim model As New InvoiceModel With {
            .InvoiceNumber = 1001,
            .InvoiceDate = DateTime.Now,
            .CustomerName = "Acme Corp.",
            .Items = New List(Of ItemModel) From {
                New ItemModel With {.Description = "Product A", .Quantity = 2, .UnitPrice = 50.0D},
                New ItemModel With {.Description = "Service B", .Quantity = 1, .UnitPrice = 150.0D}
            }
        }
        model.TotalAmount = model.Items.Sum(Function(i) i.LineTotal)

        Dim htmlContent As String = Await RenderViewToStringAsync("Invoice", model)

        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.MarginTop = 40
        renderer.RenderingOptions.MarginBottom = 40

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

        Return File(pdf.BinaryData, "application/pdf")
    End Function

    Private Async Function RenderViewToStringAsync(viewName As String, model As Object) As Task(Of String)
        Dim actionContext As New ActionContext(HttpContext, RouteData, ControllerContext.ActionDescriptor)

        Dim viewEngine As IRazorViewEngine = HttpContext.RequestServices.GetRequiredService(Of IRazorViewEngine)()
        Dim tempDataFactory As ITempDataDictionaryFactory = HttpContext.RequestServices.GetRequiredService(Of ITempDataDictionaryFactory)()
        Dim tempData As ITempDataDictionary = tempDataFactory.GetTempData(HttpContext)

        ViewData.Model = model

        Dim viewResult As ViewEngineResult = viewEngine.FindView(actionContext, viewName, isMainPage:=False)
        If Not viewResult.Success Then
            Dim searched As String = String.Join(Environment.NewLine, viewResult.SearchedLocations ?? Array.Empty(Of String)())
            Throw New InvalidOperationException($"Could not find view '{viewName}'. Searched:{Environment.NewLine}{searched}")
        End If

        Await Using writer As New StringWriter()
            Dim viewContext As New ViewContext(actionContext, viewResult.View, ViewData, tempData, writer, New HtmlHelperOptions())

            Await viewResult.View.RenderAsync(viewContext)
            Return writer.ToString()
        End Using
    End Function
End Class

Public Class InvoiceModel
    Public Property InvoiceNumber As Integer
    Public Property InvoiceDate As DateTime
    Public Property CustomerName As String
    Public Property Items As List(Of ItemModel)
    Public Property TotalAmount As Decimal
End Class

Public Class ItemModel
    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
$vbLabelText   $csharpLabel

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");
}
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");
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Class YourController
    Inherits Controller

    Public Async Function StreamLargePdf() As Task(Of IActionResult)
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.CreatePdfFormsFromHtml = False

        Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync("<h1>Large Document</h1><p>Full content here...</p>")

        pdf.CompressImages(80)

        Dim stream As 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")
    End Function
End Class
$vbLabelText   $csharpLabel

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();
}
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();
}
Protected Sub btnGeneratePdf_Click(sender As Object, e As EventArgs)
    Using renderer As New ChromePdfRenderer()
        Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Web Form PDF</h1>")
        Response.ContentType = "application/pdf"
        Response.BinaryWrite(pdf.BinaryData)
        Response.End()
    End Using
End Sub
$vbLabelText   $csharpLabel

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

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

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

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

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

IronPDF轉換方法及推薦使用案例
方法 輸入 最佳適用於
RenderHtmlAsPdf HTML字串 範本文件、發票、報告
RenderUrlAsPdf URL 網頁存檔、即時內容快照
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及其他格式的指南庫

現在開始使用IronPDF。
green arrow pointer

常見問題

如何在ASP.NET網路應用程式中建立PDF檢視器?

您可以使用IronPDF在ASP.NET網路應用程式中建立PDF檢視器。它使您能夠直接在應用程式內顯示PDF文件,提供無縫的檢視體驗,不需要像Adobe Acrobat Reader這樣的外部工具。

使用IronPDF在ASP.NET中進行PDF檢視有哪些好處?

IronPDF在ASP.NET應用程式中提供了平滑而整合的PDF檢視體驗。它允許您內嵌顯示文件,支持各種文件型別,並消除了對第三方PDF檢視器的需求,提高了使用者體驗。

我可以在我的ASP.NET網路應用程式中顯示互動式PDF表單嗎?

可以,使用IronPDF,您可以在ASP.NET網路應用程式中顯示互動式PDF表單。它支持表單欄位和互動元素的渲染,允許使用者直接在瀏覽器中與文件互動。

是否可以使用IronPDF在ASP.NET中展示發票和報告?

絕對可以,IronPDF非常適合在ASP.NET應用程式中顯示發票、報告和其他文件型別。它確保您的文件在網路應用程式中準確和高效地渲染。

在使用IronPDF的ASP.NET應用程式中查看PDF是否需要Adobe Acrobat Reader?

不,使用IronPDF在ASP.NET應用程式中查看PDF不需要Adobe Acrobat Reader。它允許您直接在瀏覽器中渲染和查看PDF,無需第三方依賴性。

Curtis Chau
技術作家

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

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話