.NET Core 에서 PDF 파일을 생성하는 방법

.NET Core C#에서 HTML을 PDF로 변환하는 방법 — IronPDF 가이드

This article was translated from English: Does it need improvement?
Translated
View the article in English

HTML에서 고품질 PDF를 직접 생성하는 것은 최신 .NET 애플리케이션에서 흔히 요구되는 사항입니다. 보고서, 송장, 티켓 등 모든 문서가 웹 UI와 일치하는 픽셀 단위까지 완벽한 출력을 필요로 합니다. IronPDF HTML, Razor 뷰 및 전체 웹사이트를 표준을 준수하는 PDF 문서로 렌더링하기 위한 단일 C# API를 제공하여 이러한 워크플로를 간소화합니다. 이 가이드를 마치면 개발자는 ASP.NET Core 프로젝트에서 URL, 원시 HTML 또는 MVC 뷰를 변환하고 동일한 코드를 Windows, Linux, Docker 또는 서버리스 환경에 배포할 수 있게 됩니다.

레이아웃 문제의 경우 IronPDF PDF가 렌더링되기 전에 CSS, JavaScript 및 미디어 쿼리 문제를 진단하는 데 도움이 되는 헤드리스 Chrome 디버거를 제공합니다. 자세한 기술 정보는 픽셀 단위까지 완벽한 HTML-PDF 변환 가이드를 참조하세요.

빠른 시작: .NET Core에서 HTML로 PDF 만들기

IronPDF 라이브러리를 사용하면 .NET Core 에서 HTML을 PDF로 손쉽게 변환할 수 있습니다. 이 가이드는 최소한의 코드로 HTML 콘텐츠를 고품질 PDF로 렌더링하여 빠르게 시작할 수 있도록 간단한 예제를 제공합니다. PDF 생성 기능을 애플리케이션에 손쉽게 통합하려는 개발자에게 적합합니다.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronPdf 설치하기

    PM > Install-Package IronPdf
  2. 다음 코드 조각을 복사하여 실행하세요.

    var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>");
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronPDF 사용 시작하기

    arrow pointer

빠른 시작 체크리스트

  1. 설치Install-Package IronPdf
  2. URL 렌더링ChromePdfRenderer.RenderUrlAsPdf()
  3. 원시 HTML 렌더링ChromePdfRenderer.RenderHtmlAsPdf()
  4. Razor 뷰 내보내기ChromePdfRenderer.RenderHtmlAsPdfAsync()
  5. 출력 세부 조정 – 활용 ChromePdfRenderer.RenderingOptions

이 튜토리얼에서 다루는 내용

  • URL, HTML 문자열 및 Razor 뷰 변환
  • 용지, 여백 및 미디어 유형 설정
  • 크로스 플랫폼 배포 (윈도우, 리눅스, Docker)
  • 후처리: PDF 병합, 워터마크 추가, 비밀번호 보호 및 디지털 서명
  • 엔드투엔드 샘플: 티켓 예매 MVC 앱

.NET Core 에 PDF 라이브러리를 설치하는 방법은 무엇인가요?

이 라이브러리를 설치하는 것은 모든 .NET 8 프로젝트에서 한 줄짜리 명령으로 가능하며, .NET 9 미리 보기 및 곧 출시될 .NET 10과도 호환성을 유지합니다. NuGet 패키지 관리자 콘솔을 사용하면 패키지 관리자가 Windows, Linux, Docker 및 서버리스 대상에 필요한 모든 종속성을 자동으로 해결합니다.

PM> Install-Package IronPdf             # .NET 8 LTS and higher
PM> Install-Package IronPdf             # .NET 8 LTS and higher
SHELL

참고해 주세요CLI가 필요하십니까? 동일한 명령이 프로젝트 폴더 내에서 dotnet add package IronPdf와 함께 작동합니다.

설치가 완료되면 모든 공개 URL을 변환하여 모든 연결이 제대로 되었는지 확인하십시오.

// Program.cs — .NET 8 LTS
using IronPdf;

var renderer = new ChromePdfRenderer();

// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");

// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
// Program.cs — .NET 8 LTS
using IronPdf;

var renderer = new ChromePdfRenderer();

// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");

// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
' Program.cs — .NET 8 LTS
Imports IronPdf

Private renderer = New ChromePdfRenderer()

' Render a live website to PDF
Private PdfDocument As using

' Persist to disk
pdf.SaveAs("website-snapshot.pdf")
$vbLabelText   $csharpLabel

작동 방식

  • ChromePdfRenderer는 후드 아래에서 샌드박스화된 Chromium 인스턴스를 시작합니다. 별도의 Chrome 설치는 필요하지 않습니다.
  • RenderUrlAsPdf는 JavaScript 기반 콘텐츠, CSS 미디어 쿼리 및 폰트를 포함하여 완전히 렌더링된 DOM을 캡처합니다.
  • 결과 PdfDocument 기능은 결합, 암호 보호, 디지털 서명을 제공하는 도우미 메서드를 노출합니다. 이러한 기능은 이후 튜토리얼에서 다룹니다.

Azure App Service, AWS Lambda, 온프레미스 Linux 등 배포 관련 세부 사항은 전용 설치 가이드고급 NuGet 설정 페이지를 참조하세요. Docker 및 K8s 클러스터에 대한 내부 CI/CD 팁은 Docker 배포 모범 사례 에서 다룹니다.


