ASP.NET Core에서 PDF 뷰어: C#로 인라인으로 PDF 표시하기
ASP.NET Core 응용 프로그램에 PDF 뷰어를 구축하는 것은 대부분의 개발자들이 예상하는 것보다 쉽습니다. 서버-측에서 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는 이러한 패턴에 자연스럽게 맞습니다. 그것의 ChromePdfRenderer 클래스는 HTML(또는 라이브 URL)을 PDF 바이너리로 변환하며, 그 바이너리를 ASP.NET의 File() 도우미에 직접 전달합니다. 결과는 Chrome, Firefox, Edge 및 Safari에서 작동하는 완전히 기능적인 문서 뷰어입니다.
최신 브라우저는 네이티브 뷰어 엔진을 통해 W3C PDF 렌더링 사양을 구현하므로 서버가 반환하는 모든 적합한 PDF는 추가 구성 없이 올바르게 표시됩니다. IronPDF의 출력물은 완전히 표준을 준수하므로 브라우저 버전 전반에 걸쳐 일관된 렌더링에 의존할 수 있습니다.
컨테이너 배포를 위해 IronPDF는 Chrome을 수동으로 설치할 필요 없이 Chromium 종속성을 사전 구성하는 공식 Docker 이미지를 제공합니다. Linux 및 Windows 컨테이너가 모두 지원됩니다. PDF 생성을 독립적으로 확장해야 하는 경우, IronPDF 엔진 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로 변환 가이드를 참조하십시오.
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
URL 기반 PDF 렌더링은 어떻게 표시됩니까?

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 뷰 PDF 생성 결과는 무엇입니까?

