푸터 콘텐츠로 바로가기
IRONPDF 사용하기

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
SHELL

또는 .NET CLI를 사용하세요:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

설치 후, IronPDF API를 호출하기 전에 라이센스 키Program.cs에 추가하세요:

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는 브라우저에서 어떻게 보입니까?

브라우저가 '샘플 PDF 문서'라는 제목과 '이 PDF는 ASP.NET Core에서 IronPDF를 사용하여 생성되었습니다'라는 텍스트로 PDF 문서를 표시하며 localhost:7254/Pdf/DisplayFromHtml에서 볼 수 있습니다

ChromePdfRenderer는 내부적으로 Chromium을 사용하므로, CSS 그리드, 플렉스박스, 웹 폰트 및 최신 CSS 기능이 모두 정확하게 렌더링됩니다. Content-Dispositioninline로 설정하면 브라우저가 파일을 저장하는 대신 표시하도록 지시합니다. 해당 값을 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 렌더링은 어떻게 표시됩니까?

IronPDF를 사용하여 ASP.NET 웹 애플리케이션에서 렌더링된 위키피디아 홈페이지를 표시하는 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

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
$vbLabelText   $csharpLabel

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
$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.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 가이드 라이브러리 내의 다른 형식을 살펴보십시오.

지금 바로 IronPDF으로 시작하세요.
green arrow pointer

자주 묻는 질문

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를 렌더링하고 볼 수 있어 서드파티 의존성이 필요하지 않습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해