.NET Core 서비스에서 웹사이트 URL을 PDF로 변환하는 방법은 무엇인가요?

RenderUrlAsPdf에 대한 한 번의 호출만으로 충분합니다. 공용 URL을 전달하면 IronPDF는 완전하게 렌더링된 표준 준수 PDF를 반환합니다. 아래 코드는 .NET 8 LTS를 대상으로 하며, .NET 9 미리 보기 버전과 2025년에 출시될 예정인 .NET 10에서도 변경 없이 컴파일됩니다.

단계별 예시

// Program.cs — .NET 8 LTS-compatible
using IronPdf;

// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        // Force A4 portrait output and apply @media print styles
        PaperSize    = PdfPaperSize.A4,
        CssMediaType = PdfCssMediaType.Print
    }
};

// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");

// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
// Program.cs — .NET 8 LTS-compatible
using IronPdf;

// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        // Force A4 portrait output and apply @media print styles
        PaperSize    = PdfPaperSize.A4,
        CssMediaType = PdfCssMediaType.Print
    }
};

// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");

// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
' Program.cs — .NET 8 LTS-compatible
Imports IronPdf

' 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

' 2. Create a reusable renderer instance
Dim renderer = New ChromePdfRenderer With {
	.RenderingOptions = {
		PaperSize = PdfPaperSize.A4,
		CssMediaType = PdfCssMediaType.Print
	}
}

' 3. Convert Microsoft Docs home page to PDF
Using pdf As PdfDocument = renderer.RenderUrlAsPdf("https://learn.microsoft.com/")
	
	' 4. Save the PDF or stream it from a Web API
	pdf.SaveAs("docs-offline-copy.pdf")
End Using
$vbLabelText   $csharpLabel

작동 원리

  • ChromePdfRenderer는 시스템 Chrome 종속성 없이 샌드박스화된 Chromium 인스턴스를 시작하여 Docker 이미지를 슬림하게 유지합니다.
  • RenderUrlAsPdf는 DOM과 JavaScript가 완료될 때까지 대기하고, 단일 페이지 앱이 올바르게 렌더링됩니다.
  • CssMediaType인쇄로 설정하면 엔진이 인쇄에 특화된 규칙을 사용하도록 지시하여 브라우저 출력과 _인쇄 → PDF로 저장_를 일치시킵니다.
  • 결과 PdfDocument는 암호화, 디지털 서명, 병합 또는 래스터화가 가능합니다. 이러한 기능은 이후 섹션에서 설명됩니다.

픽셀 정확도 디버깅: renderer.LoggingOptions.DebugMode = true을 활성화하고 렌더링 중에 실시간 DevTools를 검사하려면 헤드리스 Chrome 디버그 가이드를 따르세요.

관련 자료


.NET Core 에서 HTML 원본을 PDF로 변환하는 방법은 무엇인가요?

HTML 문자열 또는 Razor 뷰에서 렌더링된 마크업을 ChromePdfRenderer.RenderHtmlAsPdf에 전달하면 즉시 표준 준수 PDF가 생성됩니다. 이 방법은 IronPDF에 내장된 Chromium 엔진을 실행하므로 외부 브라우저 설치나 WebView 종속성이 필요하지 않습니다. 아래에 표시된 코드는 현재 .NET 8 LTS에서 컴파일되며 .NET 9 및 2025년 11월 출시 예정인 .NET 10과도 호환성을 유지합니다.

예시 - HTML 조각에서 PDF 생성

// Program.cs — compatible with .NET 8 and newer
using IronPdf;

// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>
""";

// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        PaperSize    = PdfPaperSize.A4,                  // ISO-standard paper size
        PaperOrientation = PdfPaperOrientation.Portrait,
        CssMediaType = PdfCssMediaType.Screen,           // Respect on-screen CSS
        RenderDelay  = 100,                              // Wait 100 ms for JS/animations
        FallbackEncoding = "utf-8"                       // Handle non-ASCII correctly
    }
};

// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
// Program.cs — compatible with .NET 8 and newer
using IronPdf;

// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>
""";

// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        PaperSize    = PdfPaperSize.A4,                  // ISO-standard paper size
        PaperOrientation = PdfPaperOrientation.Portrait,
        CssMediaType = PdfCssMediaType.Screen,           // Respect on-screen CSS
        RenderDelay  = 100,                              // Wait 100 ms for JS/animations
        FallbackEncoding = "utf-8"                       // Handle non-ASCII correctly
    }
};

// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
' Program.cs — compatible with .NET 8 and newer
Imports IronPdf

' Sample HTML fragment (could also be read from a file, Razor view, or CMS)
Private Const html As String = "<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""utf-8"">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>"

' 1. Create a renderer once and reuse it across conversions
Private renderer = New ChromePdfRenderer With {
	.RenderingOptions = {
		PaperSize = PdfPaperSize.A4,
		PaperOrientation = PdfPaperOrientation.Portrait,
		CssMediaType = PdfCssMediaType.Screen,
		RenderDelay = 100,
		FallbackEncoding = "utf-8"
	}
}

' 2. Render the HTML fragment
Private PdfDocument As using

' 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf")
$vbLabelText   $csharpLabel

