ASP.NET Core中的PDF查看器:使用C#內嵌顯示PDF
在 ASP.NET Core 應用程式中建立 PDF 檢視器比大多數開發人員想像的要容易。 透過在伺服器端產生 PDF 並以正確的 MIME 類型返回,您可以直接在任何現代瀏覽器中顯示文件——無需插件,也無需 Adobe Acrobat Reader。 IronPDF 透過其基於 Chrome 的引擎處理渲染,將 HTML、CSS 和 JavaScript 轉換為高保真 PDF,這些 PDF 會以內聯方式顯示在瀏覽器的內建檢視器中。
本教學將引導您完成所有主要場景:顯示由 HTML 字串產生的 PDF、渲染即時 網址、轉換 Razor 視圖、串流大型文件,以及將所有內容連接到 ASP.NET Core MVC 控制器中。 程式碼範例針對 .NET 10,並在適用情況下使用頂級語句。
ASP.NET 中基於瀏覽器的 PDF 檢視功能是如何運作的?
現代瀏覽器都內建了 PDF 檢視器。 當伺服器回應 Content-Type: application/pdf 標頭時,瀏覽器會將文件內聯渲染,而不是觸發文件下載。 關鍵是將該標頭與 Content-Disposition: inline 配對。
在伺服器端,你的任務是產生一個有效的 PDF 二進位文件,並透過 FileResult 傳回它。 瀏覽器會自動處理分頁、縮放、文字選擇、搜尋、列印和下載等功能,無需您編寫任何額外的使用者介面程式碼。
IronPDF 自然而然地契合了這種模式。 它的 ChromePdfRenderer 類別將 HTML(或實時 網址)轉換為 PDF 二進位文件,然後您可以將該二進位文件直接傳遞給 ASP.NET 的 File() 助手。 最終成果是一個功能齊全的文件檢視器,可在 Chrome、Firefox、Edge 和 Safari 瀏覽器上運作。
現代瀏覽器透過其原生檢視器引擎實現了W3C PDF 渲染規範,這意味著您的伺服器傳回的任何符合規範的 PDF 檔案都將正確顯示,無需額外配置。 IronPDF 的輸出完全符合標準,因此您可以信賴跨瀏覽器版本的一致渲染效果。
對於容器化部署,IronPDF 提供官方 Docker 映像,其中預先配置了 Chromium 依賴項,因此您無需在每個節點上手動安裝 Chrome。 Linux 和 Windows 容器均支援。 如果您需要獨立擴充 PDF 生成, IronPDF Engine Docker 映像可讓您將渲染流程作為單獨的微服務運作。
如何在 ASP.NET Core 專案中安裝 IronPDF?
在 Visual Studio 中開啟您的 ASP.NET Core 項目,然後透過 NuGet 套件管理器控制台安裝 IronPDF:
Install-Package IronPdf
Install-Package IronPdf
或使用 .NET CLI:
dotnet add package IronPdf
dotnet add package IronPdf
安裝完成後,請在呼叫任何 IronPDF API 之前,將您的許可證金鑰新增至 Program.cs:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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");
}
}
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
瀏覽器中渲染後的 PDF 檔案是什麼樣子的?
ChromePdfRenderer 底層使用 Chromium,因此 CSS 網格、彈性盒、網頁字體和現代 CSS 功能都能準確渲染。 將 Content-Disposition 設定為 inline 可以告訴瀏覽器顯示檔案而不是儲存檔案。 如果將該值變更為 attachment,瀏覽器將提示使用者下載。
對於佈局複雜的文檔,您可以透過自訂紙張尺寸、邊距和列印 CSS 媒體類型等渲染選項來微調輸出。 WaitFor API在容器化環境中尤其有用,因為網路延遲可能會延遲外部資源的載入。
若要深入了解 HTML 轉換選項,請參閱HTML 字串轉 PDF 指南。
如何透過 網址 和 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
基於網址的PDF渲染是如何顯示的?
! 這是使用 IronPDF 在 ASP.NET Web 應用程式中渲染的維基百科首頁的 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
Razor View 產生 PDF 的結果是什麼?
! 網頁瀏覽器中顯示的 PDF 發票,發票編號為 1001,寄件人為 Acme 公司,包含兩項,總計 250.00 美元,表示 Razor 視圖到 PDF 的轉換已成功完成。
當 Razor 視圖引用相對 CSS 或圖像路徑時,baseUrl 參數很重要。 傳遞目前主機 網址 可以讓 IronPDF 正確解析這些路徑。 請參閱Razor 轉 PDF 教程,以了解包括 Blazor 應用程式模式在內的完整演練過程。
如何處理串流中的大型 PDF 檔案?
對於大小可能達到幾兆位元組的文檔,串流可以降低峰值記憶體使用量,並更快地將位元組傳輸到客戶端。 對於原始位元組數組,請使用 FileStreamResult 而不是 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
將 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
對於同時產生大量 PDF 的工作負載,請查看IronPDF 非同步 API 指南和效能最佳化參考,以了解在高吞吐量場景下減少記憶體開銷的設定。
基於瀏覽器的檢視器能為使用者提供哪些功能?
當瀏覽器以內嵌方式顯示 PDF 檔案時,它會自動開啟一個功能齊全的 PDF 檢視器。 您的用戶可以進行文字選擇以複製內容,使用內建搜尋欄來尋找特定單字或數字,使用列印控件,以及一鍵下載——所有這些都無需您編寫任何前端程式碼。
除了基本檢視功能外,IronPDF 還支援多種文件功能,這些功能會影響使用者在檢視器中看到的內容:
- 帶有動態文字、頁碼和日期的頁首和頁尾
- 用於草稿或機密標記的自訂浮水印
- 使用者可以直接在瀏覽器中填寫的互動式表單字段
- 用於文件認證的數位簽名
- 符合長期存檔要求的 PDF/A 規範
- 對受限存取權限進行加密和密碼保護
下表總結了庫中提供的主要轉換方法以及每種方法的適用場景:
| 方法 | 輸入 | 最適合 |
|---|---|---|
RenderHtmlAsPdf |
HTML字串 | 範本化文件、發票、報告 |
RenderUrlAsPdf |
網址 | 網頁存檔,即時內容快照 |
RenderHtmlAsPdf + Razor |
渲染後的視圖 HTML | 將現有的 MVC 範本重用於 PDF 格式。 |
RenderHtmlFileAsPdf |
本機 HTML 文件 | 儲存在磁碟上的靜態模板 |
對於容器化部署,IronPDF 還提供遠端引擎支持,因此您可以將 PDF 生成作為專用微服務運行。請參閱記憶體最佳化指南,以了解針對資源受限環境的最佳化設定。
如需全面了解各項功能,請造訪IronPDF 功能頁面。
IronPDF 支援哪些格式和編輯選項?
IronPDF的功能遠遠超過基本的渲染。 您可以使用以下選項為每個文件新增結構和品牌標識。
頁面佈局控制包括自訂紙張尺寸、方向設定和邊距配置。 排版支援涵蓋透過 CSS 聲明進行完整的 Web 字體渲染,這表示文件與您的品牌字體完全匹配。 您也可以將圖像嵌入 PDF 頁面中並調整其大小,從而完全控制視覺效果。
對於文件操作,IronPDF 可讓您合併或分割現有 PDF、新增或刪除單一頁面,以及以程式設計擷取文字和影像。 在捕獲之前執行 JavaScript 支援動態圖表和資料視覺化——這在生成依賴Chart.js或D3.js等客戶端渲染庫的報告時非常有用。
這些功能意味著您可以直接從應用程式產生精美、可直接列印的文檔,而無需單獨的文檔處理層。
如果您需要接收使用者上傳的 PDF 檔案並將其與生成的 PDF 檔案一起顯示,IronPDF 讀取現有 PDF 二進位與建立新檔案一樣簡單。 使用 PdfDocument.FromFile() 載入文件,並透過同一個 File() 助手返回其 BinaryData。
請參閱C# 編輯 PDF 教程,以了解有關編輯、註釋和修改現有文件的詳細步驟。
IronPDF 與其他方法相比有何優勢?
IronPDF 伺服器端方法的兩種最常見的替代方案是嵌入客戶端 PDF 檢視器庫(例如PDF.js ,Mozilla 的開源檢視器)和將使用者路由到單獨的文件管理系統。
像 PDF.js 這樣的客戶端檢視器對於簡單的顯示場景效果很好,但需要自行提供檢視器 JavaScript 套件、處理外部 PDF 的 CORS 以及管理瀏覽器相容性。 使用 IronPDF 的伺服器端產生功能,使 PDF 管道完全位於 .NET 堆疊上,從而簡化了安全性策略並避免了跨網域複雜性。
專用文件管理系統會增加大多數 Web 應用程式不需要的維運開銷。 對於已經運行 ASP.NET Core 的團隊來說,直接從控制器產生和串流 PDF 是阻力最小的途徑。
下一步計劃是什麼?
在 ASP.NET Core Web 應用程式中顯示 PDF 檔案只需要幾行程式碼。 使用 ChromePdfRenderer 產生 PDF,設定 Content-Disposition: inline,並返回 FileResult -- 瀏覽器的內建檢視器處理其他一切。
對於生產環境部署,請考慮以下步驟來準備您的設定:
- 設定自訂日誌記錄,以追蹤 PDF 產生時間和錯誤率
- 對頻繁請求的 PDF 檔案實施緩存,以減少 Chromium 的啟動開銷
- 使用IronPDF Engine Docker 映像,將渲染規模與 Web 層分開。 檢查PDF 壓縮選項,以控制回應檔案的大小。
準備好為您的專案添加 PDF 查看功能了嗎? 首先進行免費試用,幾分鐘內即可運行上述範例。 準備部署時,請查看適合您團隊規模和使用情況的授權選項。 若要探索相關的轉換,請瀏覽 IronPDF 的操作指南庫,以了解其如何處理DOCX 到 PDF 、影像到 PDF以及其他格式的轉換。
!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--
常見問題解答
如何在 ASP.NET Web 應用程式中建立 PDF 檢視器?
您可以使用 IronPDF 在 ASP.NET Web 應用程式中建立 PDF 檢視器。它可讓您直接在應用程式中顯示 PDF 文件,提供無縫的檢視體驗,而不需要 Adobe Acrobat Reader 等外部工具。
在 ASP.NET 中使用 IronPDF 檢視 PDF 有哪些好處?
IronPDF 在 ASP.NET 應用程式中提供流暢且整合的 PDF 檢視體驗。它允許您以內嵌方式顯示文件,支援各種檔案類型,而且不需要第三方 PDF 檢視器,提升了使用者體驗。
我可以在 ASP.NET Web 應用程式中顯示互動式 PDF 表單嗎?
是的,使用 IronPDF,您可以在 ASP.NET Web 應用程式中顯示互動式 PDF 表單。它支援表單欄位和互動元素的渲染,讓使用者可以直接在瀏覽器中與文件互動。
是否可以在 ASP.NET 中使用 IronPDF 展示發票和報表?
IronPDF 絕對適合在 ASP.NET 應用程式中顯示發票、報表和其他文件類型。它可以確保您的文件在 Web 應用程式中準確且有效率地呈現。
在使用 IronPDF 的 ASP.NET 應用程式中檢視 PDF 是否需要 Adobe Acrobat Reader?
不,使用 IronPDF for .NET 時,您不需要 Adobe Acrobat Reader 來在 ASP.NET 應用程式中檢視 PDF。它允許您直接在瀏覽器中渲染和檢視 PDF,而不需要第三方依賴。