baseUrl 매개변수는 Razor 보기가 상대 CSS 또는 이미지 경로를 참조하는 경우 중요합니다. 현재 호스트 URL을 전달하여 IronPDF가 해당 경로를 올바르게 해결할 수 있게 합니다. 전체 단계 및 Blazor 애플리케이션 패턴을 포함하여 Razor에서 PDF로 가는 튜토리얼을 참조하세요.
스트리밍으로 대용량 PDF 파일을 어떻게 처리합니까?
몇 메가바이트 크기의 문서를 위해 스트리밍은 메모리 사용량을 줄이고 클라이언트에게 더 빨리 바이트를 전달하기 시작합니다. 원본 바이트 배열을 사용할 때 File() 대신 FileStreamResult를 사용하세요:
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
CompressImages(80)는 JPEG 품질을 80%로 낮춰, 이미지가 많은 문서에 대해 파일 크기를 크게 줄이면서 눈에 띄는 품질 손실은 최소화합니다. Accept-Ranges: bytes를 설정하면 브라우저에 바이트 범위를 청크 청크로 요청할 수 있음을 알리므로, 대형 PDF에서 전체 파일을 먼저 다운로드하지 않고도 더 빠르게 탐색할 수 있게 합니다.
ISO에서 제공하는 PDF/A 사양은 보관 품질 PDF 요구 사항을 정의합니다. 애플리케이션에서 장기 보관 문서를 생성해야 하는 경우, IronPDF의 PDF/A 준수 모드는 출력이 이러한 표준을 충족하도록 보장하며, 이는 규제 또는 법적 업무 흐름에 특히 관련이 있습니다.
ASPNET 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를 인라인으로 표시할 때, 자동으로 전체 기능의 뷰어를 노출합니다. 사용자는 텍스트 선택을 통해 콘텐츠를 복사하고, 특정 단어나 숫자를 찾기 위한 빌트인 검색 바, 인쇄 제어, 그리고 클릭 한 번으로 다운로드할 수 있으며, 이는 귀하의 프론트엔드 코드 없이 가능합니다.
기본 보기 외에도, IronPDF는 시청자가 보는 문서의 다양한 기능을 지원합니다:
- 동적 텍스트, 페이지 번호 및 날짜가 포함된 헤더 및 푸터
- 초안 또는 기밀 마크를 위한 사용자 정의 워터마크
- 사용자가 브라우저에서 직접 채울 수 있는 대화형 양식 필드
- 문서 인증을 위한 디지털 서명
- 장기 보관 요구 사항을 위한 PDF/A 준수
- 제한된 액세스를 위한 암호화 및 비밀번호 보호
다음 표는 라이브러리에서 사용할 수 있는 주요 변환 방법과 각각을 사용하는 시점을 요약한 것입니다:
| 메서드 | 입력 | 최적의 용도 |
|---|---|---|
| `RenderHtmlAsPdf` | HTML 문자열 | 템플릿 문서, 인보이스, 보고서 |
| `RenderUrlAsPdf` | URL | 웹 페이지 아카이빙, 실시간 콘텐츠 스냅샷 |
| `RenderHtmlAsPdf` + Razor | 렌더링된 보기 HTML | 기존 MVC 템플릿을 PDF로 재사용 |
| `RenderHtmlFileAsPdf` | 로컬 HTML 파일 | 디스크에 저장된 정적 템플릿 |
컨테이너화된 배포를 위해, IronPDF는 PDF 생성을 전용 마이크로서비스로 실행할 수 있도록 원격 엔진 지원도 제공합니다. 자원 제약 환경에 맞춘 설정을 위한 메모리 최적화 가이드를 검토하세요.
기능에 대한 전체 개요를 보려면 IronPDF 기능 페이지를 방문하세요.
IronPDF가 지원하는 형식 및 편집 옵션은 무엇입니까?
IronPDF는 기본 렌더링을 훨씬 넘어섰습니다. 아래 옵션을 사용하여 각 문서에 구조와 브랜드를 추가할 수 있습니다.
페이지 레이아웃 제어에는 사용자 정의 용지 크기, 방향 설정 및 여백 구성이 포함됩니다. 타이포그래피 지원은 CSS @font-face 선언을 통해 완전한 웹 폰트 렌더링을 포함하므로, 문서는 귀사의 브랜드 폰트를 정확하게 맞춥니다. 또한 PDF 페이지 내에 이미지를 삽입하고 크기를 조정할 수 있어 시각적 충실도를 완벽하게 제어할 수 있습니다.
문서 조작을 위해 IronPDF는 기존 PDF를 병합하거나 분할하고, 개별 페이지를 추가하거나 제거하며, 텍스트와 이미지를 프로그래밍 방식으로 추출할 수 있습니다. 캡처 전 JavaScript 실행은 Chart.js 또는 D3.js 같은 클라이언트 측 렌더링 라이브러리에 의존하는 보고서를 생성할 때 유용한 동적 차트와 데이터 시각화를 지원합니다.
이러한 기능은 별도의 문서 처리 레이어 없이 애플리케이션에서 직접 세련되고 인쇄 가능한 문서를 생성할 수 있음을 의미합니다.
사용자 업로드 PDF를 수용하고 생성된 것과 함께 표시해야 하는 경우, IronPDF는 새로운 것을 생성하는 것만큼 기존 PDF 바이너리를 쉽게 읽습니다. PdfDocument.FromFile()으로 파일을 로드하고 동일한 File() 도우미를 통해 그것의 BinaryData을 반환하세요.
기존 문서의 편집, 주석 추가 및 수정에 대한 자세한 설명을 보려면 C# PDF 편집 튜토리얼을 참조하세요.
IronPDF는 대안적 접근 방법에 비해 어떻게 비교됩니까?
IronPDF 서버 측 접근 방식의 두 가지 가장 일반적인 대안은 클라이언트 측 PDF 뷰어 라이브러리(예: Mozilla의 오픈 소스 뷰어 PDF.js) 포함하기 및 사용자를 별도의 문서 관리 시스템에 라우팅하기입니다.
PDF.js와 같은 클라이언트 측 뷰어는 단순한 디스플레이 경우에 잘 작동하지만, 뷰어 JavaScript 번들 제공, 외부 PDF에 대한 CORS 처리 및 브라우저 호환성 관리를 스스로 처리해야 합니다. IronPDF를 통한 서버 측 생성을 사용하면 전체 PDF 파이프라인이 .NET 스택에 완전히 포함되어 보안 정책을 단순화하고 크로스 오리진 복잡성을 피할 수 있습니다.
전용 문서 관리 시스템은 대부분의 웹 애플리케이션이 필요로 하지 않는 운영 오버헤드를 추가합니다. 이미 ASP.NET Core를 실행 중인 팀의 경우, 컨트롤러에서 직접 PDF를 생성하고 스트리밍하는 것이 저항이 가장 적은 경로입니다.
다음 단계는 무엇입니까?
ASP.NET Core 웹 애플리케이션에서 PDF를 표시하는 것은 몇 줄의 코드만으로 가능합니다. ChromePdfRenderer로 PDF를 생성하고 Content-Disposition: inline을 설정하여 FileResult을 반환하면, 브라우저의 내장 뷰어가 모든 나머지 작업을 처리합니다.
프로덕션 배포를 위해 설정을 준비하는 다음 단계들을 고려하십시오:
- PDF 생성 시간과 오류율을 추적하기 위해 사용자 정의 로깅을 설정하십시오
- Chromium 시작 오버헤드를 줄이기 위해 자주 요청되는 PDF에 대한 캐싱을 구현하십시오
- 웹 계층과 별도로 렌더링을 확장하기 위해 IronPDF Engine Docker 이미지를 사용하십시오
- 응답 크기를 관리 가능하게 유지하기 위해 PDF 압축 옵션을 검토하십시오
프로젝트에 PDF 뷰잉을 추가할 준비가 되었습니까? 무료 체험판으로 시작하고 위의 예제를 몇 분 안에 실행하십시오. 배포 준비가 되었을 때, 팀의 크기와 사용량에 맞는 라이선스 옵션을 검토하십시오. 관련 변환 내용을 탐색하려면, IronPDF가 DOCX에서 PDF로, 이미지에서 PDF로 처리하는 방법과 how-to 가이드 라이브러리 내의 다른 형식을 살펴보십시오.
자주 묻는 질문
ASP.NET 웹 응용 프로그램에서 PDF 뷰어를 만들려면 어떻게 해야 하나요?
IronPDF를 사용하여 ASP.NET 웹 응용 프로그램에서 PDF 뷰어를 만들 수 있습니다. 이 기능은 Adobe Acrobat Reader와 같은 외부 도구 없이도 응용 프로그램 내에서 PDF 문서를 직접 표시할 수 있어 원활한 보기 경험을 제공합니다.
ASP.NET에서 PDF 보기용으로 IronPDF를 사용하는 이점은 무엇입니까?
IronPDF는 ASP.NET 응용 프로그램에서 원활하고 통합된 PDF 보기 경험을 제공합니다. 문서를 인라인으로 표시할 수 있으며, 다양한 파일 형식을 지원하고 제3자 PDF 뷰어의 필요성을 제거하여 사용자 경험을 향상시킵니다.
내 ASP.NET 웹 응용 프로그램에서 대화형 PDF 폼을 표시할 수 있습니까?
예, IronPDF를 사용하면 ASP.NET 웹 응용 프로그램 내에서 대화형 PDF 폼을 표시할 수 있습니다. 폼 필드와 대화형 요소의 렌더링을 지원하여 사용자가 브라우저에서 직접 문서와 상호작용할 수 있게 합니다.
ASP.NET에서 IronPDF를 사용하여 청구서 및 보고서를 표시할 수 있습니까?
물론입니다. IronPDF는 ASP.NET 응용 프로그램에서 청구서, 보고서 및 기타 문서 유형을 표시하기에 적합합니다. 웹 응용 프로그램 내에서 문서가 정확하고 효율적으로 렌더링되도록 보장합니다.
IronPDF를 사용하여 ASP.NET 애플리케이션에서 PDF를 보기 위해 Adobe Acrobat Reader가 필요한가요?
아니요, IronPDF를 사용할 때 ASP.NET 애플리케이션에서 PDF를 보기 위해 Adobe Acrobat Reader가 필요하지 않습니다. 브라우저에서 직접 PDF를 렌더링하고 볼 수 있어 서드파티 의존성이 필요하지 않습니다.