이 코드가 보여주는 것

  • Chromium 내장 -- IronPDF Chromium 엔진을 포함하여 최신 브라우저와 HTML5, CSS3 및 JavaScript 호환성을 보장합니다.
  • 단일 종속성 -- 가벼운 NuGet 설치로 추가 시스템 라이브러리 없이 Windows, Linux, Docker 및 Azure/AWS를 지원합니다.
  • 렌더링 옵션 -- PaperSize, CssMediaType, 및 RenderDelay는 브라우저 인쇄 설정을 반영하여 PDF가 화면의 레이아웃과 일치합니다.
  • 미래 지향적 타겟팅 -- API 표면은 .NET 8, .NET 9 STS 및 곧 출시될 .NET 10에서 동일하므로 장기적인 유지 관리가 최소화됩니다 .
  • 후처리 훅 -- PdfDocument는 병합, 암호 보호 및 디지털 서명을 위한 도우미 기능을 노출합니다. 각 기능은 이 가이드의 후반에 다룹니다.

추가 읽기: 단계별 HTML 문자열을 PDF로 변환하는 튜토리얼 및 전체 ChromePdfRenderer API 문서를 참조하세요.


ASP .NET Core MVC 뷰를 PDF로 내보내는 방법은 무엇인가요?

IronPDF는 브라우저와 동일한 방식으로 완전히 처리된 Razor 뷰 ( .cshtml )를 렌더링하고이를 PdfDocument로 스트리밍합니다. 아래 워크플로는 컨트롤러 로직을 깔끔하게 유지하고, 브라우저 플러그인이 필요하지 않으며, .NET 8 LTS, .NET 9 미리 보기 및 2025년 11월 출시 예정인 .NET 10에서 작동합니다.

엔드투엔드 컨트롤러 예시

// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel

Public Class TicketsController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer With {
            .RenderingOptions = New PdfRenderingOptions With {
                .PaperSize = PdfPaperSize.A5, ' Compact ticket size
                .PaperOrientation = PdfPdfOrientation.Portrait,
                .FitToPaperWidth = True,
                .CssMediaType = PdfCssMediaType.Print,
                .Margins = New PdfMargins(5, 10, 5, 10) ' mm
            }
        }
    End Sub

    ' GET /Tickets/Print/42
    Public Async Function Print(id As Integer) As Task(Of IActionResult)
        Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)

        ' 1. Render the Razor view to an HTML string
        Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
            HttpContext, "~/Views/Tickets/Print.cshtml", vm)

        ' 2. Convert HTML → PDF
        Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
            ' 3. Stream back as a file
            Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

이 코드가 보여주는 것

  • 임시 파일 없음 -- Razor 뷰는 메모리 내에서 렌더링되고, 디스크 I/O 및 임시 폴더의 경쟁 조건을 피하면서 직접 RenderHtmlAsPdf에 전달됩니다.
  • 티켓 크기 출력 -- PaperSize = A5 및 좁은 여백은 집에서 인쇄하는 티켓을 컴팩트하게 유지합니다.
  • 일관된 인쇄 스타일 -- CssMediaType = Print는 브라우저가 사용하는 동일한 @media print CSS 규칙을 적용합니다.
  • 이진 스트리밍 -- pdf.BinaryData는 파일 시스템에 접근하지 않고 문서를 스트리밍합니다; API 엔드포인트 및 Lambda 함수에 이상적입니다.
  • 재사용 가능한 렌더러 -- ChromePdfRenderer는 각 컨트롤러에 한 번 인스턴스화된 후 재사용되어 프로세스 생성 오버헤드를 최소화합니다.
##

`PaperSize` , `PaperOrientation` , `FitToPaperWidth`

##

`Margins` , `Header` , `Footer` , `Watermark`

다음 단계: 암호화, 디지털 서명을 추가하거나 여러 티켓을 하나의 파일로 병합하세요. 병합 예시디지털 서명 방법을 참조하세요.


인쇄하기 전에 용지 크기, 여백, 머리글, 워터마크 및 보안 설정을 어떻게 세밀하게 조정할 수 있나요?

IronPDF는 출력의 모든 측면을 제어하는 단일 ChromePdfRenderOptions 개체를 노출하여 종이 크기, 방향, 헤더 및 풋터, JavaScript 타이밍, 워터마크, 암호화 및 디지털 서명을 추가 브라우저 플러그인 없이 처리합니다.

코드 예시 — 여러 옵션을 한 번에 적용하기

// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
    // 1. Page layout
    PaperSize        = PdfPaperSize.A4,                     // ISO size
    PaperOrientation = PdfPdfOrientation.Portrait,
    Margins          = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm

    // 2. Timing & media
    CssMediaType     = PdfCssMediaType.Print,               // Respect @media print
    EnableJavaScript = true,
    RenderDelay      = 200,                                 // Wait 200 ms for animations

    // 3. Headers & footers (HTML gives full design freedom)
    HtmlHeader       = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
    HtmlFooter       = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",

    // 4. Watermark
    Watermark        = new HtmlStamp
    {
        HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center
    },

    // 5. Security
    SecurityOptions = new PdfSecurityOptions
    {
        OwnerPassword = "StrongOwnerPwd!",
        UserPassword  = "ReadOnly",
        AllowUserPrinting = false,
        AllowUserCopyPasteContent = false
    }
};

// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");

// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");

// Save
pdf.SaveAs("advanced-options-demo.pdf");
// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
    // 1. Page layout
    PaperSize        = PdfPaperSize.A4,                     // ISO size
    PaperOrientation = PdfPdfOrientation.Portrait,
    Margins          = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm

    // 2. Timing & media
    CssMediaType     = PdfCssMediaType.Print,               // Respect @media print
    EnableJavaScript = true,
    RenderDelay      = 200,                                 // Wait 200 ms for animations

    // 3. Headers & footers (HTML gives full design freedom)
    HtmlHeader       = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
    HtmlFooter       = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",

    // 4. Watermark
    Watermark        = new HtmlStamp
    {
        HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center
    },

    // 5. Security
    SecurityOptions = new PdfSecurityOptions
    {
        OwnerPassword = "StrongOwnerPwd!",
        UserPassword  = "ReadOnly",
        AllowUserPrinting = false,
        AllowUserCopyPasteContent = false
    }
};

// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");

// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");

// Save
pdf.SaveAs("advanced-options-demo.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Configure everything in one place
renderer.RenderingOptions = New ChromePdfRenderOptions With {
    ' 1. Page layout
    .PaperSize = PdfPaperSize.A4, ' ISO size
    .PaperOrientation = PdfPdfOrientation.Portrait,
    .Margins = New PdfMargins With {.Top = 20, .Bottom = 25, .Left = 15, .Right = 15}, ' mm

    ' 2. Timing & media
    .CssMediaType = PdfCssMediaType.Print, ' Respect @media print
    .EnableJavaScript = True,
    .RenderDelay = 200, ' Wait 200 ms for animations

    ' 3. Headers & footers (HTML gives full design freedom)
    .HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
    .HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",

    ' 4. Watermark
    .Watermark = New HtmlStamp With {
        .HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
        .VerticalAlignment = VerticalAlignment.Center,
        .HorizontalAlignment = HorizontalAlignment.Center
    },

    ' 5. Security
    .SecurityOptions = New PdfSecurityOptions With {
        .OwnerPassword = "StrongOwnerPwd!",
        .UserPassword = "ReadOnly",
        .AllowUserPrinting = False,
        .AllowUserCopyPasteContent = False
    }
}

' Render any HTML
Using pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>")
    ' Digitally sign with a PFX certificate (optional)
    pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval")

    ' Save
    pdf.SaveAs("advanced-options-demo.pdf")
End Using
$vbLabelText   $csharpLabel

이러한 선택 사항들이 중요한 이유

  • PaperSize, Margins, 그리고 CssMediaType는 브라우저의 인쇄 대화 상자를 반영하여 Windows, Linux 및 Docker에서 화면의 레이아웃과 PDF가 동일하게 유지됩니다.
  • HTML 헤더와 푸터는 Razor 토큰, CSS 및 JavaScript 지원합니다. 동적 페이지 번호 또는 브랜딩에 유용합니다.
  • HtmlStamp는 전체 HTML + CSS 제어로 브랜드 워터마크 생성을 단일 라인으로 처리할 수 있습니다.
  • 보안 옵션을 통해 타사 도구 없이 128비트 암호화, 소유자/사용자 암호 및 세부적인 권한 설정을 사용할 수 있습니다.
  • 디지털 서명은 코드에 직접 암호화 봉인을 추가하여 법적 진위성과 위변조 방지 기능을 유지합니다.
  • ExtractAllTextExtractAllImages와 같은 추출 도우미는 분석이 필요한 경우 프로세스를 반대로 수행합니다.

빠른 참조 — 자주 사용하는 설정

##

`PaperSize` , `PaperOrientation` , `Margins` , `CssMediaType` , `RenderDelay`

##

`HtmlHeader` , `HtmlFooter` , 동적 Razor 플레이스홀더, 페이지 번호 토큰

##

`Watermark` , `HtmlStamp` , 투명도, 정렬

##

`SecurityOptions` , `SignAndStamp` , 소유자/사용자 암호, 인증서 봉인

다음 작업: 여러 PDF 파일 병합, 텍스트 및 이미지 추출, Docker 또는 서버리스 환경에 배포. 플랫폼 간 호환성을 확보하려면 배포 섹션으로 진행하십시오.


Linux와 Windows의 Docker 환경에 PDF 생성 코드를 배포하려면 어떻게 해야 할까요?

IronPDF 단일 독립형 NuGet 패키지 로 제공되므로 Windows와 Linux 모두 에서 ASP.NET Core (또는 콘솔) 앱을 컨테이너화하는 것이 간단합니다. 핵심은 게시된 바이너리를 슬림 런타임 이미지에 복사하고, Linux에서는 IronPDF에 필요한 두 개의 네이티브 라이브러리 (libnss3libatk1.0-0)를 추가하는 것입니다.

멀티스테이지 Dockerfile (Ubuntu 22.04)

참고해 주세요 왜 다단계인가요? SDK 이미지(1단계)는 프로젝트를 컴파일합니다. 빌드 도구가 폐기되므로 최종 런타임 이미지(2단계)는 120MB 미만의 가벼운 크기를 유지합니다.

####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore

COPY . .
RUN dotnet publish -c Release -o /app/publish

####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyPdfApp.dll"]

참고해 주세요Windows 컨테이너가 필요하십니까? 두 번째 단계를 mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022로 바꾸세요. Chromium DLL은 번들로 제공되므로 추가 패키지가 필요하지 않습니다.

엔드투엔드 검증 스크립트

docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
SHELL
  • API 동작은 내부적으로 섹션2와 동일하게 ChromePdfRenderer.RenderUrlAsPdf을 호출합니다. IronPDF 컨테이너 내부에서 샌드박스 처리된 Chromium 프로세스를 실행합니다. 헤드리스 렌더링을 사용하기 때문에 X 서버가 필요하지 않습니다.
  • 대용량 렌더링 중에도 메모리 사용량은 200MB 미만으로 유지됩니다.

문제 해결 팁: 컨테이너 로그에 "libnss3.so not found" 오류가 표시되면 libnss3libatk1.0-0가 존재하는지 확인하세요. musl C 라이브러리에 필요한 심볼이 부족하여 Alpine 이미지를 지원 하지 않습니다 .

내부 자원


.NET Core 에서 기존 PDF 파일을 열고, 병합하고, 워터마크를 추가하고, 콘텐츠를 추출하는 방법은 무엇인가요?

IronPDF는 Adobe® Acrobat 또는 타사 도구로 생성된 PDF이든 IronPDF로 생성된 PDF이든 모든 PDF를 고급 PdfDocument 개체로 취급하여 품질 손실 없이 열고, 수정하고, 보안 설정하고 다시 저장할 수 있습니다. 동일한 API 인터페이스는 현재 .NET 8 LTS에서 작동하며 .NET 9 미리 보기 및 곧 출시될 .NET 10에서도 변경 없이 컴파일됩니다.

통합 샘플 — 열기 → 병합 → 워터마크 → 추출

// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;

// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice  = PdfDocument.FromFile("invoice.pdf", "ReadOnly");   // open with user pwd
PdfDocument tAndCs   = PdfDocument.FromFile("terms.pdf");                 // no pwd required

// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs);               // 1-liner merge

// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
    "<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
  + "width:100%;text-align:center;'>CONFIDENTIAL</div>",
    verticalAlignment   : VerticalAlignment.Center,
    horizontalAlignment : HorizontalAlignment.Center);

// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var    image    = mergedPdf.ExtractAllImages().FirstOrDefault();

// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;

// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice  = PdfDocument.FromFile("invoice.pdf", "ReadOnly");   // open with user pwd
PdfDocument tAndCs   = PdfDocument.FromFile("terms.pdf");                 // no pwd required

// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs);               // 1-liner merge

// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
    "<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
  + "width:100%;text-align:center;'>CONFIDENTIAL</div>",
    verticalAlignment   : VerticalAlignment.Center,
    horizontalAlignment : HorizontalAlignment.Center);

// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var    image    = mergedPdf.ExtractAllImages().FirstOrDefault();

// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
' ManipulateExistingPdf.cs — .NET 8 LTS compatible
Imports IronPdf
Imports System.Linq

' Step 1: Open two existing files (password-protected PDFs are supported)
Private invoice As PdfDocument = PdfDocument.FromFile("invoice.pdf", "ReadOnly") ' open with user pwd
Private tAndCs As PdfDocument = PdfDocument.FromFile("terms.pdf") ' no pwd required

' Step 2: Merge them (invoice pages first, then T&Cs)
Private mergedPdf As PdfDocument = PdfDocument.Merge(invoice, tAndCs) ' 1-liner merge

' Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp("<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);" & "width:100%;text-align:center;'>CONFIDENTIAL</div>", verticalAlignment := VerticalAlignment.Center, horizontalAlignment := HorizontalAlignment.Center)

' Step 4: Extract all text and the first image for audit purposes
Dim fullText As String = mergedPdf.ExtractAllText()
Dim image = mergedPdf.ExtractAllImages().FirstOrDefault()

' Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf")
$vbLabelText   $csharpLabel

이것이 중요한 이유

  • 열기 및 병합PdfDocument.FromFile는 암호화된 파일을 포함한 모든 표준 준수 PDF를 로드하며, PdfDocument.Merge는 단일 호출에서 임의의 수의 문서를 결합합니다.
  • 워터마크ApplyStamp (별명 HtmlStamp)는 선택된 페이지에 로고, QR 코드 또는 대각선 텍스트와 같은 완전히 스타일화된 HTML/CSS 오버레이를 래스터화 없이 삽입합니다.
  • 콘텐츠 추출ExtractAllTextExtractAllImages은 다운스트림 아카이빙 또는 AI 파이프라인을 위한 원시 UTF-8 텍스트 또는 이진 이미지 스트림을 가져옵니다.
  • 디지털 서명 준비 완료 – 동일한 PdfDocument 인스턴스에 SignAndStamp를 씌워 RFC 3161 준수 해시를 생성하여 ISO 32000-2 디지털 서명 요구사항에 맞춰줍니다.
  • 개방형 표준 준수 – IronPDF 원본 PDF 구조(글꼴, 레이어, XMP 메타데이터)를 유지하므로 출력물이 Adobe® Reader 및 기타 ISO 32000-1 뷰어와 호환됩니다.
  • 미래 지향적 – 이 API는 상호 운용 어셈블리 및 Win32 GDI 호출을 사용하지 않으므로 코드는 Windows, Linux, Docker 및 향후 출시될 .NET 10 서버리스 SKU에서 변경 없이 실행됩니다.

페이지를 분할, 회전 또는 삭제해야 하시나요? 세부적인 작업 방법은 페이지 수준 편집 튜토리얼을 참조하세요.


.NET Core 에서 PDF 파일을 암호화하고 디지털 서명하는 방법은 무엇인가요?

IronPDF 두 단계를 통해 문서를 보호합니다. 첫 번째 단계는 AES 기반 암호화 (사용자/소유자 암호 + 세부적인 권한 설정)이고, 두 번째 단계는 암호화 해시를 사용하여 파일을 봉인하는 X.509 디지털 서명입니다 . 두 API는 동일한 PdfDocument 개체에 상주하여, 오늘 .NET 8 LTS에서 동일한 워크플로를 사용하고, .NET 9 프리뷰 및 향후 .NET 10 릴리스에서도 변경 없이 컴파일됩니다.

예시 — 256비트 AES 암호화를 적용하고, 인쇄 권한을 잠그고, 서명을 표시합니다.

// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;

// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");

// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
    EncryptionAlgorithm   = PdfEncryptionAlgorithm.AES256Bit,
    OwnerPassword         = "IronAdmin!2025",
    UserPassword          = "ReadOnly",
    AllowUserPrinting     = PdfPrintSecurity.Disabled,
    AllowUserCopyPasteContent = false,
    AllowUserAnnotations  = false
};

// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
    certificatePath : "./certs/ironsoftware.pfx",
    authority       : "Iron Software Ltd.",
    location        : "Chicago, IL",
    reason          : "Final approval"
);

// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;

// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");

// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
    EncryptionAlgorithm   = PdfEncryptionAlgorithm.AES256Bit,
    OwnerPassword         = "IronAdmin!2025",
    UserPassword          = "ReadOnly",
    AllowUserPrinting     = PdfPrintSecurity.Disabled,
    AllowUserCopyPasteContent = false,
    AllowUserAnnotations  = false
};

// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
    certificatePath : "./certs/ironsoftware.pfx",
    authority       : "Iron Software Ltd.",
    location        : "Chicago, IL",
    reason          : "Final approval"
);

// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
' SecureAndSign.cs — .NET 8 LTS compatible
Imports IronPdf

' Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
Private pdf As PdfDocument = PdfDocument.FromFile("financial-report.pdf")

' Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = New PdfSecuritySettings With {
	.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
	.OwnerPassword = "IronAdmin!2025",
	.UserPassword = "ReadOnly",
	.AllowUserPrinting = PdfPrintSecurity.Disabled,
	.AllowUserCopyPasteContent = False,
	.AllowUserAnnotations = False
}

' Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(certificatePath := "./certs/ironsoftware.pfx", authority := "Iron Software Ltd.", location := "Chicago, IL", reason := "Final approval")

' Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf")
$vbLabelText   $csharpLabel

비하인드 스토리

  • AES-256 암호화 -- IronPDF 는 NIST 승인 AES 키로 페이로드를 감싸 무단 열람, 인쇄 또는 복사 붙여넣기를 차단합니다.
  • 권한 세분화 -- AllowUserPrintingAllowUserFormData과 같은 속성은 작업별 권리를 토글합니다; 제한 사항을 적용하려면 소유자 암호가 필요합니다.
  • 디지털 서명 -- SignAndStamp는 RFC 3161 타임스탬프 및 인증서 체인을 삽입하여 Adobe® Acrobat과 기타 ISO 32000-2 뷰어에서 인식되는 변조 방지 해시를 생성합니다.
  • 원스톱 API -- 암호화와 서명 모두 동일한 PdfDocument 인스턴스를 수정하여 여러 파일을 반복하지 않고 내부 폰트, 레이어 및 메타데이터를 보존합니다.

문제 해결 팁: Adobe Reader에서 "서명 무효"라는 메시지가 나올 경우, PFX에 신뢰할 수 있는 루트 인증서가 포함되어 있는지 확인하고 location 문자열이 ASCII로 깨끗한지 확인하세요.

핵심 보안 설정

##

`PdfSecuritySettings` → `OwnerPassword` , `UserPassword` , `EncryptionAlgorithm` , `AllowUserPrinting`

##

`PdfDocument.SignAndStamp` — PFX 경로, 권한, 위치, 사유, 타임스탬프

심층 분석을 위한 내부 자료


.NET Core 에서 HTML을 PDF로 변환하는 성능을 최적화하고 확장하는 방법은 무엇일까요?

IronPDF의 Chromium 엔진은 최신 하드웨어에서 대부분의 페이지를 1초 이내에 렌더링하지만, 렌더링을 일괄 처리하고, 멀티스레딩을 활성화하고, 헤드리스 Chrome 오버헤드를 줄이면 처리량을 크게 향상시킬 수 있습니다. 아래의 팁은 모든 .NET 버전에 동일하게 적용됩니다.

1. 백그라운드 스레드 풀에서 일괄 렌더링

// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;

var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer    = new ChromePdfRenderer();                 // reuse 1 instance

Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
    string html = File.ReadAllText(file);
    using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;

var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer    = new ChromePdfRenderer();                 // reuse 1 instance

Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
    string html = File.ReadAllText(file);
    using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
' BatchRender.cs — Thread-safe on .NET 8+
Imports IronPdf
Imports System.Threading.Tasks

Private htmlSources = Directory.GetFiles("./html", "*.html")
Private renderer = New ChromePdfRenderer() ' reuse 1 instance

Parallel.ForEach(htmlSources, New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file)
	Dim html As String = File.ReadAllText(file)
	Using pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
		pdf.SaveAs(Path.ChangeExtension(file, ".pdf"))
	End Using
End Sub)
$vbLabelText   $csharpLabel

2. 헤드리스 Chrome 시작 비용 절감

IronPDF 자체 Chromium 빌드를 제공하지만, 렌더링할 때마다 약간의 시작 비용이 발생합니다. 풀링은 도움이 되며, Linux 컨테이너에는 두 가지 네이티브 라이브러리가 포함되어야 합니다.

RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0

Missing either library manifests as a libnss3.so not found error in Docker logs.

Recommended Chrome flags (automatically applied by IronPDF) include --disable-gpu and --no-sandbox to reduce memory and root-user issues in containers.

3. 지연된 JavaScript를 기다릴 때는 RenderDelay 또는 WaitFor를 사용하세요

DOMContentLoaded 이후 데이터를 가져오거나 카운터를 애니메이션 하는 페이지는 짧은 지연이 필요할 수 있습니다:

renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
$vbLabelText   $csharpLabel

사용자 지정 프로미스와 DOM 폴링에 대한 자세한 내용은 WaitFor 튜토리얼을 참조하세요.

4. 특정 요청에 대해 디버그 로깅을 활성화합니다.

renderer.LoggingOptions.DebugMode        = true;
renderer.LoggingOptions.LogsToConsole    = true;
renderer.LoggingOptions.LogFilePath      = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode        = true;
renderer.LoggingOptions.LogsToConsole    = true;
renderer.LoggingOptions.LogFilePath      = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode = True
renderer.LoggingOptions.LogsToConsole = True
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log"
$vbLabelText   $csharpLabel

실시간 개발자 도구 추적 기능을 사용하면 코드를 다시 컴파일하지 않고도 누락된 글꼴, 404 이미지 및 타이밍 이벤트를 확인할 수 있습니다.

5. 다시 렌더링하는 대신 템플릿 PDF를 재사용하세요.

송장 실행 시, 자리 표시자와 같은 템플릿 PDF를 생성하고 복잡한 HTML을 다시 생성하지 않고 텍스트 바꾸기를 수행하세요. 속도가 10배 더 빠르고 메모리 사용량도 적습니다.

빠른 튜닝 체크리스트

##

`Parallel.ForEach` , `async/await` 사용하여 단일 `ChromePdfRenderer` 재사용합니다.

##

`aspnet:8.0-jammy` 사용하고 `libnss3` 및 `libatk1.0-0` 설치하세요. `--no-sandbox` 및 `--disable-gpu` 플래그를 사용하세요.

##

SPA 하이드레이션이 느린 경우 `RenderDelay` , `WaitFor()` , DevTools 타임라인 로그를 확인하세요.

추가 자료


무료 체험판은 어디에서 다운로드하고, 라이선스를 선택하고, 전문가 지원을 받을 수 있나요? {#anchor-10-resources}

'무료 체험 시작' 양식을 작성하시면 30일 무료 체험판 키가 즉시 발급되며, 워터마크 없이 HTML-PDF 변환, 디지털 서명, 암호화 등 모든 기능을 이용하실 수 있습니다.

라이브러리를 평가한 후 영구 개발자 라이선스 , 배포 라이선스 또는 Enterprise 라이선스를 선택하십시오. 각 플랜에는 무료 마이너 업데이트, 개발/스테이징/프로덕션 사용 권한, 그리고 30일 환불 보증이 포함됩니다. 키 사용은 한 줄의 코드 (IronPdf.License.LicenseKey = "YOUR-KEY";)로 처리되며 CI/CD 파이프라인에서 자동화될 수 있습니다.

포괄적인 문서 (빠른 시작 가이드 , API 참조튜토리얼 비디오) 는 문서 포털에서 확인할 수 있으며 모든 .NET 릴리스에 맞춰 업데이트됩니다.

엔지니어링 관련 질문은 시카고에 위치한 지원팀에서 실시간 채팅 , 이메일 또는 전화를 통해 영업일 기준 하루 이내에 답변을 받으실 수 있습니다.

성능 튜닝 및 배포 관련 FAQ는 성능 지원 센터에 모여 있습니다.

바로가기 링크

의지 URL 왜 중요한가
30일 무료 체험판 키를 받으세요 https://ironpdf.com/demos/ 워터마크 없이 모든 기능을 사용할 수 있습니다.
라이선스 및 가격 책정 https://ironpdf.com/licensing/ 영구 구독 플랜 또는 정기 구독 플랜; Iron Suite 10개의 라이브러리를 묶어서 제공합니다.
API 참조 https://ironpdf.com/object-reference/api/ 전체 클래스 문서 예를 들어 ChromePdfRenderer
문서 포털 https://ironpdf.com/docs/ 가이드, 튜토리얼, 샘플 프로젝트
성능 지원 https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ 최적화 및 확장 팁
고객 지원팀에 문의하세요. https://ironsoftware.com/contact-us/ 실시간 채팅, 이메일, 전화 지원

다음 단계

  1. MVC 뷰 렌더링부터 AES-256 암호화까지 모든 주요 기능을 보여주는 샘플 저장소를 복제하세요 .
  2. 평가판 키를 기존 솔루션에 연결하고 단위 테스트를 실행하여 플랫폼 간 호환성을 검증하십시오.
  3. 프로젝트별 맞춤 권장 사항을 받으려면 엔지니어링 팀과 실시간 데모를 예약하세요 .

이러한 리소스를 활용하면 모든 .NET 팀은 단 한 번의 스프린트 내에 온프레미스, Docker 또는 서버리스 환경에서 픽셀 단위까지 완벽한 PDF를 제작하여 배포할 수 있습니다.

자주 묻는 질문

.NET Core 에서 HTML을 PDF로 변환하는 방법은 무엇인가요?

.NET Core 에서 IronPDF 라이브러리를 사용하면 HTML을 PDF로 변환할 수 있습니다. 먼저 IronPDF NuGet 패키지를 설치한 다음 ChromePdfRenderer 인스턴스를 생성합니다. RenderHtmlAsPdf 메서드를 사용하여 HTML 문자열을 PDF로 변환할 수 있습니다.

웹사이트 URL을 PDF 문서로 변환하는 방법은 무엇인가요?

웹사이트 URL을 PDF 문서로 변환하려면 IronPDF NuGet 패키지를 설치하고 ChromePdfRenderer 인스턴스를 생성한 다음 RenderUrlAsPdf 메서드를 사용하여 URL을 PDF로 렌더링합니다. 결과는 SaveAs 메서드를 사용하여 저장할 수 있습니다.

Razor 뷰를 PDF로 변환하는 가장 좋은 방법은 무엇인가요?

Razor 뷰를 PDF로 변환하는 가장 좋은 방법은 IronPDF 사용하는 것입니다. 먼저 Razor 뷰를 HTML 문자열로 렌더링한 다음, 이 문자열을 RenderHtmlAsPdf 메서드에 전달하여 PDF 문서를 생성합니다.

PDF 문서의 보안을 강화하려면 어떻게 해야 할까요?

IronPDF 사용하여 AES-256 암호화를 적용하고, 암호를 설정하고, 사용자 권한을 제어하여 PDF 보안을 강화하세요. SecuritySettings 속성을 통해 이러한 설정을 구성하여 인쇄 및 편집과 같은 작업을 제한할 수 있습니다.

PDF 렌더링을 사용자 지정하는 데 사용할 수 있는 옵션은 무엇입니까?

IronPDF ChromePdfRenderOptions 클래스를 통해 용지 크기, 방향, 여백 ​​설정 및 CSS 미디어 유형 적용을 포함한 다양한 렌더링 옵션을 제공합니다. 또한 사용자 지정 문서 출력을 위해 머리글, 바닥글 및 워터마크를 추가할 수 있습니다.

Docker 컨테이너에 PDF 생성 애플리케이션을 배포하려면 어떻게 해야 하나요?

Docker 컨테이너에 PDF 생성 애플리케이션을 배포하려면 Dockerfile에서 Linux 종속성을 구성하고 사용자 권한을 설정해야 합니다. 종속성 자동 관리를 위해 IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig 를 활용하십시오.

C#을 사용하여 PDF에 워터마크를 추가하는 방법은 무엇인가요?

IronPDF 사용하면 HtmlStamp 객체의 Watermark 속성을 이용하여 PDF에 워터마크를 추가할 수 있습니다. 고급 옵션으로는 HtmlStamper 클래스를 통해 사용자 지정 위치 지정 및 투명도 효과를 적용할 수 있습니다.

PDF 문서에 디지털 서명을 추가할 수 있나요?

네, IronPDF의 PdfSignature 클래스를 사용하여 PDF에 디지털 서명을 추가할 수 있습니다. PdfDocument 객체의 Sign 메서드를 사용하고 문서의 무결성과 진위성을 보장하기 위해 인증서 파일을 제공하면 됩니다.

.NET Core 에서 PDF 생성 성능을 최적화하는 방법은 무엇인가요?

스레드로부터 안전한 ChromePdfRenderer 인스턴스를 재사용하고, 멀티스레딩을 활성화하며, 불필요한 헤드리스 Chrome 시작 플래그를 제거하여 PDF 생성 성능을 최적화하세요. 이러한 방법을 통해 애플리케이션의 효율성을 향상시킬 수 있습니다.

이 튜토리얼의 .NET Core HTML-to-PDF 예제는 .NET 10에서도 작동합니까?

네. IronPDF .NET 10과 완벽하게 호환되므로 이 튜토리얼의 ChromePdfRenderer HTML-to-PDF 예제를 핵심 코드 변경 없이 .NET 10 프로젝트에서 사용할 수 있습니다. 주요 차이점은 프로젝트를 생성할 때 .NET 10을 대상으로 지정하고 NuGet 에서 최신 IronPDF 패키지를 설치하여 HTML, Razor 뷰 또는 URL에서 픽셀 단위까지 정확한 PDF를 생성하는 것입니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

검토자:
제프 프리츠
제프리 T. 프리츠
.NET 커뮤니티 팀의 수석 프로그램 관리자
제프는 .NET 및 Visual Studio 팀의 수석 프로그램 관리자이기도 합니다. 그는 .NET Conf 가상 컨퍼런스 시리즈의 총괄 프로듀서이며, 개발자를 위한 라이브 스트림 'Fritz and Friends'를 주 2회 진행하며 시청자들과 함께 기술에 대해 이야기하고 코드를 작성합니다. 제프는 Microsoft Build, Microsoft Ignite, .NET Conf, Microsoft MVP Summit 등 주요 Microsoft 개발자 행사를 위한 워크숍, 프레젠테이션 및 콘텐츠 기획을 담당합니다.
시작할 준비 되셨나요?
Nuget 다운로드 18,318,263 | 버전: 2026.4 방금 출시되었습니다
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronPdf
샘플을 실행하세요 HTML이 PDF로 변환되는 것을 지켜보세요.