# HTML을 PDF로 변환하는 방법 in C# (개발자 가이드)
C#에서 HTML을 PDF로 변환하는 것은 실제 프로젝트가 렌더링, 배포 및 확장 한계를 만날 때까지는 간단해 보입니다. 이 가이드는 IronPDF의 Chrome 기반 엔진을 사용하여 신뢰성 있게 이를 수행하는 방법을 보여주며, 실행해볼 수 있는 작동하는 코드를 시작합니다. 아직 도구를 선택하지 않았다면, [모든 C# HTML-PDF 라이브러리를 비교](/blog/compare-to-other-components/csharp-html-to-pdf-libraries-compared/)하십시오.
*as-heading:2(요약: HTML을 PDF로 변환하는 빠른 시작 가이드)*
IronPDF 라이브러리를 사용하면 C#에서 HTML을 PDF로 쉽게 변환할 수 있으며, HTML, CSS 및 JavaScript에서 고품질 PDF 파일을 생성하기 위해 `ChromePdfRenderer.RenderHtmlAsPdf` 메서드를 제공합니다.
```csharp
:title=Get started making PDFs now!
new IronPdf.ChromePdfRenderer()
.RenderHtmlAsPdf("<p>Hello World</p>")
.SaveAs("pixelperfect.pdf");
```
IronPDF 를 구매하거나 30일 무료 체험판에 가입한 후에는 이메일로 발송된 라이선스 키를 확인하세요. 애플리케이션 시작 부분에 라이선스 키를 입력하세요.
```csharp
IronPdf.License.LicenseKey = "KEY";
```
*이 가이드의 모든 코드는 IronPDF v2026.6.1 · .NET 10 · 2026년 6월에서 검증되었습니다.*
*as-heading:2(C# 개발자에게 HTML-PDF 변환기가 필요한 이유)*
IronPDF 내장된 Google Chromium 렌더링 엔진을 활용하여 웹 콘텐츠의 레이아웃과 스타일을 정확하게 보존하는 고품질 변환을 보장합니다.
✅ **견고한 Chrome 렌더링 엔진:** 정확한 HTML to PDF 변환을 위해 Chrome의 <a href="https://www.chromium.org/blink/" target="_blank" rel="noopener">Blink 엔진</a>을 사용합니다.
✅ **픽셀 완벽한 정확성:** 생성된 PDF는 웹과 정확히 일치하며, 인쇄 친화적인 버전이 아닙니다.
✅ **완전한 최신 웹 지원:** 모든 HTML 요소에 대한 완전한 CSS3, HTML5 및 JavaScript 지원.
✅ **5-20배 성능 향상:** 브라우저 자동화 또는 웹 드라이버보다 상당히 빠름.
✅ **<a href="https://pdfa.org/" target="_blank" rel="noopener">PDF/UA</a> 준수:** <a href="https://www.section508.gov/" target="_blank" rel="noopener">Section 508 기준</a>을 충족하는 접근 가능한 PDF 생성.
✅ **외부 종속성 없음:** 서버에 설치할 실행 파일이 없음.
✅ Designed for C#, F#, and VB.NET on <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview" target="_blank" rel="noopener">.NET 10</a>, <a href="https://learn.microsoft.com/en-us/dotnet/core/releases-and-support" target="_blank" rel="noopener">9, 8, 7, 6, Core, Standard, and Framework</a>.
[[i:(v2026.6.1 (2026년 6월)에 최신 기능: 렌더링 중 HTML 헤딩에서 생성된 자동 PDF 북마크, 클라우드 및 샌드박스 환경을 위한 완전 메모리 내 PDF 선형화, 서명자 인증서 검사가 포함된 ECDSA 디지털 서명, 클릭 가능한 링크 주석, 슬림하고 강화된 Linux 및 Docker 이미지. 전체 릴리스 기록은 전체 변경 로그를 참조하세요.)]]
IronPDF .NET 개발자를 위해 프로세스를 간소화하여 웹 애플리케이션의 HTML에서 전문가 수준의 PDF 문서를 생성하는 간단하고 효율적인 솔루션을 제공합니다. 송장과 보고서부터 인증서와 아카이브에 이르기까지 개발자는 익숙한 웹 스택을 사용하여 작업할 수 있으며, IronPDF 단 몇 줄의 코드로 복잡한 작업을 처리합니다.
**관련 항목:**<a class="content-anchor" href="/product-updates/changelog/">IronPDF 변경 로그: 업데이트, 주요 일정, 로드맵<i class="fa-solid fa-arrow-right"></i></a>
*as-heading:2(무엇을 배우게 될까요?)*
1. [C#을 사용하여 HTML을 PDF로 변환하는 방법](#1-how-to-convert-html-to-pdf-c-num)
[HTML 문자열을 PDF로 변환하는 방법](#how-to-convert-html-string-to-pdf)
[기존 URL을 PDF로 내보내는 방법](#how-to-export-existing-url-to-pdf)
[HTML 파일을 PDF로 변환하는 방법](#how-to-convert-html-file-to-pdf)
- [Razor 페이지를 PDF로 변환하는 방법](#how-to-convert-razor-pages-to-pdf)
- [MVC 뷰를 PDF로 변환하는 방법](#how-to-convert-mvc-views-to-pdf)
2. [HTML을 PDF로 변환하는 설정 방법](#2-how-to-configure-html-to-pdf-settings)
- [사용자 정의 HTTP 헤더, 쿠키 및 로그인 자격 증명 설정 방법](#how-to-set-custom-http-headers-cookies-and-login-credentials)
- [PDF 렌더링을 위한 프록시 구성 방법](#how-to-configure-proxy-for-pdf-rendering)
3. [고급 PDF 생성 및 보안 기능 사용 방법](#3-how-to-use-advanced-pdf-generation-security-features)
- [일괄 PDF 생성을 위한 HTML 템플릿 생성 방법](#how-to-generate-html-template-for-batch-pdf-creation)
- [비동기 방식을 사용하여 PDF를 생성하는 방법](#how-to-generate-pdf-using-async-method)
- [고급 보안 기능 추가 방법](#how-to-add-advanced-security-features)
- [HTML 양식을 채울 수 있는 PDF로 변환하는 방법](#how-to-convert-html-forms-to-fillable-pdfs)
- [특정 HTML 요소를 PDF로 변환하는 방법](#how-to-convert-specific-html-elements-to-pdf)
- [인증된 페이지를 PDF로 렌더링하는 방법](#how-to-render-authenticated-pages-to-pdf)
4. [클라우드 플랫폼에서 HTML을 PDF로 배포하는 방법](#4-how-to-deploy-html-to-pdf-on-cloud-platforms)
- [Azure에 배포하는 방법](#how-to-deploy-on-azure)
- [AWS Lambda에 배포하는 방법](#how-to-deploy-on-aws-lambda)
- [Docker로 배포하는 방법](#how-to-deploy-with-docker)
5. [다른 .NET PDF 라이브러리와 IronPDF 비교](#5-compare-ironpdf-with-other-net-pdf-libraries)
- [빠른 의사 결정 매트릭스: IronPDF 와 다른 .NET PDF 변환기 비교](#quick-decision-matrix-ironpdf-versus-other-net-pdf-converters)
- [상세 비교: IronPDF 와 다른 .NET PDF 변환기 비교](#detailed-comparison-ironpdf-versus-other-net-pdf-converters)
- [실제 HTML을 PDF로 변환 비교: 레딧 홈페이지 렌더링](#real-life-html-to-pdf-conversion-comparison-rendering-reddits-homepage)
- [성능 및 출력 PDF 품질에 대한 결론](#conclusion-on-performance-and-output-pdf-quality)
- [요약](#summary)
6. [문제 해결 및 기술 지원](#6-troubleshooting--technical-support)
- [흔히 발생하는 오류에 대한 빠른 해결 방법](#quick-fixes-on-common-errors)
-[IronPDF 제작한 엔지니어들에게 24시간 언제든 도움을 받으세요](#get-help-from-the-engineers-who-built-ironpdf-247)
*as-heading:2(사용 사례에 맞는 HTML to PDF 경로 선택)*
어디서 시작해야 할지 모르겠나요? 구축 중인 항목에 맞는 경로로 바로 이동하세요:
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>구축 중인 항목</strong></th>
<th><strong>여기서 시작</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><span>단발성 HTML 문자열 변환</span></td>
<td><a class="content-anchor" href="#how-to-convert-html-string-to-pdf">HTML String to PDF <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
<tr>
<td><span>실시간 URL 또는 웹 페이지 아카이빙</span></td>
<td><a class="content-anchor" href="#how-to-export-existing-url-to-pdf">URL to PDF <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
<tr>
<td><span>Razor Pages 또는 MVC 앱 구축</span></td>
<td><a class="content-anchor" href="#how-to-convert-razor-pages-to-pdf">Razor / MVC to PDF <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
<tr>
<td><span>일괄 또는 대량 서버 측 생성</span></td>
<td><a class="content-anchor" href="#how-to-generate-pdf-using-async-method">비동기 및 일괄 생성 <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
</tbody>
</table>
</div>
## 1. How to Convert HTML to PDF C#
IronPDF HTML 문자열, URL 또는 HTML 파일 등 어떤 형식으로 작업하든 사용자의 특정 요구 사항을 충족하는 고품질 PDF 문서를 생성할 수 있는 다양한 옵션을 제공합니다.
이 튜토리얼에서는 HTML 문자열을 PDF로 변환, URL을 PDF로 변환, HTML 파일을 PDF로 변환하는 등 가장 일반적인 시나리오를 단계별로 안내합니다. 또한 IronPDF PDF 문서를 조작하기 위한 다양한 작업 기능을 제공합니다.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>다용도 PDF 변환</strong></th>
<th><strong>동적 웹 페이지를 PDF로 변환</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/html-zip-file-to-pdf/">HTML ZIP 파일을 PDF로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/image-to-pdf/">이미지를 PDF로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/rasterize-pdf-to-images/">PDF에서 이미지로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/docx-to-pdf/">DOCX 파일을 PDF로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/rtf-to-pdf/">RTF 파일을 PDF로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/md-to-pdf/">MD 파일을 PDF로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/xml-to-pdf/">XML을 PDF로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/pdf-to-html/">PDF를 HTML로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/aspx-to-pdf/">ASPX 페이지를 PDF로 변환<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/xaml-to-pdf-maui/">XAML을 PDF로 변환(MAUI)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/csharp-pdf-reports/">PDF 보고서 생성<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/blazor-tutorial/">Blazor 서버에서 PDF 생성하기<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/razor-to-pdf-blazor-server/">Razor PDF로 변환 (Blazor 서버)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-razor/">CSHTML을 PDF로 변환 (Razor Pages)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-core/">CSHTML을 PDF로 변환(MVC 코어)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-framework/">CSHTML을 PDF로 변환 (MVC 프레임워크)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-razor-headlessly/">CSHTML을 PDF로 변환(헤드리스 방식)<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
### HTML 문자열을 PDF로 변환하는 방법
가장 기본적인 작업은 HTML 문자열을 PDF로 변환하는 것입니다. 이 방법은 동적으로 생성되는 HTML 콘텐츠에 적합합니다. `RenderHtmlAsPdf` 메서드는 HTML을 PDF로 직접 변환할 때 HTML5, CSS3, JavaScript 및 이미지를 완전히 지원합니다.
```csharp
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
```
*IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.*
#### 산출
위의 스니펫을 실행하면 IronPDF가 입력한 헤딩과 정확히 일치하는 단일 페이지 PDF를 반환하며, 가능한 가장 간단한 렌더링입니다:
<iframe loading="lazy" title="HTML string to PDF output" src="/static-assets/pdf/tutorials/html-to-pdf/output.pdf#view=fit" width="100%" height="600px" style="border: 1px solid #D9E5E9; border-radius: 8px;">
</iframe>
#### 성능
IronPDF의 문자열, URL 및 HTML을 PDF로 변환하는 성능은 16GB RAM이 탑재된 Lenovo 노트북을 사용하여 측정되었습니다. 테스트 문서는 표준 CSS 그리드, 그라데이션 및 다중 섹션 테이블이 포함된 3페이지 분량의 Enterprise 청구서입니다.
번역 결과는 다음과 같습니다:
| 미터법 |값|
|---|---|
| 평균 렌더링 시간 | ~486 ms |
| 렌더링당 메모리 | ~3.6 MB |
*16코어 워크스테이션(Windows 11, .NET 8)에서 5회 연속 렌더링 결과를 측정함. 첫 호출에는 일회성 Chromium 엔진 초기화 시간(약 1.3초)도 포함됩니다.*
처음 테스트를 실행했을 때 렌더링 속도가 매우 느렸습니다(호출당 1초 이상 소요!). 상황을 살펴본 결과, 여러 개의 Chromium 인스턴스가 실행 중이었고 배터리 전원으로 작동하고 있다는 사실을 깨달았습니다. 이 두 가지 요인 모두 라이브러리가 실제 성능을 제대로 발휘하지 못하게 하는 원인이었습니다. 경쟁 프로세스를 종료하고 연결하자 성능이 개선되었습니다. 웜 런(warm runs)의 평균 시간은 약 486ms였으며, 가장 빠른 기록은 473ms에 가까웠습니다.
[[t:(최근 업데이트에서는 HTML 메타데이터의 특수 문자/이모티코니슈 문제를 해결하고 Linux에서의 중국어 문자를 포함하여 HTML 폼 필드 처리 개선사항이 반영됨. <span style="color: red;">`EnableJavaScript = true`</span>을 사용하여 동적 콘텐츠를 테스트하여 최적의 결과를 얻습니다.)]]
HTML 문자열이 이미지 또는 스타일시트와 같은 로컬 자산을 참조하는 경우, 모든 리소스와 함께 HTML 콘텐츠를 올바르게 변환하려면 `baseUrlOrPath` 매개변수를 사용하십시오.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-2.cs
```
[[t:(baseUrlOrPath는 CSS, JavaScript 및 이미지 파일의 위치를 IronPDF에 알립니다. HTML 문자열에 있는 모든 상대 경로는 이 디렉터리를 기준으로 해석됩니다.
)]]
[[w:(자동 문서 생성을 위해 어떤 라이브러리를 사용하든 간에 주의해야 할 한 가지 문제점은, 참조가 시스템 설정으로 기본값으로 돌아갈 경우 Enterprise 문서에 손상된 요소나 누락된 자산이 발생할 수 있다는 점이며, 이것이 출력물을 테스트하는 것이 중요한 이유입니다. IronPDF는 상대 경로를 올바른 디렉토리에 가리키는 `baseUrlOrPath` 매개변수를 제공하므로 대량 실행 전에 빠른 출력 확인만으로 대부분의 문제를 잡을 수 있습니다.)]]
**관련 사용법 문서:** <a class="content-anchor" href="/how-to/html-string-to-pdf/">C#에서 HTML 문자열을 PDF로 변환하는 방법<i class="fa-solid fa-arrow-right"></i></a>
### 기존 URL을 PDF로 내보내는 방법
C#을 사용하여 웹 페이지 전체를 PDF로 렌더링하면 팀에서 PDF 디자인 작업과 백엔드 렌더링 작업을 분리할 수 있습니다. 이 방법을 사용하면 지정된 URL을 PDF 형식으로 직접 변환할 수 있습니다.
핵심 메서드는 `RenderUrlAsPdf`로 라이브 페이지를 가져와 단일 호출로 렌더링합니다:
```csharp
using IronPdf;
// Create a PDF from any existing web page
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.SaveAs("wikipedia.pdf");
```
#### 산출
여기에서는 `RenderUrlAsPdf`가 라이브 Wikipedia 기사를 캡처하여 정적, 인쇄 준비가 된 PDF로 변환하며, 텍스트, 이미지, 표 및 레이아웃이 모든 33 페이지에 걸쳐 유지됩니다:
<iframe loading="lazy" title="URL (Wikipedia) to PDF output" src="/static-assets/pdf/tutorials/html-to-pdf/wikipedia.pdf#view=fit" width="100%" height="600px" style="border: 1px solid #D9E5E9; border-radius: 8px;">
</iframe>
**인쇄용 CSS vs 화면용 CSS**
IronPDF CSS 미디어 유형을 사용하여 렌더링하도록 구성할 수 있습니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-4.cs
```
**JavaScript 지원**
IronPDF HTML을 PDF로 변환할 때 JavaScript, jQuery는 물론 AJAX까지 완벽하게 지원합니다. 동적 HTML 콘텐츠의 경우, IronPDF 웹 페이지를 PDF로 렌더링하기 전에 JavaScript 완료를 기다리도록 설정할 수 있습니다. 이 기능은 단일 페이지 애플리케이션과 동적 웹사이트에 적합합니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-5.cs
```
웹 페이지에서 PDF 형식으로 고급 d3.js 코드 차트를 렌더링할 때 JavaScript 실행 내역도 표시할 수 있습니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-6.cs
```
*IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.*
**반응형 CSS**
반응형 웹 페이지는 브라우저에서 보기 위해 설계되었으며, IronPDF는 서버의 OS에서 실제 브라우저 창을 열지 않으므로 반응형 HTML 요소는 가장 작은 크기로 렌더링될 수 있습니다. 전체 웹 페이지를 렌더링할 때 이 문제를 다루기 위해 `PdfCssMediaType.Print` 사용이 권장됩니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-7.cs
```
**관련 사용법 문서:** <a class="content-anchor" href="/how-to/url-to-pdf/">URL을 PDF로 변환하는 방법<i class="fa-solid fa-arrow-right"></i></a>
### HTML 파일을 PDF로 변환하는 방법
로컬 HTML 파일을 PDF로 변환하면 CSS, 이미지, JavaScript 포함한 모든 관련 자산이 file:// 프로토콜을 사용하여 열었을 때와 마찬가지로 유지됩니다. 이 HTML을 PDF로 변환하는 방법은 템플릿이나 미리 디자인된 HTML 페이지를 PDF 문서로 변환하는 데 가장 적합합니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-8.cs
```
*IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.*
#### 산출
HTML 송장 템플릿을 가리키면 파일의 전체 디자인(로고, 항목 테이블, 합계)은 추가 코드 없이 픽셀 단위로 완벽하게 구현됩니다:
<iframe loading="lazy" title="HTML file (invoice) to PDF output" src="/static-assets/pdf/tutorials/html-to-pdf/Invoice.pdf#view=fit" width="100%" height="600px" style="border: 1px solid #D9E5E9; border-radius: 8px;">
</iframe>
#### 성능
성능은 모든 변수를 일정하게 유지한 상태에서 디스크의 파일에서 이전 3페이지 분량의 Enterprise 청구서를 렌더링하여 다시 측정했습니다:
| 미터법 |값|
|---|---|
| 평균 렌더링 시간 | ~502 ms |
| 렌더링당 메모리 | ~3.1 MB |
*동일한 16코어 워크스테이션(Windows 11, .NET 8)에서 5회 연속 렌더링 결과를 기준으로 측정되었습니다. 파일 기반 렌더링은 메모리 내 문자열 렌더링과 약 3% 이내의 오차 범위를 보입니다; 디스크에서 HTML을 읽어오는 데는 측정 가능한 오버헤드가 발생하지 않습니다.*
[[t:(HTML 파일을 PDF로 변환하기 전에 편집 및 브라우저에서 테스트할 수 있도록 HTML 파일과 해당 자산(CSS, 이미지)을 별도의 폴더에 보관하세요. 이렇게 하면 고품질 PDF 문서를 위해 HTML이 완벽하게 렌더링됩니다.
)]]
**관련 사용법 문서:** <a class="content-anchor" href="/how-to/html-file-to-pdf/">HTML 파일을 PDF로 변환하기<i class="fa-solid fa-arrow-right"></i></a>
### Razor 페이지를 PDF로 변환하는 방법
ASP.NET Core 프로젝트가 이미 Razor 페이지를 사용하고 있다면, HTML을 다시 작성하지 않고도 직접 PDF로 변환할 수 있습니다. IronPDF의 Razor 확장은 .cshtml 페이지(모델 및 레이아웃 포함)를 가져와 단일 호출로 PDF 문서로 렌더링하는 `RenderRazorToPdf` 메서드를 추가합니다.
```shell
:InstallCmd Install-패키지 IronPdf.Extensions.Razor
```
```csharp
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class ReportModel : PageModel
{
public IActionResult OnGet()
{
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
```
[[i:(RenderRazorToPdf는 ASP.NET Core 웹 앱 프로젝트가 필요합니다. 콘솔 응용 프로그램이나 클래스 라이브러리에서는 작동하지 않습니다; Razor 뷰 엔진이 호스팅 파이프라인에서 사용 가능해야 합니다.)]]
**관련 HOW-TO 기사:** <a class="content-anchor" href="/how-to/cshtml-to-pdf-razor/">Razor 페이지에서 CSHTML을 PDF로 변환하는 방법 <i class="fa-solid fa-arrow-right"></i></a>
### MVC 뷰를 PDF로 변환하는 방법
MVC 패턴을 사용하는 팀은 기존 뷰와 컨트롤러에서 직접 PDF를 생성할 수 있습니다. MVC 코어 확장 패키지를 설치한 후, 뷰 경로 및 모델로 `RenderRazorViewToPdf`를 호출합니다; IronPDF는 Razor 렌더링 파이프라인을 처리하고 완료된 PDF를 출력합니다.
이는 보고서, 청구서 등 HTML이 이미 설계되고 브라우저에서 테스트된 페이지에 특히 유용합니다. 생성된 PDF는 레이아웃 페이지와 부분 뷰를 포함하여 전체 뷰 출력을 보존합니다.
```shell
:InstallCmd Install-패키지 IronPdf.Extensions.Mvc.Core
```
먼저, `IRazorViewRenderer` 서비스를 Program.cs에 등록하여 컨트롤러에서 이를 주입할 수 있도록 합니다:
```csharp
using IronPdf.Extensions.Mvc.Core;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
```
컨트롤러 액션 안에서 렌더러를 주입하고, 임의 뷰를 PDF로 변환하십시오:
```csharp
using IronPdf;
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
private readonly IRazorViewRenderer _viewRenderService;
// Inject the view renderer via constructor
public ReportController(IRazorViewRenderer viewRenderService)
{
_viewRenderService = viewRenderService;
}
public IActionResult Download()
{
var reportModel = new { Title = "Quarterly Report", Total = 1250.00 };
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
```
**관련 HOW-TO 기사:** <a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-core/">ASP.NET Core MVC에서 뷰를 PDF로 변환하는 방법 <i class="fa-solid fa-arrow-right"></i></a>
### 동적 웹 페이지를 PDF로 변환
동적 웹 페이지를 레이아웃과 서식을 그대로 유지하면서 PDF로 변환해야 합니까? 다양한 인기 동적 웹 페이지 프레임워크를 PDF로 빠르게 변환해주는 IronPDF 사용해 보세요.
#### ASPX Pages에서 PDF로 변환
다음은 Active Server Pages에서 ASPX 페이지를 PDF로 변환하는 간단한 코드 예시입니다.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/aspx-to-pdf-2.cs
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/aspx-to-pdf/) 를 참조하십시오.
#### XAML을 PDF로 변환(MAUI)
크로스 플랫폼 애플리케이션 개발을 원하는 개발자들에게 .NET MAUI 프레임워크 중에서 인기 있는 선택지입니다. IronPDF 몇 가지 단계를 거치면 XAML을 PDF로 완벽하게 변환할 수 있습니다.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/xaml-to-pdf-maui-mainpage-xaml-cs.cs
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/xaml-to-pdf-maui/) 를 참조하십시오.
#### PDF 보고서 생성
PDF 보고서를 생성할 때는 정확한 크기와 형식이 매우 중요합니다. 이처럼 IronPDF 사용하면 단 몇 단계만으로 PDF를 원활하게 생성할 수 있습니다.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/csharp-pdf-reports-render-html-file.cs
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/csharp-pdf-reports/) 를 참조하십시오.
#### Blazor 서버에서 PDF 생성하기
IronPDF .NET 6을 지원하며 Blazor 와 같은 프로젝트 유형을 포함하고 있으므로, 이 코드 스니펫은 Blazor 서버에서 PDF를 생성하는 간단한 예제를 제공합니다.
```csharp
@code {
// Model to bind user input
private InputHTMLModel _InputMsgModel = new InputHTMLModel();
private async Task SubmitHTML()
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Create a renderer to convert HTML to PDF
var render = new IronPdf.ChromePdfRenderer();
// Render the HTML input into a PDF document
var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
var fileName = "iron.pdf";
// Create a stream reference for the PDF content
using var streamRef = new DotNetStreamReference(stream: doc.Stream);
// Invoke JavaScript function to download the PDF in the browser
await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
}
public class InputHTMLModel
{
public string HTML { get; set; } = "My new message";
}
}
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/blazor-tutorial/) 를 참조하십시오.
#### Razor 에서 PDF로 변환 (Blazor 서버)
Blazor 서버에서 PDF를 생성하는 것 외에도, IronPDF는 Blazor 페이지 내에서 Razor 구성 요소로부터 PDF 문서를 생성하는 것도 지원합니다. PDF 파일 및 페이지 생성 과정을 훨씬 간소화합니다.
```csharp
[Parameter]
public IEnumerable<PersonInfo> persons { get; set; }
public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
protected override async Task OnInitializedAsync()
{
persons = new List<PersonInfo>
{
new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
}
private async void PrintToPdf()
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply text footer
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} - {time}",
DrawDividerLine = true,
RightText = "Page {page} of {total-pages}",
Font = IronSoftware.Drawing.FontTypes.Arial,
FontSize = 11
};
Parameters.Add("persons", persons);
// Render razor component to PDF
PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);
}
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/razor-to-pdf-blazor-server/) 를 참조하십시오.
#### CSHTML을 PDF로 변환
CSHTML(Razor)을 PDF로 변환하면 웹 애플리케이션에서 바로 전문적인 인쇄용 문서를 생성할 수 있습니다. 이 기능은 송장, 보고서, 계약서 또는 기타 동적 콘텐츠에 유용합니다. IronPDF Razor Pages, MVC Core, MVC Framework는 물론 헤드리스 렌더링도 지원하므로 단 몇 줄의 코드로 PDF 생성을 .NET 애플리케이션에 원활하게 통합할 수 있습니다.
##### CSHTML을 PDF로 변환 (Razor 페이지)
```csharp
using IronPdf.Razor.Pages;
public IActionResult OnPostAsync()
{
persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
ViewData["personList"] = persons;
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor Page to PDF document
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");
}
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/cshtml-to-pdf-razor/) 를 참조하십시오.
##### CSHTML을 PDF로 변환(MVC 코어)
```csharp
public async Task<IActionResult> Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render View to PDF document
PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);
Response.Headers.Add("Content-Disposition", "inline");
// Output PDF document
return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
}
return View(persons);
}
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-core/) 를 참조하십시오.
##### CSHTML을 PDF로 변환(MVC 프레임워크)
```csharp
public ActionResult Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (HttpContext.Request.HttpMethod == "POST")
{
// Provide the path to your view file
var viewPath = "~/Views/Home/Persons.cshtml";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor view to PDF document
PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);
Response.Headers.Add("Content-Disposition", "inline");
// View the PDF
return File(pdf.BinaryData, "application/pdf");
}
return View(persons);
}
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-framework/) 를 참조하십시오.
##### CSHTML을 PDF로 변환(헤드리스 방식)
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/convert-pdf-20.cs
```
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 [사용 설명서](https://ironpdf.com/how-to/cshtml-to-pdf-razor-headlessly/) 를 참조하십시오.
## 2. HTML을 PDF로 변환하는 설정 방법
PDF 문서 조작과 관련하여, IronPDF는 렌더된 PDF에 대한 `ChromePdfRenderer.RenderingOptions` 속성을 통해 광범위한 사용자 지정 기능을 제공합니다.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>설정</strong></th>
<th><strong>설명</strong></th>
<th><strong>예</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span><code>PaperSize</code></span>
</td>
<td>
<span>기존 PDF 파일의 페이지 크기를 설정합니다(A4, Letter, Legal 등).</span>
</td>
<td>
<span><code>PdfPaperSize.A4</code></span>
</td>
</tr>
<tr>
<td>
<span><code>PaperOrientation</code></span>
</td>
<td>
<span>기존 PDF 파일의 방향을 세로 또는 가로로 설정하세요.</span>
</td>
<td>
<span><code>PdfPaperOrientation.Landscape</code></span>
</td>
</tr>
<tr>
<td>
<span><code>MarginTop</code>/<code>Bottom</code>/<code>Left</code>/<code>Right</code></span>
</td>
<td>
<span>페이지 여백을 밀리미터 단위로 설정하세요(기본값: 25mm).</span>
</td>
<td>
<span>25</span>
</td>
</tr>
<tr>
<td>
<span><code>CssMediaType</code></span>
</td>
<td>
<span>HTML을 PDF로 변환할 때 화면 또는 인쇄용 CSS</span>
</td>
<td>
<span><code>PdfCssMediaType.Print</code></span>
</td>
</tr>
<tr>
<td>
<span><code>PrintHtmlBackgrounds</code></span>
</td>
<td>
<span>배경색/이미지 포함(기본값: true)</span>
</td>
<td>
<span>진실</span>
</td>
</tr>
<tr>
<td>
<span><code>EnableJavaScript</code></span>
</td>
<td>
<span>HTML 콘텐츠를 렌더링하기 전에 JavaScript 실행합니다.</span>
</td>
<td>
<span>진실</span>
</td>
</tr>
<tr>
<td>
<span><code>WaitFor.RenderDelay</code></span>
</td>
<td>
<span>동적 HTML 콘텐츠 대기 시간(밀리초)</span>
</td>
<td>
<span>500</span>
</td>
</tr>
</tbody>
</table>
</div>
PDF 문서를 조작하기 위한 전체 구성 예시는 다음 코드 조각을 참조하십시오.
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
```
[[t:(렌더링된 PDF 파일 형식에서 더 깔끔하고 인쇄에 최적화된 레이아웃을 얻으려면 PdfCssMediaType을 사용하십시오. Screen을 사용하여 사용자가 브라우저에서 보는 것과 정확히 일치시키세요.)]]
**관련 사용법 안내 글:**
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>PDF 변환 맞춤 설정</th>
<th>PDF 레이아웃 다듬기</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/rendering-options/">모든 PDF 렌더링 방법을 살펴보세요<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/custom-margins/">사용자 지정 여백 설정 방법<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/color-grayscale/">회색조 이미지 생성 방법<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/table-of-contents/">목차를 추가하는 방법<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/html-to-pdf-page-breaks/">페이지 나누기를 추가하거나 피하는 방법<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/viewport-zoom/">How to Fit to Paper & Zoom <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
### 사용자 정의 HTTP 헤더, 쿠키 및 로그인 자격 증명 설정 방법
인증이나 특정 요청 메타데이터가 필요한 URL을 렌더링할 때, IronPDF는 로그인 자격 증명, 세션 쿠키 및 HTTP 헤더를 요청에 포함할 수 있습니다. 이는 HTML을 별도로 가져올 필요 없이 인트라넷 대시보드, 제한된 보고서 또는 API로 생성된 페이지를 직접 PDF로 렌더링할 수 있게 해 줍니다.
기본 또는 NTLM 인증을 위해 `LoginCredentials` 객체를 렌더러에 설정하십시오. 토큰 기반 또는 세션 기반 접근을 위해 `RenderingOptions`을 통해 쿠키 및 헤더를 전달한 후 `RenderUrlAsPdf`을 호출하십시오.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
```
**관련 HOW-TO 기사:** <a class="content-anchor" href="/how-to/logins/">로그인 인증 뒤의 PDF 렌더링 <i class="fa-solid fa-arrow-right"></i></a> |<a class="content-anchor" href="/how-to/http-request-header/">Custom HTTP Request Headers <i class="fa-solid fa-arrow-right"></i></a>
### PDF 렌더링을 위한 프록시 구성 방법
기업 프록시 뒤에서 외부 리소스를 로드하는 HTML을 렌더링할 때 `RenderHtmlAsPdf()`의 세 번째 매개변수로 프록시 주소를 전달하십시오. 이는 `ChromePdfRenderOptions`의 속성이 아니라 메서드 매개변수이므로 렌더러 인스턴스가 아니라 렌더 호출당 설정됩니다.
인증된 프록시에 대해, `http://user:pass@host:port` 형식을 사용하여 URL에 자격 증명을 직접 포함하십시오. 비밀번호의 특수 문자를 `Uri.EscapeDataString()`으로 URL-인코딩 하십시오.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter, not a render option
var pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.co/rp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
```
참고로 `RenderUrlAsPdf()`은 프록시 매개변수를 허용하지 않습니다. 프록시 뒤에 있는 실시간 URL을 렌더링하려면 먼저 `HttpClient`을 `WebProxy`과 구성하여 HTML을 가져온 다음, 자산 로드를 위한 프록시 매개변수와 함께 `RenderHtmlAsPdf()`에 전달하십시오.
**관련 HOW-TO 기사:** <a class="content-anchor" href="/how-to/proxy/">PDF 렌더링을 위한 프록시 서버 구성 방법 <i class="fa-solid fa-arrow-right"></i></a>
## 3. 고급 PDF 생성 및 보안 기능 사용 방법
고급 템플릿, 비동기 작업 및 보안 기능을 통해 기업 수준의 HTML-PDF 변환 기능을 활용하세요. 이러한 PDF 조작 방법을 사용하면 대규모로 PDF 문서를 생성하고, 중요한 PDF 파일을 보호하며, HTML을 전문적인 PDF 형식으로 변환할 때 문서의 진위성을 보장할 수 있습니다.
### 일괄 PDF 생성을 위한 HTML 템플릿 생성 방법
**기본 일괄 PDF 생성**
일괄 PDF 생성 기능은 여러 개의 개인 맞춤형 PDF 문서를 효율적으로 생성하는 데 필수적입니다. 기본 시나리오에서는 단순한 PDF 조작에 대해 C#의 `String.Format` 메서드가 가장 좋습니다.
```csharp
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
```
PDF 문서를 생성해야 하는 긴 템플릿의 경우 HTML 콘텐츠에서 자리 표시자 대체 기능을 사용하세요.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-16.cs
```
**Handlebars .NET 을 사용한 HTML을 PDF 템플릿으로 변환**
HTML을 PDF로 변환할 때 루프와 조건문이 있는 복잡한 템플릿에 대해, `Handlebars.NET` 고급 템플릿을 사용하여 동적 HTML 콘텐츠로 PDF 문서를 생성하십시오.
```shell
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-패키지 Handlebars.NET
```
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-21.cs
```
**관련 방법 문서:** <a class="content-anchor" href="https://github.com/rexm/Handlebars.NET">GitHub에서 Handlebars.NET에 대해 더 알아보기 <i class="fa-solid fa-arrow-right"></i></a>
<div>
<h4 style="color: #181818;">PDF 페이지 나누기 제어:</h4> 생성된 PDF 문서에서 페이지 매김을 관리하면 HTML 스니펫을 변환할 때 전문적이고 가독성이 뛰어난 레이아웃을 유지할 수 있습니다. CSS를 사용하여 PDF 파일에서 페이지가 나뉘는 위치를 제어하세요.
</div>
```html
<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="print">
.page {
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>Page 1 Content</h1>
</div>
<div class="page">
<h1>Page 2 Content</h1>
</div>
<div class="page">
<h1>Page 3 Content</h1>
</div>
</body>
</html>
```
### 비동기 방식을 사용하여 PDF를 생성하는 방법
IronPDF는 대규모로 PDF 파일을 생성해야 하는 경우 귀하의 HTML을 PDF로 변환하는 요구 사항을 완벽하게 충족하는 <a href="https://learn.microsoft.com/en-us/dotnet/standard/parallel-programming/task-based-asynchronous-programming" target="_blank" rel="noopener">비동기 및 멀티스레딩</a> 지원과 함께 기업급 성능을 제공합니다.
```csharp
using IronPdf;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class PdfGenerationService
{
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> html템플릿)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = html템플릿.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
}
```
*IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.*
[[t:(HTML을 PDF로 변환할 때 성능 최적화 팁)]]
- 최적의 PDF 생성 성능을 위해 64비트 시스템을 사용하십시오.
- PDF 문서를 생성할 때는 충분한 서버 리소스를 확보하십시오 (성능이 부족한 무료 서버는 피하십시오).
- HTML 콘텐츠에 포함된 복잡한 JavaScript 에 대해 충분한 렌더링 지연 시간을 허용하십시오.
- 가능한 경우 `ChromePdfRenderer` 인스턴스를 재사용하십시오.
- 배치/비동기 작업을 위한 최근의 메모리 수정 사항을 활용하여 리소스 사용량을 줄이십시오; 사용자 지정 헤더/푸터를 반복적으로 사용하여 파일 크기를 줄이는 테스트를 진행합니다.
**관련 사용법 문서:** <a class="content-anchor" href="/how-to/async/">비동기 및 멀티스레딩을 사용하여 PDF를 생성하는 방법<i class="fa-solid fa-arrow-right"></i></a>
### 고급 보안 기능을 추가하는 방법
**.NET 에서 PDF 파일에 암호 보호 기능을 추가하는 방법**
HTML 콘텐츠를 보호된 PDF 형식으로 변환할 때 암호와 권한을 사용하여 민감한 PDF 문서를 안전하게 보호하세요.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-24.cs
```
**PDF 파일에 디지털 서명을 추가하는 방법**
HTML 콘텐츠에서 PDF 파일을 생성할 때 PDF 문서의 진위성을 보장하기 위해 암호화 서명을 추가하세요. 서명이 완료되면 [서명을 확인하고 서명자의 인증서를 읽습니다](/how-to/verify-pdf-signatures/) 감사 및 준수 검사입니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-25.cs
```
*IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.*
**관련 사용법 문서:** <a class="content-anchor" href="/how-to/signing/">C#을 사용하여 PDF 문서에 디지털 서명하기<i class="fa-solid fa-arrow-right"></i></a>
### HTML 양식을 채울 수 있는 PDF로 변환하는 방법
표준 HTML 폼 요소를 대화형 작성 가능 PDF 폼 필드로 변환하려면 `CreatePdfFormsFromHtml` 렌더링 옵션을 활성화하십시오. 이는 텍스트 입력, 체크박스, 라디오 버튼 및 드롭다운 메뉴를 생성된 PDF 문서의 편집 가능한 필드로 보존합니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-26.cs
```
{[[w:(HTML의 각 양식 필드에는 고유한 `name` 속성이 있어야 합니다. 중복된 이름은 사용자가 양식을 작성할 때 예기치 않은 동작을 일으키는 PDF에서 필드가 동일한 값을 공유하게 됩니다.)]]
**관련 HOW-TO 기사:** <a class="content-anchor" href="/how-to/create-forms/">C#에서 채울 수 있는 PDF 양식 생성 방법 <i class="fa-solid fa-arrow-right"></i></a>
### 특정 HTML 요소를 PDF로 변환하는 방법
전체 문서보다는 페이지의 특정 섹션을 렌더링하려면 렌더링 전에 대상 요소를 분리하세요. 가장 직접적인 접근 방식은 백분위수를 `JavaScript` 렌더링 옵션을 사용하여 문서 본문을 타깃 요소의 콘텐츠로 대체하는 것이며, 추출 전에 요소가 존재하는지 확인하기 위해 `WaitFor.HtmlQuerySelector()`를 조합한 것입니다. 아래 코드 조각은 `document.head`을 보존하여 스타일시트와 폰트가 유지되도록 합니다; 이 단계가 없으면 상위 선택기를 사용하는 CSS 규칙이 추출된 PDF에서 손실됩니다.
서버 측 시나리오에서 원시 HTML에 액세스할 수 있는 경우, AngleSharp과 같은 해석기를 사용하여 타깃 조각을 추출하고 이를 `RenderHtmlAsPdf()`에 전달하십시오. JavaScript 실행은 필요하지 않습니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-27.cs
```
**관련 HOW-TO 기사:** <a class="content-anchor" href="/how-to/html-element-to-pdf/">HTML 요소 및 부분 페이지를 PDF로 변환하는 방법 <i class="fa-solid fa-arrow-right"></i></a>
### 인증된 페이지를 PDF로 렌더링하는 방법
인증 뒤에 있는 페이지를 렌더링하는 세 가지 메커니즘이 있습니다: 네트워크 로그인 자격 증명, 사용자 정의 쿠키 및 HTTP 요청 헤더. 이는 보호된 웹 콘텐츠를 PDF로 변환할 때 가장 일반적인 인증 시나리오를 다룹니다.
**로그인 자격 증명**
보호된 URL을 PDF로 변환할 때 기본, 다이제스트, 또는 NTLM 인증을 위해 `ChromeHttpLoginCredentials`을 사용하십시오.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-28.cs
```
**쿠키 및 HTTP 헤더**
토큰 기반 또는 세션 기반 인증의 경우, 사용자 정의 쿠키 및 HTTP 헤더를 렌더링 요청에 직접 첨부하세요.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-29.cs
```
[[t:(HTML 양식 기반 로그인(POST 사용자 이름/암호)의 경우 `HttpClient`을 처음 인증하고, `CustomCookies` 사전에 결과 쿠키를 전달하여 보호된 페이지를 렌더링하는 것을 고려하세요.)]]
**관련 HOW-TO 기사:** <a class="content-anchor" href="/how-to/logins/">로그인 인증 뒤의 HTML을 PDF로 변환하는 방법 <i class="fa-solid fa-arrow-right"></i></a>
### 여러 HTML 조각에서 PDF를 어떻게 생성하나요?
HTML 조각을 결합하여 PDF를 생성하려면 [병합](https://ironpdf.com/examples/merge-pdfs/)할 수 있습니다. 이렇게 하면 여러 섹션의 보고서를 생성하거나 서로 다른 소스에서 콘텐츠를 결합할 수 있습니다:
```cs
var renderer = new ChromePdfRenderer();
PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");
PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");
var merged = PdfDocument.Merge(part1, part2);
merged.SaveAs("Merged.pdf");
// Alternative approach: copy specific pages
var combinedDoc = new PdfDocument();
combinedDoc.CopyPage(part1, 0); // Copy first page
combinedDoc.CopyPage(part2, 0); // Copy first page
combinedDoc.SaveAs("Combined.pdf");
```
서로 다른 HTML 조각에서 여러 섹션의 보고서를 생성할 때 유용합니다. 탐색을 개선하기 위해 [북마크를 추가](https://ironpdf.com/how-to/bookmarks/)할 수 있습니다.

### 웹 API에서 HTML을 PDF로 어떻게 변환하나요?
ASP.NET Web API에서 [MemoryStream](https://ironpdf.com/how-to/pdf-to-memory-stream/)을 사용하여 디스크에 저장하지 않고 PDF를 생성하고 반환합니다. 이 패턴은 [Blazor 애플리케이션](https://ironpdf.com/how-to/blazor-tutorial/) 및 RESTful 서비스에 이상적입니다:
```cs
[HttpGet("download")]
public IActionResult GetPdf()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Web Report</h1><p>Generated dynamically.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;
// Optional: Add metadata
pdf.MetaData.Author = "API Service";
pdf.MetaData.CreationDate = DateTime.Now;
return File(bytes, "application/pdf", "report.pdf");
}
```
이 패턴은 .NET 10 웹 애플리케이션에서 서버 측 PDF 생성에 매우 적합합니다. MVC 애플리케이션의 [CSHTML 뷰](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-core/)와 통합할 수 있습니다.
### 헤더, 워터마크 및 보안을 추가하는 방법
#### 전문적인 헤더 및 푸터 추가
페이지 번호, 날짜, 또는 브랜드를 표시하는 헤더 및 푸터는 다중 페이지 문서를 훨씬 더 읽기 쉽게 하고 전문적으로 보이게 만듭니다. IronPDF는 이들을 HTML 조각으로 처리하므로 이미지와 브랜드 색상을 포함한 전체 CSS 스타일을 사용할 수 있습니다:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
MaxHeight = 50,
HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
BaseUrl = new Uri(@"file:///C:/assets/")
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 30,
HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");
pdf.SaveAs("report-with-headers.pdf");
```
`{page}` 및 `{total-pages}` 같은 플레이스홀더는 렌더링 시간에 자동으로 대체됩니다. 동적 날짜 삽입, 로고 배치, 교차 페이지 스타일에 대한 [헤더 및 푸터 튜토리얼](https://ironpdf.com/how-to/headers-and-footers/)을 검토하십시오.
#### 워터마크, 암호화 및 디지털 서명 적용
워터마크는 초안 문서 및 기밀 보고서를 보호합니다. 암호 보호 및 권한 설정은 PDF를 인쇄, 복사, 또는 편집할 수 있는 사람을 제한합니다. 디지털 서명은 계약서 및 규제 문서에 대해 입증 가능한 진위층을 추가합니다. 단일 워크플로우에서 이 세 가지를 모두 결합할 수 있습니다:
```csharp
using IronPdf;
using System.Security.Cryptography.X509Certificates;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");
// Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation: 45,
opacity: 30
);
// Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
// Digital signature
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");
var signature = new PdfSignature(cert)
{
SigningContact = "Jane Smith",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
```
[워터마크 기법](https://ironpdf.com/how-to/custom-watermark/), [PDF 보안 설정](https://ironpdf.com/how-to/pdf-permissions-passwords/) 및 하드웨어 보안 모듈을 위한 HSM 통합을 포함한 [인증서 기반 서명](https://ironpdf.com/examples/digitally-sign-a-pdf/)에 대해 알아보십시오.
## 4. 클라우드 플랫폼에서 HTML을 PDF로 배포하는 방법
클라우드 환경에서 HTML을 PDF로 변환하려면 헤드리스 렌더링, 임시 파일 경로 및 리소스 할당을 위한 특정 구성이 필요합니다. 이 섹션은 IronPDF와 함께 가장 일반적인 클라우드 플랫폼 및 컨테이너화된 배포를 다룹니다.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>플랫폼</th>
<th>최소 리소스</th>
<th>패키지</th>
<th>자동 구성</th>
<th>임시 경로</th>
<th>핵심 주의 사항</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>Azure 앱 서비스</span>
</td>
<td>
<span>B1 등급 (기본)</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp</span>
</td>
<td>
<span>무료/공유 단계는 실패 (GPU 없음, 낮은 메모리)</span>
</td>
</tr>
<tr>
<td>
<span>Azure Functions(Windows)</span>
</td>
<td>
<span>B1 등급</span>
</td>
<td>
<span><code>IronPdf</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp</span>
</td>
<td>
<span>"패키지 파일에서 실행" 체크 해제</span>
</td>
</tr>
<tr>
<td>
<span>AWS 람다</span>
</td>
<td>
<span>512 MB / 60초 제한 시간</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp (필수)</span>
</td>
<td>
<span>기본 파일 시스템은 읽기 전용</span>
</td>
</tr>
<tr>
<td>
<span>Docker (Ubuntu/Debian)</span>
</td>
<td>
<span>이미지 종속</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>false</code></span>
</td>
<td>
<span>이미지 기본값</span>
</td>
<td>
<span><code>false</code> 설정 (Dockerfile이 종속성을 처리합니다)</span>
</td>
</tr>
</tbody>
</table>
</div>
### Azure에 배포하는 방법
Azure Functions 또는 App Service에 배포할 때 GPU 가속을 비활성화하고 Chrome 기반 렌더링에 충분한 메모리를 제공하는 호스팅 등급을 확인하세요. 애플리케이션 시작 시점에 렌더링 호출 전에 이 설정을 추가하세요.
Azure 샌드박스는 헤드리스 모드로 실행되며 GPU 접근이 없고, 무료/공유 등급(F1, D1)은 Chrome이 필요한 리소스를 제공하지 않습니다. B1 (기본) 등급 이상을 대상으로 하세요.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-30.cs
```
[[e:(Azure App Service 무료 및 공유 등급(F1, D1)은 Chrome 기반 PDF 렌더링을 위한 충분한 리소스를 가지고 있지 않습니다. 최소 B1 (기본) 등급을 사용하여 메모리 부족 오류 및 프로세스 타임아웃을 피하십시오.)]]
**관련 시작 가이드:** <a class="content-anchor" href="/get-started/azure/">Azure에서 IronPDF 배포하는 방법 <i class="fa-solid fa-arrow-right"></i></a>
### AWS Lambda에 배포하는 방법
AWS Lambda는 Chrome 기반 PDF 렌더링을 위한 Docker 기반 배포가 필요합니다. 기본 Lambda 파일 시스템은 읽기 전용이므로 모든 임시 및 배포 경로는 `/tmp`를 가리켜야 합니다.
렌더링 호출 전에 함수 처리기 상단에서 이러한 설정을 구성하세요.
```csharp
using Amazon.Lambda.Core;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
```
[[i:(Lambda 함수를 최소 **512 MB 메모리**와 **60초 타임아웃**으로 설정하세요. Chrome 기반 렌더링은 메모리 소모가 크며, 콜드 스타트는 임베디드 브라우저 엔진을 초기화하는 데 추가 시간이 필요합니다.)]]
**관련 시작 가이드:** <a class="content-anchor" href="/get-started/aws/">AWS Lambda에 IronPDF를 배포하는 방법 <i class="fa-solid fa-arrow-right"></i></a>
### Docker로 배포하는 방법
Docker 배포의 경우 이미지 크기를 줄이고 런타임 자산 다운로드를 피하기 위해 `IronPdf.Linux` NuGet 패키지를 사용하세요. 이 패키지는 컨테이너화된 환경에 최적화된 리눅스 기반 바이너리를 미리 번들로 포함합니다.
Dockerfile이 이미 `apt-get`을 통해 Chrome의 공유 라이브러리 종속성을 설치한 경우 `LinuxAndDockerDependencies자동 구성 = false`을 설정하세요. 런타임 자동 설치는 그럴 경우 중복되며 권한 오류나 더 긴 콜드 스타트를 발생시킬 수 있습니다.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>플랫폼</th>
<th>패키지</th>
<th>핵심 구성</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>우분투 22.04 / 데비안</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>기본값, 즉시 작동</span>
</td>
</tr>
<tr>
<td>
<span>알파인 리눅스</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>Dockerfile에서 apk를 통해 Chromium 설치</span>
</td>
</tr>
<tr>
<td>
<span>아마존 리눅스 2</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>LinuxAndDockerDependencies자동 구성 = true</code> 사용</span>
</td>
</tr>
<tr>
<td>
<span>Windows 컨테이너</span>
</td>
<td>
<span><code>IronPdf</code></span>
</td>
<td>
<span>추가 구성이 필요 없음</span>
</td>
</tr>
</tbody>
</table>
</div>
<br />
Ubuntu/Debian 기반 이미지를 위한 최소 다중 단계 Dockerfile:
```dockerfile
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:10.0
# Install Chrome dependencies for PDF rendering
RUN apt-get update && apt-get install -y \
libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libxshmfence1 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
```
<br />
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-33.cs
```
*IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.*
**관련 시작 가이드:** <a class="content-anchor" href="/get-started/ironpdf-docker/">Docker에서 IronPDF 사용 방법 <i class="fa-solid fa-arrow-right"></i></a>
### .NET Core 에서 HTML을 PDF로 변환하는 성능을 최적화하고 확장하는 방법은 무엇일까요?
IronPDF의 Chromium 엔진은 이미 최신 하드웨어에서 대부분의 페이지를 < 1초 이내에 렌더링하지만, **렌더링 배치, 멀티스레딩 활성화 및 Headless Chrome 오버헤드 최소화**로 처리량을 곱할 수 있습니다. 아래의 팁은 모든 .NET 버전에 동일하게 적용됩니다.
#### 1. 백그라운드 스레드 풀에서 일괄 렌더링
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
```
- `ChromePdfRenderer`는 **[스레드 안전성](/examples/threading/)**을 가지고 있습니다; 단일 인스턴스가 교착 상태 없이 수십 개의 동시 작업을 처리할 수 있습니다.
- `Parallel.ForEach`는 모든 CPU 코어를 포화시킵니다; 일반적인 서버는 단일 스레드 루프와 비교하여 4–6배 처리량 증가를 봅니다.
- ASP.NET 요청이 대기열에 쌓이는 경우, 응답 시간을 낮추기 위해 [렌더링 작업이 많은 경우 호스팅된 백그라운드 서비스 또는 메시지 큐로 이동하세요](https://stackoverflow.com/questions/65237160/ironpdf-deadlocks-when-running-in-parallel) .
#### 2. Headless Chrome 시작 비용 줄이기
IronPDF 자체 Chromium 빌드를 제공하지만, 렌더링할 때마다 약간의 시작 비용이 발생합니다. 풀링은 도움이 되며, **Linux 컨테이너에는** 두 가지 네이티브 라이브러리가 포함되어야 합니다.
```dockerfile
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0
```
라이브러리가 누락된 경우 Docker 로그에 `libnss3.so not found` 오류로 표시됩니다.
[IronPDF에서 자동으로 적용되는 Chrome 플래그](https://stackoverflow.com/questions/66947545/chrome-headless-not-working-as-root-with-no-sandbox)에는 컨테이너의 메모리 및 루트 사용자 문제를 줄이기 위해 `--disable-gpu` 및 `--no-sandbox`가 포함됩니다.
#### 3. `RenderDelay` 또는 `WaitFor`와 함께 늦은 JavaScript 기다리기
`DOMContentLoaded` 후에 데이터 카운터를 애니메이션화하거나 가져오는 페이지는 짧은 지연을 필요로 할 수 있습니다:
```csharp
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
```
사용자 지정 프로미스와 DOM 폴링에 대한 자세한 내용은 **[WaitFor 튜토리얼을](/how-to/waitfor/)** 참조하세요.
#### 4. 특정 요청에 대해 디버그 로깅을 활성화합니다.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
```
실시간 개발자 도구 추적 기능을 사용하면 코드를 다시 컴파일하지 않고도 누락된 글꼴, 404 이미지 및 타이밍 이벤트를 확인할 수 있습니다.
#### 5. 다시 렌더링하는 대신 템플릿 PDF를 재사용하세요.
송장 실행의 경우 [플레이스홀더가 포함된 **템플릿 PDF**를 생성](/troubleshooting/ironpdf-performance-assistance/)하고 복잡한 HTML을 다시 구축하는 대신 텍스트 교체를 수행합니다. 속도가 10배 더 빠르고 메모리 사용량도 적습니다.
#### 추가 자료
- 방법 – [동기/멀티스레딩으로 PDF 생성](/how-to/async/)
- 문제 해결 – [성능 지원 센터](/troubleshooting/ironpdf-performance-assistance/)
- 예제 – [스레드 렌더링 데모](/examples/threading/)
---
## 5. 다른 .NET PDF 라이브러리와 IronPDF 비교
IronPDF 강력한 Chromium 기반 렌더링 엔진, 직관적인 API 및 잦은 제품 개선 덕분에 C# PDF 생성과 관련하여 많은 팀에서 선택하는 솔루션입니다. 여러분의 PDF 생성 요구에 가장 적합한 PDF 변환기를 찾기 위해 IronPDF 다른 PDF 변환기와 비교해 보겠습니다.
### 무료 및 오픈 소스 대안
고려될 수 있는 도구들:
- **PuppeteerSharp:** 헤드리스 Chrome을 구동하는 Puppeteer의 MIT 라이센스 .NET 포트.
- **.NET Playwright:** Microsoft의 Apache-2.0 자동화 라이브러리로, 역시 Chromium 기반.
- **wkhtmltopdf:** 오래된 독립 실행형 HTML-to-PDF 바이너리.
- **네이티브 브라우저 루트:** 헤드리스 브라우저 또는 OS 인쇄 드라이버에서 직접 PDF로 인쇄.
먼저 드로 예정인 구별: PuppeteerSharp 그리고 Playwright는 PDF 라이브러리라기보다는 브라우저 자동화 프레임워크입니다. 이들은 실제 Chromium 상단에 PDF로 인쇄하는 호출을 노출하므로 렌더링 충실도가 뛰어나지만 머릿글과 바닥글, 암호화, 서명, PDF/A와 같은 PDF 특정 사항과 브라우저의 수명 주기는 직접 처리해야 합니다: Chromium 바이너리 배송 및 업데이트, 동시성 처리와 충돌 복구, 손으로 문서 구조를 만들어야 합니다. Playwright는 초기에 알아두면 좋은 제약 사항을 추가합니다: `PdfAsync`는 헤드리스 Chromium(아니라면 FireFox 또는 WebKit)에서만 실행되므로, 배포 환경에서는 헤드리스 Chrome을 보장해야 합니다. 이는 컨테이너 및 서버리스 환경에서 중요합니다.
wkhtmltopdf는 또 다르게 자리합니다. 프로젝트는 2024년에 아카이브되었으며 최종 릴리스(0.12.6, 2020)는 ~2012년 Qt WebKit 엔진을 실행하며 더 이상의 보안 패치를 받지 않으며 보안 미설정 심각한 SSRF 자문(CVE-2022-35583)을 포함합니다; 신뢰할 수 있는 입력에 대한 간단한 정적 문서에는 여전히 작업 가능하지만, 대외적 결과물에는 덜 작용합니다. 네이티브 브라우저 경로는 어떤 라이브러리도 필요하지 않으며, 어떤 .NET-본질적 PDF API나 서버 사이드 자동화에 대한 실제 제어를 가지는 데 큰 다운사이드를 가지는 것입니다.
프로토타입, 내장 도구, 제로 예산 작업에 대해, 이러한 대안들은 유효한 선택입니다. 아래 비교는 기능별로 상용 라이브러리를 다룹니다.
### 빠른 의사 결정 매트릭스: IronPDF 와 기타 .NET PDF 변환기 비교
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>해결책</th>
<th>사용 시점</th>
<th>~에 가장 적합함</th>
</tr>
</thead>
<tbody>
<tr style="background-color: #f8fdff;">
<td>
<span><strong>IronPDF</strong></span>
</td>
<td>
<span>최신 웹사이트/HTML을 원본과 동일한 시각적 품질로 PDF로 변환합니다.</span>
</td>
<td>
<span>안정적인 HTML 렌더링 엔진, 동적 콘텐츠 및 전문적인 지원이 필요한 기업용 애플리케이션.</span>
</td>
</tr>
<tr>
<td>
<span>wkhtmltopdf</span>
</td>
<td>
<span>구식 렌더링이 허용되는 중요하지 않은 애플리케이션에서 간단한 HTML 변환입니다.</span>
</td>
<td>
<span>기존 HTML/CSS를 이용한 기본 문서 생성.</span>
</td>
</tr>
<tr>
<td>
<span>Syncfusion</span>
</td>
<td>
<span>이미 Syncfusion 생태계에 투자했거나 무료 커뮤니티 라이선스를 받을 자격이 있는 경우.</span>
</td>
<td>
<span>여러 Syncfusion 구성 요소를 사용하는 조직.</span>
</td>
</tr>
<tr>
<td>
<span>Aspose.PDF</span>
</td>
<td>
<span>HTML 렌더링 품질이 덜 중요한 경우 복잡한 PDF 조작.</span>
</td>
<td>
<span>HTML 변환 기능 외에도 다양한 PDF 편집 기능을 제공합니다.</span>
</td>
</tr>
</tbody>
</table>
</div>
**관련 비교:**
<ul>
<li><a class="content-anchor" href="/competitors/syncfusion-vs-ironpdf/">IronPDF 와 Syncfusion을 비교해 보세요.<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/competitors/aspose-vs-ironpdf/">IronPDF 와 Aspose를 비교해 보세요.<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
### IronPDF 와 다른 .NET PDF 변환기 비교: 상세 분석
<details class="comparison-toggle">
<summary>Show the full feature-by-feature table (10 .NET PDF libraries)</summary>
<div>
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full min-w-[1000px] border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-bold [&_th]:text-[#181818] [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-3 [&_td]:text-center [&_td]:align-middle [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_a]:underline [&_.iron-col]:bg-[#F1F9FB] [&_.recommended]:block [&_.recommended]:text-[11px] [&_.recommended]:font-bold [&_.recommended]:text-[#E01A59] [&_.col-name]:block [&_.col-name]:text-sm [&_.col-name]:font-bold [&_.section-row_td]:bg-[#F5F8FA] [&_.section-row_td]:font-bold [&_.section-row_td]:uppercase [&_.section-row_td]:tracking-wide [&_.section-row_td]:text-xs [&_.section-row_td]:text-[#5A6B77] [&_.chip]:inline-block [&_.chip]:whitespace-nowrap [&_.chip]:rounded [&_.chip]:px-2 [&_.chip]:py-0.5 [&_.chip]:text-xs [&_.chip]:font-semibold [&_.chip-full]:bg-[#E8F6F1] [&_.chip-full]:text-[#44806B] [&_.chip-good]:bg-[#E8F6F1] [&_.chip-good]:text-[#44806B] [&_.chip-free]:bg-[#E8F6F1] [&_.chip-free]:text-[#44806B] [&_.chip-partial]:bg-[#FFF2DA] [&_.chip-partial]:text-[#A66E0A] [&_.chip-limited]:bg-[#FFF2DA] [&_.chip-limited]:text-[#A66E0A] [&_.chip-no]:bg-[#FFE1E2] [&_.chip-no]:text-[#A8181D] [&_.chip-iron]:bg-[#DEEFFC] [&_.chip-iron]:text-[#1D629B] [&_.price-val]:block [&_.price-val]:font-bold [&_.price-note]:mt-0.5 [&_.price-note]:block [&_.price-note]:text-[11px] [&_.price-note]:leading-snug [&_.price-note]:text-[#5A6B77] [&_.winner-tag]:ml-1 [&_.winner-tag]:inline-block [&_.winner-tag]:rounded [&_.winner-tag]:bg-[#E8F6F1] [&_.winner-tag]:px-1.5 [&_.winner-tag]:py-0.5 [&_.winner-tag]:text-[11px] [&_.winner-tag]:font-bold [&_.winner-tag]:text-[#44806B]">
<thead>
<tr>
<th>특징</th>
<th class="iron-col">
<span class="recommended">★ 추천:</span>
<span class="col-name">IronPDF</span>
</th>
<th>wkhtmltopdf</th>
<th>iText</th>
<th>Aspose.PDF</th>
<th>Syncfusion</th>
<th>아프라이즈</th>
<th>PDF 선택</th>
<th>Spire.PDF</th>
<th>PDFsharp</th>
<th>QuestPDF</th>
</tr>
</thead>
<tbody>
<tr class="section-row">
<td colspan="11">렌더링 및 변환</td>
</tr>
<tr>
<td>렌더링 정확도</td>
<td class="iron-col">픽셀 단위까지 완벽한 <span class="winner-tag">최고</span></td>
<td>인쇄 스타일</td>
<td>프로그래밍 방식 전용</td>
<td>좋은</td>
<td>좋은</td>
<td>좋은</td>
<td>좋은</td>
<td>저수준</td>
<td>렌더링 안 함</td>
<td>코드 우선 레이아웃</td>
</tr>
<tr>
<td>HTML5 지원</td>
<td class="iron-col"><span class="chip> chip-full">가득한</span></td>
<td><span class="chip> chip-limited">구식</span></td>
<td><span class="chip> chip-partial">추가 기능</span></td>
<td><span class="chip> chip-partial">부분적</span></td>
<td><span class="chip> chip-full">가득한</span></td>
<td><span class="chip> chip-partial">기준 치수</span></td>
<td><span class="chip> chip-full">가득한</span></td>
<td><span class="chip> chip-limited">제한된</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">아니요 (코드 우선)</span></td>
</tr>
<tr>
<td>CSS3 지원</td>
<td class="iron-col"><span class="chip> chip-full">가득한</span></td>
<td><span class="chip> chip-limited">제한된</span></td>
<td><span class="chip> chip-partial">추가 기능</span></td>
<td><span class="chip> chip-partial">부분적</span></td>
<td><span class="chip> chip-full">가득한</span></td>
<td><span class="chip> chip-partial">기준 치수</span></td>
<td><span class="chip> chip-full">가득한</span></td>
<td><span class="chip> chip-limited">제한된</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">아니요 (코드 우선)</span></td>
</tr>
<tr>
<td>JavaScript 실행</td>
<td class="iron-col">
<span class="winner-tag">최상의</span>
<span class="chip> chip-full">결과</span>
</td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-limited">논쟁 중</span></td>
<td><span class="chip> chip-partial">제한된</span></td>
<td><span class="chip> chip-partial">제한된</span></td>
<td><span class="chip> chip-partial">제한된</span></td>
<td><span class="chip> chip-limited">매우 제한적임</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">아니요</span></td>
</tr>
<tr>
<td>HTML→PDF (모던 레이아웃)</td>
<td class="iron-col">임베디드 Chrome <span class="winner-tag">베스트</span></td>
<td>Qt WebKit (구버전)</td>
<td>유료 추가 기능</td>
<td>부분적; JS 분쟁</td>
<td>블링크 엔진</td>
<td>모듈이 필요합니다</td>
<td>전체 HTML→PDF</td>
<td>이미지 기반</td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">HTML 렌더러가 아닙니다.</span></td>
</tr>
<tr>
<td>PDF→이미지 렌더링</td>
<td class="iron-col"><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-partial">예</span></td>
<td><span class="chip> chip-partial">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-partial">제한된</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-partial">본인 소유 문서만 사용</span></td>
</tr>
<tr class="section-row">
<td colspan="11">문서 작업</td>
</tr>
<tr>
<td>PDF 파일을 프로그램으로 생성하기</td>
<td class="iron-col"><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-partial">HTML 전용</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-good">기초적인</span></td>
<td><span class="chip> chip-full">예 (Fluent API)</span></td>
</tr>
<tr>
<td>병합, 분할 및 재배열</td>
<td class="iron-col"><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-partial">제한된</span></td>
<td><span class="chip> chip-full">예</span></td>
</tr>
<tr>
<td>머리글/바닥글/페이지 번호</td>
<td class="iron-col">HTML/텍스트/이미지 <span class="winner-tag">최적</span></td>
<td>제한된</td>
<td>예</td>
<td>이벤트를 통해</td>
<td>이벤트를 통해</td>
<td>예</td>
<td>템플릿</td>
<td>수동</td>
<td>수동 전용</td>
<td><span class="chip> chip-full">일등석 슬롯</span></td>
</tr>
<tr>
<td>워터마크 및 스탬핑</td>
<td class="iron-col"><span class="chip> chip-full">텍스트 및 이미지</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-partial">제한된</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">예 (오버레이)</span></td>
</tr>
<tr>
<td>PDF에서 텍스트 추출</td>
<td class="iron-col"><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-good">기초적인</span></td>
<td><span class="chip> chip-no">아니요</span></td>
</tr>
<tr>
<td>스캔한 PDF 파일의 OCR 처리</td>
<td class="iron-col">IronOCR <span class="winner-tag">통합을</span> 통해</td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-partial">추가 기능</span></td>
<td><span class="chip> chip-partial">별도 제품</span></td>
<td><span class="chip> chip-partial">추가 기능</span></td>
<td><span class="chip> chip-partial">추가 기능</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-partial">해결 방법</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">아니요</span></td>
</tr>
<tr class="section-row">
<td colspan="11">보안 및 규정 준수</td>
</tr>
<tr>
<td>디지털 서명</td>
<td class="iron-col"><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-good">샘플 코드</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-no">문서화되지 않음</span></td>
</tr>
<tr>
<td>PDF/A 규정 준수</td>
<td class="iron-col"><span class="chip> chip-full">예 (PDF/A-3B)</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">전체 PDF/A</span></td>
<td><span class="chip> chip-full">유효성 검사 및 생성</span></td>
<td><span class="chip> chip-good">네이티브 SDK가 필요합니다.</span></td>
<td><span class="chip> chip-good">PDFA 준수</span></td>
<td><span class="chip> chip-no">아니요</span></td>
<td><span class="chip> chip-full">예</span></td>
<td><span class="chip> chip-partial">제한된</span></td>
<td><span class="chip> chip-full">PDF/A-2배 및 3배</span></td>
</tr>
<tr class="section-row">
<td colspan="11">플랫폼 및 개발자 경험</td>
</tr>
<tr>
<td>크로스 플랫폼</td>
<td class="iron-col">Windows · Linux · macOS <span class="winner-tag">모두 3가지</span></td>
<td>바이너리에 따라 다릅니다</td>
<td>.NET Standard 2.0</td>
<td>Linux 추가 설정</td>
<td>블링크 + .NET 서버</td>
<td>네이티브 SDK</td>
<td>Windows 전용 *</td>
<td>제한된 Linux 문서</td>
<td>윈도우 중심</td>
<td><span class="chip> chip-full">윈도우/리눅스/맥오브제네시스</span></td>
</tr>
<tr>
<td>클라우드 및 Docker 배포</td>
<td class="iron-col">Azure · AWS · Docker <span class="winner-tag">최고</span></td>
<td>복잡한; 유산</td>
<td>여러 패키지</td>
<td>부분적; 컨테이너</td>
<td>Blink 추가 기능 필요</td>
<td>네이티브 뎁스</td>
<td>윈도우 전용</td>
<td>제한된 정보</td>
<td>간단하고 가볍습니다.</td>
<td><span class="chip> chip-full">Docker/K8s; 로컬</span></td>
</tr>
<tr class="section-row">
<td colspan="11">지원 및 문서</td>
</tr>
<tr>
<td>문서</td>
<td class="iron-col">자세한 내용 + 복사/붙여넣기 <span class="winner-tag">최고</span></td>
<td>부분 CLI 문서</td>
<td>광범위한; KB</td>
<td>광범위한; GitHub</td>
<td>도움말 센터</td>
<td>다국어 카탈로그</td>
<td>시작 가이드</td>
<td>프로그램 가이드</td>
<td>커뮤니티 가이드</td>
<td><span class="chip> chip-full">구조화된 + 동반 앱</span></td>
</tr>
<tr>
<td>개발자 지원</td>
<td class="iron-col">24시간 연중무휴 엔지니어 <span class="winner-tag">최고의 서비스</span></td>
<td>커뮤니티 전용</td>
<td>구독 포함</td>
<td>포럼 + 유료</td>
<td>24시간 연중무휴 다이렉트 트랙</td>
<td>광고</td>
<td>이메일</td>
<td>포럼 + 이메일</td>
<td>커뮤니티 전용</td>
<td><span class="chip> chip-partial">커뮤니티 + GitHub</span></td>
</tr>
<tr class="section-row">
<td colspan="11">라이선스 및 가격</td>
</tr>
<tr>
<td>라이선스 모델</td>
<td class="iron-col"><span class="chip> chip-iron">빈번한</span></td>
<td><span class="chip> chip-free">오픈 소스</span></td>
<td><span class="chip> chip-partial">AGPL / 구독</span></td>
<td><span class="chip> chip-good">빈번한</span></td>
<td><span class="chip> chip-partial">연간 구독</span></td>
<td><span class="chip> chip-partial">맞춤형/소비</span></td>
<td><span class="chip> chip-good">빈번한</span></td>
<td><span class="chip> chip-good">빈번한</span></td>
<td><span class="chip> chip-free">무료 (MIT)</span></td>
<td><span class="chip> chip-free">MIT 무료/유료 등급</span></td>
</tr>
<tr>
<td>시작 가격</td>
<td class="iron-col">
<span class="price-val iron-price">
<a href="https://ironpdf.com/licensing/">$liteLicense</a>
</span>
<span class="price-note">영구 라이선스 · 개발자 1명</span>
</td>
<td><span class="price-val"> style="color:#16a34a">무료</span></td>
<td>
<span class="price-val">~연간 ,000</span>
<span class="price-note">맞춤형 견적</span>
</td>
<td>
<span class="price-note">개발자당</span>
<span class="price-val">,175+</span>
</td>
<td>
<span class="price-val">맞춤 견적</span>
<span class="price-note">무료 <M (커뮤니티)</span>
</td>
<td>
<span class="price-val">~연간 ,000+</span>
<span class="price-note">(맞춤 견적)</span>
</td>
<td>
<span class="price-val">9+</span>
<span class="price-note">영구 라이선스</span>
</td>
<td>
<span class="price-val">9</span>
<span class="price-note">영구 · 1년 업데이트</span>
</td>
<td><span class="price-val"> style="color:#16a34a">무료</span></td>
<td>
<span class="price-val"> style="color:#16a34a">무료</span>
<span class="price-note">커뮤니티 MIT <M</span>
</td>
</tr>
<tr>
<td>무료 체험</td>
<td class="iron-col">30일 동안 모든 기능을 <span class="winner-tag">제한 없이 이용하세요</span></td>
<td>해당 없음 (무료)</td>
<td>30일</td>
<td>예 (워터마크 있음)</td>
<td>Community <$1M Rev</td>
<td>예</td>
<td>커뮤니티 (5페이지)</td>
<td>무료 (10페이지)</td>
<td>해당 없음 (무료)</td>
<td>N/A (MIT Free <$1M)</td>
</tr>
<tr>
<td>가격 투명성</td>
<td class="iron-col">출판 및 클리어 <span class="winner-tag">베스트</span></td>
<td>오픈 소스</td>
<td><span class="chip> chip-limited">복합 AGPL</span></td>
<td><span class="chip> chip-partial">다양한 단계</span></td>
<td><span class="chip> chip-good">견적 문의</span></td>
<td><span class="chip> chip-limited">공개된 가격 없음</span></td>
<td><span class="chip> chip-good">게시됨</span></td>
<td><span class="chip> chip-good">게시됨</span></td>
<td>MIT; 제한 없음</td>
<td>MIT; 신뢰 기반</td>
</tr>
</tbody>
</table>
</div>
</div>
</details>
### 실제 HTML을 PDF로 변환하는 비교: 레딧 홈페이지 렌더링
PDF 출력 품질을 평가하기 위해 동적 웹 콘텐츠, 최신 CSS 및 JavaScript HTML 요소가 포함된 Reddit 홈페이지를 사용하여 이러한 라이브러리를 테스트했습니다. 이 페이지는 PDF 출력 생성에 대한 이상적인 테스트 사례 역할을 합니다.
https://www.reddit.com/

**IronPDF**

IronPDF 픽셀 단위까지 완벽한 결과를 제공하며, 모든 동적 웹 콘텐츠, 최신 웹 글꼴 스타일 및 대화형 요소를 Chrome에 표시되는 그대로 정확하게 보존합니다. 이 모든 작업은 단 몇 줄의 코드로 가능합니다.
**Syncfusion**

Syncfusion에서 PDF를 렌더링했는데 대부분의 섹션과 스타일, 특히 동적 콘텐츠가 누락되었습니다. 처음에는 레딧 보안 시스템에 의해 차단되었습니다. 더 나은 결과를 얻으려면 광범위한 명령줄 조정이 필요하지만, 출력은 여전히 불완전합니다.
**Aspose.PDF**

Aspose.PDF를 사용하려면 먼저 수동으로 HTML 파일을 다운로드해야 합니다(직접 URL 다운로드는 지원하지 않습니다). 변환 후 출력물은 적절한 서식이 적용되지 않았고 거의 모든 콘텐츠 섹션이 누락되어 동적 콘텐츠를 사용하는 최신 웹 환경에 적합하지 않았습니다.
**wkhtmltopdf**

wkhtmltopdf는 빠르게 완료되었지만 실시간 업데이트, 동적 요소 및 대화형 섹션과 같은 중요한 콘텐츠가 누락된 단순하고 정적인 페이지를 생성했습니다. 이는 wkhtmltopdf가 최신 JavaScript 기반 웹사이트와 호환되지 않음을 보여줍니다.
### 성능 및 출력 PDF 품질에 대한 결론
안정적인 HTML-PDF 변환기가 필요한 .NET 개발자에게 IronPDF 최소한의 코드, 사용하기 쉬운 API, 그리고 잦은 제품 개선으로 두각을 나타냅니다.
실제 웹 콘텐츠 테스트에서 가장 빠르고 정확한 결과를 제공했으며, Syncfusion은 속도가 느렸고, Aspose는 추가 단계를 요구했으며, wkhtmltopdf는 최신 스타일을 지원하지 못했습니다. IronPDF 오늘날의 HTML을 PDF로 변환하는 워크플로에 있어 속도, 정확성 및 간편함의 최적의 균형을 제공합니다.
[[i:(Aspose, Syncfusion, wkhtmltopdf는 각각의 소유자의 상표입니다. 이 사이트는 해당 업체와 제휴 관계가 없으며, 해당 업체의 승인을 받지 않았습니다. 모든 이름, 로고, 브랜드는 소유자의 것이며, 비교는 작성 시점에 공개된 정보를 기반으로 합니다.)]]
### 요약
이 가이드는 기본적인 문자열 변환부터 비동기 처리, 디지털 서명, 일괄 생성과 같은 고급 기능에 이르기까지 .NET 에서 HTML을 PDF로 변환하는 데 필요한 모든 내용을 다룹니다. 본 연구에서는 세 가지 변환 방법, 필수 구성, 고급 기능 및 보안 설정을 시연하고, 실제 환경에서 동적 문서 생성을 테스트하여 IronPDF 다른 라이브러리와 비교했습니다.
경쟁사들이 최신 웹사이트와의 호환성 문제나 복잡한 해결 방법을 필요로 하는 동안, IronPDF 최소한의 코드와 강력한 렌더링 엔진으로 완벽한 결과를 제공했습니다.
PDF 워크플로우를 간소화하고 단 몇 줄의 코드로 다양한 PDF 생성 기능을 경험해 보시겠습니까? NuGet 패키지 관리자를 통해 IronPDF 설치하거나(또는 Visual Studio에서 NuGet 패키지 관리 선택) 오늘 바로 첫 번째 HTML을 PDF로 변환해 보세요.
워터마크 없이 [30일 동안 무료로 제품 테스트를 시작해 보세요](/licensing/) . [유연한 라이선싱](/licensing/)은 `$liteLicense`에서 시작하며, 팀 규모에 맞춰 조정되는 투명한 가격 책정을 제공합니다.
<a class="content-anchor" href="/licensing/">IronPDF 라이선스 보기 <i class="fa-solid fa-arrow-right"></i></a>
## 6. 문제 해결 및 기술 지원
HTML을 PDF로 변환할 때 다음과 같은 오류가 발생하나요? IronPDF [IronPDF 의 채팅 위젯을 통해 연중무휴 24시간 엔지니어 지원을 제공합니다.](/)
### 흔히 발생하는 오류에 대한 빠른 해결 방법
- 첫 번째 렌더링 속도가 느린가요? 정상. Chrome은 초기화에 2~3초가 걸리다가 이후 속도가 빨라집니다.
- 클라우드 관련 문제인가요? 최소한 Azure B1 또는 그에 상응하는 리소스를 사용하십시오.
- 누락된 자산이 있습니까? 기본 경로를 설정하거나 base64로 임베드합니다.
- 누락된 요소가 있나요? JavaScript 실행을 위해 `RenderDelay`을 추가하세요.
- 렌더링 시 메모리 사용량이 많나요? HTML을 PDF로, 스탬프, 머리글/바닥글 수정을 포함하여 최신 버전(v2026.6.1)으로 업데이트하십시오.
- 폼 필드 관련 문제(예: 긴 텍스트 영역, 체크박스)가 있나요? v2025.7.17에서 수정되었습니다. 체크박스에 고유한 이름을 지정하십시오.
- 사용자 지정 머리글/바닥글이 잘리거나 특수 문자가 손상되었습니까? v2025.8.8에서 해결되었습니다. 줄 바꿈 및 메타데이터를 테스트합니다.
### IronPDF 만든 엔지니어들에게 24시간 언제든 도움을 받으세요. (PDF 파일 이용)
<ul>
<li><a class="content-anchor" href="/troubleshooting/engineering-request-pdf/">포괄적인 문제 해결 가이드 <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/ironpdf-performance-assistance/">성능 최적화 전략<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/engineering-request-pdf/">엔지니어링 지원 요청<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/quick-ironpdf-troubleshooting/">빠른 문제 해결 체크리스트<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
*as-heading:2(다음 단계)*
<div class="my-6 grid grid-cols-1 gap-4 pb-10 sm:grid-cols-2 lg:grid-cols-3">
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">PDF 문서를 병합하거나 분할하는 방법</span>
</span>
<a href="/how-to/headers-and-footers/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">방법 보기 <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">PDF 파일에 사용자 지정 머리글과 바닥글을 추가하는 방법</span>
</span>
<a href="/how-to/merge-or-split-pdfs/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">방법 보기 <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">PDF에서 텍스트 및 영역을 수정하는 방법</span>
</span>
<a href="/how-to/redact-text/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">방법 보기 <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
</div>
<div class="tutorials-navigation">
<a href="/how-to/create-new-pdfs/" class="tutorials-navigation__cta tutorials-navigation__cta--left"><i class="fa-solid fa-chevron-left"></i>Creating PDFs in C#</a>
<a href="/tutorials/csharp-edit-pdf-complete-tutorial/" class="tutorials-navigation__cta tutorials_navigation__cta--right">Editing PDFs in C#<i class="fa-solid fa-arrow-right"></i></a>
</div>
C#에서 HTML을 PDF로 변환하는 것은 실제 프로젝트가 렌더링, 배포 및 확장 한계를 만날 때까지는 간단해 보입니다. 이 가이드는 IronPDF의 Chrome 기반 엔진을 사용하여 신뢰성 있게 이를 수행하는 방법을 보여주며, 실행해볼 수 있는 작동하는 코드를 시작합니다. 아직 도구를 선택하지 않았다면, 모든 C# HTML-PDF 라이브러리를 비교하십시오.
요약: HTML을 PDF로 변환하는 빠른 시작 가이드
IronPDF 라이브러리를 사용하면 C#에서 HTML을 PDF로 쉽게 변환할 수 있으며, HTML, CSS 및 JavaScript에서 고품질 PDF 파일을 생성하기 위해 ChromePdfRenderer.RenderHtmlAsPdf 메서드를 제공합니다.
참고해 주세요: v2026.6.1 (2026년 6월)에 최신 기능: 렌더링 중 HTML 헤딩에서 생성된 자동 PDF 북마크, 클라우드 및 샌드박스 환경을 위한 완전 메모리 내 PDF 선형화, 서명자 인증서 검사가 포함된 ECDSA 디지털 서명, 클릭 가능한 링크 주석, 슬림하고 강화된 Linux 및 Docker 이미지. 전체 릴리스 기록은 전체 변경 로그를 참조하세요.
IronPDF .NET 개발자를 위해 프로세스를 간소화하여 웹 애플리케이션의 HTML에서 전문가 수준의 PDF 문서를 생성하는 간단하고 효율적인 솔루션을 제공합니다. 송장과 보고서부터 인증서와 아카이브에 이르기까지 개발자는 익숙한 웹 스택을 사용하여 작업할 수 있으며, IronPDF 단 몇 줄의 코드로 복잡한 작업을 처리합니다.
가장 기본적인 작업은 HTML 문자열을 PDF로 변환하는 것입니다. 이 방법은 동적으로 생성되는 HTML 콘텐츠에 적합합니다. RenderHtmlAsPdf 메서드는 HTML을 PDF로 직접 변환할 때 HTML5, CSS3, JavaScript 및 이미지를 완전히 지원합니다.
using IronPdf;// Create the Chrome renderervar renderer = new ChromePdfRenderer();// Convert HTML string to PDFvar pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");// Save the PDFpdf.SaveAs("output.pdf");
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
ImportsIronPdf' Create the Chrome rendererDim renderer As New ChromePdfRenderer()' Convert HTML string to PDFDim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")' Save the PDFpdf.SaveAs("output.pdf")
Imports IronPdf
' Create the Chrome renderer
Dim renderer As New ChromePdfRenderer()
' Convert HTML string to PDF
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Save the PDF
pdf.SaveAs("output.pdf")
IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.
산출
위의 스니펫을 실행하면 IronPDF가 입력한 헤딩과 정확히 일치하는 단일 페이지 PDF를 반환하며, 가능한 가장 간단한 렌더링입니다:
성능
IronPDF의 문자열, URL 및 HTML을 PDF로 변환하는 성능은 16GB RAM이 탑재된 Lenovo 노트북을 사용하여 측정되었습니다. 테스트 문서는 표준 CSS 그리드, 그라데이션 및 다중 섹션 테이블이 포함된 3페이지 분량의 Enterprise 청구서입니다.
번역 결과는 다음과 같습니다:
미터법
값
평균 렌더링 시간
~486 ms
렌더링당 메모리
~3.6 MB
16코어 워크스테이션(Windows 11, .NET 8)에서 5회 연속 렌더링 결과를 측정함. 첫 호출에는 일회성 Chromium 엔진 초기화 시간(약 1.3초)도 포함됩니다.
처음 테스트를 실행했을 때 렌더링 속도가 매우 느렸습니다(호출당 1초 이상 소요!). 상황을 살펴본 결과, 여러 개의 Chromium 인스턴스가 실행 중이었고 배터리 전원으로 작동하고 있다는 사실을 깨달았습니다. 이 두 가지 요인 모두 라이브러리가 실제 성능을 제대로 발휘하지 못하게 하는 원인이었습니다. 경쟁 프로세스를 종료하고 연결하자 성능이 개선되었습니다. 웜 런(warm runs)의 평균 시간은 약 486ms였으며, 가장 빠른 기록은 473ms에 가까웠습니다.
팁: 최근 업데이트에서는 HTML 메타데이터의 특수 문자/이모티코니슈 문제를 해결하고 Linux에서의 중국어 문자를 포함하여 HTML 폼 필드 처리 개선사항이 반영됨. EnableJavaScript = true을 사용하여 동적 콘텐츠를 테스트하여 최적의 결과를 얻습니다.
HTML 문자열이 이미지 또는 스타일시트와 같은 로컬 자산을 참조하는 경우, 모든 리소스와 함께 HTML 콘텐츠를 올바르게 변환하려면 baseUrlOrPath 매개변수를 사용하십시오.
using IronPdf;var renderer = new ChromePdfRenderer();// Convert HTML content with local image and CSS referencesstring html = @" <link rel='stylesheet' href='styles.css'> <img src='logo.png' alt='Company Logo'> <h1>Company Report</h1> <p>Annual report content...</p>";// Set base path for resolving relative URLs in HTML to PDF conversionvar pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");pdf.SaveAs("report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML content with local image and CSS references
string html = @"
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>";
// Set base path for resolving relative URLs in HTML to PDF conversion
var pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");
pdf.SaveAs("report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Convert HTML content with local image and CSS referencesDim html AsString = " <link rel='stylesheet' href='styles.css'> <img src='logo.png' alt='Company Logo'> <h1>Company Report</h1> <p>Annual report content...</p>"' Set base path for resolving relative URLs in HTML to PDF conversionDim pdf = renderer.RenderHtmlAsPdf(html, "C:\MyProject\Assets\")pdf.SaveAs("report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML content with local image and CSS references
Dim html As String = "
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>"
' Set base path for resolving relative URLs in HTML to PDF conversion
Dim pdf = renderer.RenderHtmlAsPdf(html, "C:\MyProject\Assets\")
pdf.SaveAs("report.pdf")
팁: baseUrlOrPath는 CSS, JavaScript 및 이미지 파일의 위치를 IronPDF에 알립니다. HTML 문자열에 있는 모든 상대 경로는 이 디렉터리를 기준으로 해석됩니다.
경고: 자동 문서 생성을 위해 어떤 라이브러리를 사용하든 간에 주의해야 할 한 가지 문제점은, 참조가 시스템 설정으로 기본값으로 돌아갈 경우 Enterprise 문서에 손상된 요소나 누락된 자산이 발생할 수 있다는 점이며, 이것이 출력물을 테스트하는 것이 중요한 이유입니다. IronPDF는 상대 경로를 올바른 디렉토리에 가리키는 baseUrlOrPath 매개변수를 제공하므로 대량 실행 전에 빠른 출력 확인만으로 대부분의 문제를 잡을 수 있습니다.
C#을 사용하여 웹 페이지 전체를 PDF로 렌더링하면 팀에서 PDF 디자인 작업과 백엔드 렌더링 작업을 분리할 수 있습니다. 이 방법을 사용하면 지정된 URL을 PDF 형식으로 직접 변환할 수 있습니다.
핵심 메서드는 RenderUrlAsPdf로 라이브 페이지를 가져와 단일 호출로 렌더링합니다:
using IronPdf;// Create a PDF from any existing web pagevar renderer = new ChromePdfRenderer();var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");pdf.SaveAs("wikipedia.pdf");
using IronPdf;
// Create a PDF from any existing web page
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.SaveAs("wikipedia.pdf");
ImportsIronPdf' Create a PDF from any existing web pagePrivate renderer = New ChromePdfRenderer()Private pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")pdf.SaveAs("wikipedia.pdf")
Imports IronPdf
' Create a PDF from any existing web page
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
pdf.SaveAs("wikipedia.pdf")
산출
여기에서는 RenderUrlAsPdf가 라이브 Wikipedia 기사를 캡처하여 정적, 인쇄 준비가 된 PDF로 변환하며, 텍스트, 이미지, 표 및 레이아웃이 모든 33 페이지에 걸쳐 유지됩니다:
인쇄용 CSS vs 화면용 CSS
IronPDF CSS 미디어 유형을 사용하여 렌더링하도록 구성할 수 있습니다.
using IronPdf;using IronPdf.Rendering;// Initialize HTML to PDF convertervar renderer = new ChromePdfRenderer();// Configure CSS media type for rendering specified URLsrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;// Screen media type shows the entire web page as displayed on screen
using IronPdf;
using IronPdf.Rendering;
// Initialize HTML to PDF converter
var renderer = new ChromePdfRenderer();
// Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Screen media type shows the entire web page as displayed on screen
ImportsIronPdfImportsIronPdf.Rendering' Initialize HTML to PDF converterDim renderer As New ChromePdfRenderer()' Configure CSS media type for rendering specified URLsrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print' Screen media type shows the entire web page as displayed on screen
Imports IronPdf
Imports IronPdf.Rendering
' Initialize HTML to PDF converter
Dim renderer As New ChromePdfRenderer()
' Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Screen media type shows the entire web page as displayed on screen
JavaScript 지원
IronPDF HTML을 PDF로 변환할 때 JavaScript, jQuery는 물론 AJAX까지 완벽하게 지원합니다. 동적 HTML 콘텐츠의 경우, IronPDF 웹 페이지를 PDF로 렌더링하기 전에 JavaScript 완료를 기다리도록 설정할 수 있습니다. 이 기능은 단일 페이지 애플리케이션과 동적 웹사이트에 적합합니다.
using IronPdf;// Configure JavaScript rendering for dynamic HTML content to PDFvar renderer = new ChromePdfRenderer();// Enable JavaScript execution during PDF generationrenderer.RenderingOptions.EnableJavaScript = true;// WaitFor.RenderDelay pauses before capturing the HTMLrenderer.RenderingOptions.WaitFor.RenderDelay(500); // milliseconds
using IronPdf;
// Configure JavaScript rendering for dynamic HTML content to PDF
var renderer = new ChromePdfRenderer();
// Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = true;
// WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay(500); // milliseconds
ImportsIronPdf' Configure JavaScript rendering for dynamic HTML content to PDFDim renderer As New ChromePdfRenderer()' Enable JavaScript execution during PDF generationrenderer.RenderingOptions.EnableJavaScript = True' WaitFor.RenderDelay pauses before capturing the HTMLrenderer.RenderingOptions.WaitFor.RenderDelay(500) ' milliseconds
Imports IronPdf
' Configure JavaScript rendering for dynamic HTML content to PDF
Dim renderer As New ChromePdfRenderer()
' Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = True
' WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay(500) ' milliseconds
웹 페이지에서 PDF 형식으로 고급 d3.js 코드 차트를 렌더링할 때 JavaScript 실행 내역도 표시할 수 있습니다.
using IronPdf;// Create renderer for JavaScript-heavy HTMLvar renderer = new ChromePdfRenderer();// Convert d3.js visualization web page to PDFvar pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram");// Save the interactive chart as static PDFpdf.SaveAs("chart.pdf");
using IronPdf;
// Create renderer for JavaScript-heavy HTML
var renderer = new ChromePdfRenderer();
// Convert d3.js visualization web page to PDF
var pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram");
// Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf");
ImportsIronPdf' Create renderer for JavaScript-heavy HTMLDim renderer As New ChromePdfRenderer()' Convert d3.js visualization web page to PDFDim pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram")' Save the interactive chart as static PDFpdf.SaveAs("chart.pdf")
Imports IronPdf
' Create renderer for JavaScript-heavy HTML
Dim renderer As New ChromePdfRenderer()
' Convert d3.js visualization web page to PDF
Dim pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram")
' Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf")
IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.
반응형 CSS
반응형 웹 페이지는 브라우저에서 보기 위해 설계되었으며, IronPDF는 서버의 OS에서 실제 브라우저 창을 열지 않으므로 반응형 HTML 요소는 가장 작은 크기로 렌더링될 수 있습니다. 전체 웹 페이지를 렌더링할 때 이 문제를 다루기 위해 PdfCssMediaType.Print 사용이 권장됩니다.
// Configure for optimal responsive design handling in HTML to PDFrenderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
로컬 HTML 파일을 PDF로 변환하면 CSS, 이미지, JavaScript 포함한 모든 관련 자산이 file:// 프로토콜을 사용하여 열었을 때와 마찬가지로 유지됩니다. 이 HTML을 PDF로 변환하는 방법은 템플릿이나 미리 디자인된 HTML 페이지를 PDF 문서로 변환하는 데 가장 적합합니다.
using IronPdf;// Initialize ChromePdfRenderer for HTML file conversionvar renderer = new ChromePdfRenderer();// Convert HTML file to PDF documents// Preserves all relative paths and linked resources in HTMLvar pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");// Save the HTML file as PDF pdf.SaveAs("Invoice.pdf");// All CSS, JavaScript, and images load correctly in the generated PDF
using IronPdf;
// Initialize ChromePdfRenderer for HTML file conversion
var renderer = new ChromePdfRenderer();
// Convert HTML file to PDF documents
// Preserves all relative paths and linked resources in HTML
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
// Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf");
// All CSS, JavaScript, and images load correctly in the generated PDF
ImportsIronPdf' Initialize ChromePdfRenderer for HTML file conversionDim renderer As New ChromePdfRenderer()' Convert HTML file to PDF documents' Preserves all relative paths and linked resources in HTMLDim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")' Save the HTML file as PDF pdf.SaveAs("Invoice.pdf")' All CSS, JavaScript, and images load correctly in the generated PDF
Imports IronPdf
' Initialize ChromePdfRenderer for HTML file conversion
Dim renderer As New ChromePdfRenderer()
' Convert HTML file to PDF documents
' Preserves all relative paths and linked resources in HTML
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
' Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf")
' All CSS, JavaScript, and images load correctly in the generated PDF
IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.
산출
HTML 송장 템플릿을 가리키면 파일의 전체 디자인(로고, 항목 테이블, 합계)은 추가 코드 없이 픽셀 단위로 완벽하게 구현됩니다:
성능
성능은 모든 변수를 일정하게 유지한 상태에서 디스크의 파일에서 이전 3페이지 분량의 Enterprise 청구서를 렌더링하여 다시 측정했습니다:
미터법
값
평균 렌더링 시간
~502 ms
렌더링당 메모리
~3.1 MB
동일한 16코어 워크스테이션(Windows 11, .NET 8)에서 5회 연속 렌더링 결과를 기준으로 측정되었습니다. 파일 기반 렌더링은 메모리 내 문자열 렌더링과 약 3% 이내의 오차 범위를 보입니다; 디스크에서 HTML을 읽어오는 데는 측정 가능한 오버헤드가 발생하지 않습니다.
팁: HTML 파일을 PDF로 변환하기 전에 편집 및 브라우저에서 테스트할 수 있도록 HTML 파일과 해당 자산(CSS, 이미지)을 별도의 폴더에 보관하세요. 이렇게 하면 고품질 PDF 문서를 위해 HTML이 완벽하게 렌더링됩니다.
ASP.NET Core 프로젝트가 이미 Razor 페이지를 사용하고 있다면, HTML을 다시 작성하지 않고도 직접 PDF로 변환할 수 있습니다. IronPDF의 Razor 확장은 .cshtml 페이지(모델 및 레이아웃 포함)를 가져와 단일 호출로 PDF 문서로 렌더링하는 RenderRazorToPdf 메서드를 추가합니다.
> Install-패키지 IronPdf.Extensions.Razor
Install-패키지 IronPdf.Extensions.Razor
using IronPdf;using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Mvc.RazorPages;public class ReportModel : PageModel{ public IActionResultOnGet() { var renderer = new ChromePdfRenderer(); // Render a Razor Page directly to PDF PdfDocument pdf = renderer.RenderRazorToPdf(this);Response.Headers.Add("Content-Disposition", "inline"); return new FileContentResult(pdf.BinaryData, "application/pdf"); }}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class ReportModel : PageModel
{
public IActionResult OnGet()
{
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
ImportsIronPdfImportsMicrosoft.AspNetCore.MvcImportsMicrosoft.AspNetCore.Mvc.RazorPagesPublic Class ReportModelInheritsPageModel Public Function OnGet() AsIActionResult Dim renderer As New ChromePdfRenderer() ' Render a Razor Page directly to PDF Dim pdf AsPdfDocument = renderer.RenderRazorToPdf(Me) Response.Headers.Add("Content-Disposition", "inline") Return New FileContentResult(pdf.BinaryData, "application/pdf") End FunctionEnd Class
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.RazorPages
Public Class ReportModel
Inherits PageModel
Public Function OnGet() As IActionResult
Dim renderer As New ChromePdfRenderer()
' Render a Razor Page directly to PDF
Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
End Function
End Class
참고해 주세요: RenderRazorToPdf는 ASP.NET Core 웹 앱 프로젝트가 필요합니다. 콘솔 응용 프로그램이나 클래스 라이브러리에서는 작동하지 않습니다; Razor 뷰 엔진이 호스팅 파이프라인에서 사용 가능해야 합니다.
MVC 패턴을 사용하는 팀은 기존 뷰와 컨트롤러에서 직접 PDF를 생성할 수 있습니다. MVC 코어 확장 패키지를 설치한 후, 뷰 경로 및 모델로 RenderRazorViewToPdf를 호출합니다; IronPDF는 Razor 렌더링 파이프라인을 처리하고 완료된 PDF를 출력합니다.
이는 보고서, 청구서 등 HTML이 이미 설계되고 브라우저에서 테스트된 페이지에 특히 유용합니다. 생성된 PDF는 레이아웃 페이지와 부분 뷰를 포함하여 전체 뷰 출력을 보존합니다.
> Install-패키지 IronPdf.Extensions.Mvc.Core
Install-패키지 IronPdf.Extensions.Mvc.Core
먼저, IRazorViewRenderer 서비스를 Program.cs에 등록하여 컨트롤러에서 이를 주입할 수 있도록 합니다:
using IronPdf.Extensions.Mvc.Core;var builder = WebApplication.CreateBuilder(args);builder.Services.AddControllersWithViews();// Register the Razor view renderer for IronPDFbuilder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
using IronPdf.Extensions.Mvc.Core;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
ImportsIronPdf.Extensions.Mvc.CoreDim builder = WebApplication.CreateBuilder(args)builder.Services.AddControllersWithViews()' Register the Razor view renderer for IronPDFbuilder.Services.AddSingleton(OfIHttpContextAccessor, HttpContextAccessor)()builder.Services.AddSingleton(OfIRazorViewRenderer, RazorViewRenderer)()
Imports IronPdf.Extensions.Mvc.Core
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()
' Register the Razor view renderer for IronPDF
builder.Services.AddSingleton(Of IHttpContextAccessor, HttpContextAccessor)()
builder.Services.AddSingleton(Of IRazorViewRenderer, RazorViewRenderer)()
컨트롤러 액션 안에서 렌더러를 주입하고, 임의 뷰를 PDF로 변환하십시오:
using IronPdf;using IronPdf.Extensions.Mvc.Core;using Microsoft.AspNetCore.Mvc;public class ReportController : Controller{ private readonly IRazorViewRenderer _viewRenderService; // Inject the view renderer via constructor publicReportController(IRazorViewRenderer viewRenderService) { _viewRenderService = viewRenderService; } public IActionResultDownload() { var reportModel = new { Title = "Quarterly Report", Total = 1250.00 }; var renderer = new ChromePdfRenderer(); // Render an MVC View with model data to PDF PdfDocument pdf = renderer.RenderRazorViewToPdf( _viewRenderService, "Views/Home/Report.cshtml", reportModel);Response.Headers.Add("Content-Disposition", "inline"); return new FileContentResult(pdf.BinaryData, "application/pdf"); }}
using IronPdf;
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
private readonly IRazorViewRenderer _viewRenderService;
// Inject the view renderer via constructor
public ReportController(IRazorViewRenderer viewRenderService)
{
_viewRenderService = viewRenderService;
}
public IActionResult Download()
{
var reportModel = new { Title = "Quarterly Report", Total = 1250.00 };
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
ImportsIronPdfImportsIronPdf.Extensions.Mvc.CoreImportsMicrosoft.AspNetCore.MvcPublic Class ReportControllerInheritsController PrivateReadOnly _viewRenderService AsIRazorViewRenderer ' Inject the view renderer via constructor Public Sub New(viewRenderService AsIRazorViewRenderer) _viewRenderService = viewRenderService End Sub Public Function Download() AsIActionResult Dim reportModel = New With {.Title = "Quarterly Report", .Total = 1250.0} Dim renderer = New ChromePdfRenderer() ' Render an MVC View with model data to PDF Dim pdf AsPdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Report.cshtml", reportModel) Response.Headers.Add("Content-Disposition", "inline") Return New FileContentResult(pdf.BinaryData, "application/pdf") End FunctionEnd Class
Imports IronPdf
Imports IronPdf.Extensions.Mvc.Core
Imports Microsoft.AspNetCore.Mvc
Public Class ReportController
Inherits Controller
Private ReadOnly _viewRenderService As IRazorViewRenderer
' Inject the view renderer via constructor
Public Sub New(viewRenderService As IRazorViewRenderer)
_viewRenderService = viewRenderService
End Sub
Public Function Download() As IActionResult
Dim reportModel = New With {.Title = "Quarterly Report", .Total = 1250.0}
Dim renderer = New ChromePdfRenderer()
' Render an MVC View with model data to PDF
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Report.cshtml", reportModel)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
End Function
End Class
동적 웹 페이지를 레이아웃과 서식을 그대로 유지하면서 PDF로 변환해야 합니까? 다양한 인기 동적 웹 페이지 프레임워크를 PDF로 빠르게 변환해주는 IronPDF 사용해 보세요.
ASPX Pages에서 PDF로 변환
다음은 Active Server Pages에서 ASPX 페이지를 PDF로 변환하는 간단한 코드 예시입니다.
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using IronPdf;namespace AspxToPdfTutorial{ public partial class Invoice : System.Web.UI.Page { protected voidPage_Load(object sender, EventArgs e) {IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser); } }}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using IronPdf;
namespace AspxToPdfTutorial
{
public partial class Invoice : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser);
}
}
}
ImportsSystemImportsSystem.Collections.GenericImportsSystem.LinqImportsSystem.WebImportsSystem.Web.UIImportsSystem.Web.UI.WebControlsImportsIronPdfNamespaceAspxToPdfTutorialPartialPublic Class InvoiceInheritsSystem.Web.UI.PageProtected Sub Page_Load(ByVal sender AsObject, ByVal e AsEventArgs)IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser) End Sub End ClassEndNamespace
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports IronPdf
Namespace AspxToPdfTutorial
Partial Public Class Invoice
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser)
End Sub
End Class
End Namespace
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
XAML을 PDF로 변환(MAUI)
크로스 플랫폼 애플리케이션 개발을 원하는 개발자들에게 .NET MAUI 프레임워크 중에서 인기 있는 선택지입니다. IronPDF 몇 가지 단계를 거치면 XAML을 PDF로 완벽하게 변환할 수 있습니다.
using IronPdf.Extensions.Maui;namespace mauiSample;public partial class MainPage : ContentPage{ publicMainPage() {InitializeComponent(); } private voidPrintToPdf(object sender, EventArgs e) { ChromePdfRenderer renderer = new ChromePdfRenderer(); // Apply HTML header renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() {HtmlFragment = "<h1>Header</h1>", }; // Render PDF from Maui Page PdfDocument pdf = renderer.RenderContentPageToPdf<MainPage, App>().Result; pdf.SaveAs(@"C:\Users\lyty1\Downloads\contentPageToPdf.pdf"); }}
using IronPdf.Extensions.Maui;
namespace mauiSample;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void PrintToPdf(object sender, EventArgs e)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply HTML header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<h1>Header</h1>",
};
// Render PDF from Maui Page
PdfDocument pdf = renderer.RenderContentPageToPdf<MainPage, App>().Result;
pdf.SaveAs(@"C:\Users\lyty1\Downloads\contentPageToPdf.pdf");
}
}
ImportsIronPdf.Extensions.MauiNamespace mauiSamplePartialPublic Class MainPageInheritsContentPage Public Sub New()InitializeComponent() End Sub Private Sub PrintToPdf(ByVal sender AsObject, ByVal e AsEventArgs) Dim renderer As New ChromePdfRenderer() ' Apply HTML header renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<h1>Header</h1>"} ' Render PDF from Maui Page Dim pdf AsPdfDocument = renderer.RenderContentPageToPdf(OfMainPage, App)().Result pdf.SaveAs("C:\Users\lyty1\Downloads\contentPageToPdf.pdf") End Sub End ClassEndNamespace
Imports IronPdf.Extensions.Maui
Namespace mauiSample
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Sub PrintToPdf(ByVal sender As Object, ByVal e As EventArgs)
Dim renderer As New ChromePdfRenderer()
' Apply HTML header
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<h1>Header</h1>"}
' Render PDF from Maui Page
Dim pdf As PdfDocument = renderer.RenderContentPageToPdf(Of MainPage, App)().Result
pdf.SaveAs("C:\Users\lyty1\Downloads\contentPageToPdf.pdf")
End Sub
End Class
End Namespace
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
PDF 보고서 생성
PDF 보고서를 생성할 때는 정확한 크기와 형식이 매우 중요합니다. 이처럼 IronPDF 사용하면 단 몇 단계만으로 PDF를 원활하게 생성할 수 있습니다.
using IronPdf;ChromePdfRenderer renderer = new ChromePdfRenderer();renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf");
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf");
ImportsIronPdfPrivate renderer As New ChromePdfRenderer()renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf")
Imports IronPdf
Private renderer As New ChromePdfRenderer()
renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf")
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
Blazor 서버에서 PDF 생성하기
IronPDF .NET 6을 지원하며 Blazor 와 같은 프로젝트 유형을 포함하고 있으므로, 이 코드 스니펫은 Blazor 서버에서 PDF를 생성하는 간단한 예제를 제공합니다.
@code { // Model to bind user input private InputHTMLModel _InputMsgModel = new InputHTMLModel(); private async TaskSubmitHTML() { // Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"; // Create a renderer to convert HTML to PDF var render = new IronPdf.ChromePdfRenderer(); // Render the HTML input into a PDF document var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML); var fileName = "iron.pdf"; // Create a stream reference for the PDF content using var streamRef = new DotNetStreamReference(stream: doc.Stream); // Invoke JavaScript function to download the PDF in the browser awaitJS.InvokeVoidAsync("SubmitHTML", fileName, streamRef); } public class InputHTMLModel { public stringHTML { get; set; } = "My new message"; }}
@code {
// Model to bind user input
private InputHTMLModel _InputMsgModel = new InputHTMLModel();
private async Task SubmitHTML()
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Create a renderer to convert HTML to PDF
var render = new IronPdf.ChromePdfRenderer();
// Render the HTML input into a PDF document
var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
var fileName = "iron.pdf";
// Create a stream reference for the PDF content
using var streamRef = new DotNetStreamReference(stream: doc.Stream);
// Invoke JavaScript function to download the PDF in the browser
await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
}
public class InputHTMLModel
{
public string HTML { get; set; } = "My new message";
}
}
codeIf True Then ' Model to bind user input privateInputHTMLModel _InputMsgModel = New InputHTMLModel()'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:' private async Task SubmitHTML()' {' ' Set your IronPDF license key' IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";'' ' Create a renderer to convert HTML to PDF' var render = New IronPdf.ChromePdfRenderer();'' ' Render the HTML input into a PDF document' var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);'' var fileName = "iron.pdf";'' ' Create a stream reference for the PDF content' var streamRef = New DotNetStreamReference(stream: doc.Stream);'' ' Invoke JavaScript function to download the PDF in the browser' await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);' }'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:' public class InputHTMLModel' {' public string HTML' {' get;' set;' } = "My new message";' }End If
code
If True Then
' Model to bind user input
private InputHTMLModel _InputMsgModel = New InputHTMLModel()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' private async Task SubmitHTML()
' {
' ' Set your IronPDF license key
' IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
'
' ' Create a renderer to convert HTML to PDF
' var render = New IronPdf.ChromePdfRenderer();
'
' ' Render the HTML input into a PDF document
' var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
'
' var fileName = "iron.pdf";
'
' ' Create a stream reference for the PDF content
' var streamRef = New DotNetStreamReference(stream: doc.Stream);
'
' ' Invoke JavaScript function to download the PDF in the browser
' await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
' }
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public class InputHTMLModel
' {
' public string HTML
' {
' get;
' set;
' } = "My new message";
' }
End If
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
Razor 에서 PDF로 변환 (Blazor 서버)
Blazor 서버에서 PDF를 생성하는 것 외에도, IronPDF는 Blazor 페이지 내에서 Razor 구성 요소로부터 PDF 문서를 생성하는 것도 지원합니다. PDF 파일 및 페이지 생성 과정을 훨씬 간소화합니다.
[Parameter]publicIEnumerable<PersonInfo> persons { get; set; }publicDictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();protected override async TaskOnInitializedAsync(){ persons = new List<PersonInfo> { new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } };}private async voidPrintToPdf(){ ChromePdfRenderer renderer = new ChromePdfRenderer(); // Apply text footer renderer.RenderingOptions.TextFooter = new TextHeaderFooter() {LeftText = "{date} - {time}",DrawDividerLine = true,RightText = "Page {page} of {total-pages}",Font = IronSoftware.Drawing.FontTypes.Arial,FontSize = 11 };Parameters.Add("persons", persons); // Render razor component to PDF PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);}
[Parameter]
public IEnumerable<PersonInfo> persons { get; set; }
public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
protected override async Task OnInitializedAsync()
{
persons = new List<PersonInfo>
{
new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
}
private async void PrintToPdf()
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply text footer
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} - {time}",
DrawDividerLine = true,
RightText = "Page {page} of {total-pages}",
Font = IronSoftware.Drawing.FontTypes.Arial,
FontSize = 11
};
Parameters.Add("persons", persons);
// Render razor component to PDF
PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);
}
<Parameter>Public Property persons AsIEnumerable(OfPersonInfo)Public Property ParametersAsDictionary(OfString, Object) = New Dictionary(OfString, Object)()ProtectedOverridesAsync Function OnInitializedAsync() AsTask persons = New List(OfPersonInfo) From { New PersonInfoWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonInfoWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonInfoWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} }End FunctionPrivateAsync Sub PrintToPdf() Dim renderer As New ChromePdfRenderer() ' Apply text footer renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With { .LeftText = "{date} - {time}", .DrawDividerLine = True, .RightText = "Page {page} of {total-pages}", .Font = IronSoftware.Drawing.FontTypes.Arial, .FontSize = 11 }Parameters.Add("persons", persons) ' Render razor component to PDF Dim pdf AsPdfDocument = renderer.RenderRazorComponentToPdf(OfPerson)(Parameters)File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData)End Sub
<Parameter>
Public Property persons As IEnumerable(Of PersonInfo)
Public Property Parameters As Dictionary(Of String, Object) = New Dictionary(Of String, Object)()
Protected Overrides Async Function OnInitializedAsync() As Task
persons = New List(Of PersonInfo) From {
New PersonInfo With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New PersonInfo With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New PersonInfo With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
End Function
Private Async Sub PrintToPdf()
Dim renderer As New ChromePdfRenderer()
' Apply text footer
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.LeftText = "{date} - {time}",
.DrawDividerLine = True,
.RightText = "Page {page} of {total-pages}",
.Font = IronSoftware.Drawing.FontTypes.Arial,
.FontSize = 11
}
Parameters.Add("persons", persons)
' Render razor component to PDF
Dim pdf As PdfDocument = renderer.RenderRazorComponentToPdf(Of Person)(Parameters)
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData)
End Sub
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
CSHTML을 PDF로 변환
CSHTML(Razor)을 PDF로 변환하면 웹 애플리케이션에서 바로 전문적인 인쇄용 문서를 생성할 수 있습니다. 이 기능은 송장, 보고서, 계약서 또는 기타 동적 콘텐츠에 유용합니다. IronPDF Razor Pages, MVC Core, MVC Framework는 물론 헤드리스 렌더링도 지원하므로 단 몇 줄의 코드로 PDF 생성을 .NET 애플리케이션에 원활하게 통합할 수 있습니다.
CSHTML을 PDF로 변환 (Razor 페이지)
using IronPdf.Razor.Pages;public IActionResultOnPostAsync(){ persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } };ViewData["personList"] = persons; ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render Razor Page to PDF document PdfDocument pdf = renderer.RenderRazorToPdf(this);Response.Headers.Add("Content-Disposition", "inline"); returnFile(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");}
using IronPdf.Razor.Pages;
public IActionResult OnPostAsync()
{
persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
ViewData["personList"] = persons;
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor Page to PDF document
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");
}
ImportsIronPdf.Razor.PagesPublic Function OnPostAsync() AsIActionResult persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} }ViewData("personList") = persons Dim renderer As New ChromePdfRenderer() ' Render Razor Page to PDF document Dim pdf AsPdfDocument = renderer.RenderRazorToPdf(Me) Response.Headers.Add("Content-Disposition", "inline") ReturnFile(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")End Function
Imports IronPdf.Razor.Pages
Public Function OnPostAsync() As IActionResult
persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
ViewData("personList") = persons
Dim renderer As New ChromePdfRenderer()
' Render Razor Page to PDF document
Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)
Response.Headers.Add("Content-Disposition", "inline")
Return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")
End Function
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
CSHTML을 PDF로 변환(MVC 코어)
public async Task<IActionResult> Persons(){ var persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } }; if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method) { ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render View to PDF document PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);Response.Headers.Add("Content-Disposition", "inline"); // Output PDF document returnFile(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf"); } returnView(persons);}
public async Task<IActionResult> Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render View to PDF document
PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);
Response.Headers.Add("Content-Disposition", "inline");
// Output PDF document
return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
}
return View(persons);
}
PublicAsync Function Persons() AsTask(OfIActionResult) Dim persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} } If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.MethodThen Dim renderer As New ChromePdfRenderer() ' Render View to PDF document Dim pdf AsPdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons) Response.Headers.Add("Content-Disposition", "inline") ' Output PDF document ReturnFile(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf") End If ReturnView(persons)End Function
Public Async Function Persons() As Task(Of IActionResult)
Dim persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.Method Then
Dim renderer As New ChromePdfRenderer()
' Render View to PDF document
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons)
Response.Headers.Add("Content-Disposition", "inline")
' Output PDF document
Return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf")
End If
Return View(persons)
End Function
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
CSHTML을 PDF로 변환(MVC 프레임워크)
public ActionResultPersons(){ var persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } }; if (HttpContext.Request.HttpMethod == "POST") { // Provide the path to your view file var viewPath = "~/Views/Home/Persons.cshtml"; ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render Razor view to PDF document PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);Response.Headers.Add("Content-Disposition", "inline"); // View the PDF returnFile(pdf.BinaryData, "application/pdf"); } returnView(persons);}
public ActionResult Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (HttpContext.Request.HttpMethod == "POST")
{
// Provide the path to your view file
var viewPath = "~/Views/Home/Persons.cshtml";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor view to PDF document
PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);
Response.Headers.Add("Content-Disposition", "inline");
// View the PDF
return File(pdf.BinaryData, "application/pdf");
}
return View(persons);
}
Public Function Persons() AsActionResult Dim persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} } IfHttpContext.Request.HttpMethod = "POST" Then ' Provide the path to your view file Dim viewPath = "~/Views/Home/Persons.cshtml" Dim renderer As New ChromePdfRenderer() ' Render Razor view to PDF document Dim pdf AsPdfDocument = renderer.RenderView(Me.HttpContext, viewPath, persons) Response.Headers.Add("Content-Disposition", "inline") ' View the PDF ReturnFile(pdf.BinaryData, "application/pdf") End If ReturnView(persons)End Function
Public Function Persons() As ActionResult
Dim persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
If HttpContext.Request.HttpMethod = "POST" Then
' Provide the path to your view file
Dim viewPath = "~/Views/Home/Persons.cshtml"
Dim renderer As New ChromePdfRenderer()
' Render Razor view to PDF document
Dim pdf As PdfDocument = renderer.RenderView(Me.HttpContext, viewPath, persons)
Response.Headers.Add("Content-Disposition", "inline")
' View the PDF
Return File(pdf.BinaryData, "application/pdf")
End If
Return View(persons)
End Function
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
CSHTML을 PDF로 변환(헤드리스 방식)
app.MapGet("/PrintPdf", async () =>{ // Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"; // Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All; // Render the Razor view to an HTML string string html = awaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml"); // Create a new instance of ChromePdfRenderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render the HTML string as a PDF document PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot"); // Return the PDF file as a response returnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");});
app.MapGet("/PrintPdf", async () =>
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Enable detailed logging for troubleshooting
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
// Create a new instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML string as a PDF document
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
// Return the PDF file as a response
return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
ImportsIronPdfImportsMicrosoft.AspNetCore.Httpapp.MapGet("/PrintPdf", Async Function() AsTask(OfIResult) ' Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01" ' Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All ' Render the Razor view to an HTML string Dim html AsString = AwaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml") ' Create a new instance of ChromePdfRenderer Dim renderer As New ChromePdfRenderer() ' Render the HTML string as a PDF document Dim pdf AsPdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot") ' Return the PDF file as a response ReturnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")End Function)
Imports IronPdf
Imports Microsoft.AspNetCore.Http
app.MapGet("/PrintPdf", Async Function() As Task(Of IResult)
' Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
' Enable detailed logging for troubleshooting
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All
' Render the Razor view to an HTML string
Dim html As String = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")
' Create a new instance of ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
' Render the HTML string as a PDF document
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot")
' Return the PDF file as a response
Return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")
End Function)
이 코드 조각에 대한 더 자세한 설명과 추가 기능을 살펴보려면 종합적인 사용 설명서 를 참조하십시오.
2. HTML을 PDF로 변환하는 설정 방법
PDF 문서 조작과 관련하여, IronPDF는 렌더된 PDF에 대한 ChromePdfRenderer.RenderingOptions 속성을 통해 광범위한 사용자 지정 기능을 제공합니다.
설정
설명
예
PaperSize
기존 PDF 파일의 페이지 크기를 설정합니다(A4, Letter, Legal 등).
PdfPaperSize.A4
PaperOrientation
기존 PDF 파일의 방향을 세로 또는 가로로 설정하세요.
PdfPaperOrientation.Landscape
MarginTop/Bottom/Left/Right
페이지 여백을 밀리미터 단위로 설정하세요(기본값: 25mm).
25
CssMediaType
HTML을 PDF로 변환할 때 화면 또는 인쇄용 CSS
PdfCssMediaType.Print
PrintHtmlBackgrounds
배경색/이미지 포함(기본값: true)
진실
EnableJavaScript
HTML 콘텐츠를 렌더링하기 전에 JavaScript 실행합니다.
진실
WaitFor.RenderDelay
동적 HTML 콘텐츠 대기 시간(밀리초)
500
PDF 문서를 조작하기 위한 전체 구성 예시는 다음 코드 조각을 참조하십시오.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Apply print-specific CSS rulesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;// Set custom margins in millimetersrenderer.RenderingOptions.MarginTop = 50;renderer.RenderingOptions.MarginBottom = 50;// Enable background colors and imagesrenderer.RenderingOptions.PrintHtmlBackgrounds = true;// Set paper size and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// Generate PDFs with all settings applied to HTML contentvar htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);pdfDocument.SaveAs("styled-output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
ImportsIronPdfImportsIronPdf.RenderingDim renderer As New ChromePdfRenderer()' Apply print-specific CSS rulesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print' Set custom margins in millimetersrenderer.RenderingOptions.MarginTop = 50renderer.RenderingOptions.MarginBottom = 50' Enable background colors and imagesrenderer.RenderingOptions.PrintHtmlBackgrounds = True' Set paper size and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape' Generate PDFs with all settings applied to HTML contentDim htmlContent AsString = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>"Dim pdfDocument AsPdfDocument = renderer.RenderHtmlAsPdf(htmlContent)pdfDocument.SaveAs("styled-output.pdf")
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
' Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = True
' Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Generate PDFs with all settings applied to HTML content
Dim htmlContent As String = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>"
Dim pdfDocument As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
pdfDocument.SaveAs("styled-output.pdf")
팁: 렌더링된 PDF 파일 형식에서 더 깔끔하고 인쇄에 최적화된 레이아웃을 얻으려면 PdfCssMediaType을 사용하십시오. Screen을 사용하여 사용자가 브라우저에서 보는 것과 정확히 일치시키세요.
인증이나 특정 요청 메타데이터가 필요한 URL을 렌더링할 때, IronPDF는 로그인 자격 증명, 세션 쿠키 및 HTTP 헤더를 요청에 포함할 수 있습니다. 이는 HTML을 별도로 가져올 필요 없이 인트라넷 대시보드, 제한된 보고서 또는 API로 생성된 페이지를 직접 PDF로 렌더링할 수 있게 해 줍니다.
기본 또는 NTLM 인증을 위해 LoginCredentials 객체를 렌더러에 설정하십시오. 토큰 기반 또는 세션 기반 접근을 위해 RenderingOptions을 통해 쿠키 및 헤더를 전달한 후 RenderUrlAsPdf을 호출하십시오.
using IronPdf;var renderer = new ChromePdfRenderer();// Network authentication (Basic, Digest, NTLM)renderer.LoginCredentials = new ChromeHttpLoginCredentials{NetworkUsername = "user@domain.com",NetworkPassword = "securePassword"};// Session cookies for authenticated pagesrenderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";// Custom HTTP headers (e.g., Bearer tokens, API keys)renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";var pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report");pdf.SaveAs("quarterly-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Network authentication (Basic, Digest, NTLM)renderer.LoginCredentials = New ChromeHttpLoginCredentialsWith { .NetworkUsername = "user@domain.com", .NetworkPassword = "securePassword"}' Session cookies for authenticated pagesrenderer.RenderingOptions.CustomCookies("sessionId") = "abc123"' Custom HTTP headers (e.g., Bearer tokens, API keys)renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."Dim pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report")pdf.SaveAs("quarterly-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword"
}
' Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies("sessionId") = "abc123"
' Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.com/pany.com/quarterly-report")
pdf.SaveAs("quarterly-report.pdf")
기업 프록시 뒤에서 외부 리소스를 로드하는 HTML을 렌더링할 때 RenderHtmlAsPdf()의 세 번째 매개변수로 프록시 주소를 전달하십시오. 이는 ChromePdfRenderOptions의 속성이 아니라 메서드 매개변수이므로 렌더러 인스턴스가 아니라 렌더 호출당 설정됩니다.
인증된 프록시에 대해, http://user:pass@host:port 형식을 사용하여 URL에 자격 증명을 직접 포함하십시오. 비밀번호의 특수 문자를 Uri.EscapeDataString()으로 URL-인코딩 하십시오.
using IronPdf;var renderer = new ChromePdfRenderer();// Proxy is the third parameter, not a render optionvar pdf = renderer.RenderHtmlAsPdf( "<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>", baseUrlOrPath: null, proxy: "http://proxy.co/rp.local:8080");pdf.SaveAs("proxied-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter, not a render option
var pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.co/rp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
C#
참고로 RenderUrlAsPdf()은 프록시 매개변수를 허용하지 않습니다. 프록시 뒤에 있는 실시간 URL을 렌더링하려면 먼저 HttpClient을 WebProxy과 구성하여 HTML을 가져온 다음, 자산 로드를 위한 프록시 매개변수와 함께 RenderHtmlAsPdf()에 전달하십시오.
고급 템플릿, 비동기 작업 및 보안 기능을 통해 기업 수준의 HTML-PDF 변환 기능을 활용하세요. 이러한 PDF 조작 방법을 사용하면 대규모로 PDF 문서를 생성하고, 중요한 PDF 파일을 보호하며, HTML을 전문적인 PDF 형식으로 변환할 때 문서의 진위성을 보장할 수 있습니다.
일괄 PDF 생성을 위한 HTML 템플릿 생성 방법
기본 일괄 PDF 생성
일괄 PDF 생성 기능은 여러 개의 개인 맞춤형 PDF 문서를 효율적으로 생성하는 데 필수적입니다. 기본 시나리오에서는 단순한 PDF 조작에 대해 C#의 String.Format 메서드가 가장 좋습니다.
// Simple HTML templating with String.Formatstring htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");// Results in HTML content: <h1>Hello World!</h1>
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
' Simple HTML templating with String.FormatDim htmlTemplate AsString = String.Format("<h1>Hello {0}!</h1>", "World")' Results in HTML content: <h1>Hello World!</h1>
' Simple HTML templating with String.Format
Dim htmlTemplate As String = String.Format("<h1>Hello {0}!</h1>", "World")
' Results in HTML content: <h1>Hello World!</h1>
PDF 문서를 생성해야 하는 긴 템플릿의 경우 HTML 콘텐츠에서 자리 표시자 대체 기능을 사용하세요.
using IronPdf;// Define reusable HTML template for PDF filesvar htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";// Customer names for batch PDF conversion processingvar names = new[] { "John", "James", "Jenny" };// Create personalized PDF documents for each customervar renderer = new ChromePdfRenderer();foreach (var name in names){ // Replace placeholder with actual data in HTML string var htmlInstance = htmlTemplate.Replace("[[NAME]]", name); // Generate personalized PDF document from HTML content var pdf = renderer.RenderHtmlAsPdf(htmlInstance); // Save with customer-specific filename as PDF files pdf.SaveAs($"{name}-invoice.pdf");}
using IronPdf;
// Define reusable HTML template for PDF files
var htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";
// Customer names for batch PDF conversion processing
var names = new[] { "John", "James", "Jenny" };
// Create personalized PDF documents for each customer
var renderer = new ChromePdfRenderer();
foreach (var name in names)
{
// Replace placeholder with actual data in HTML string
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
// Generate personalized PDF document from HTML content
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
// Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf");
}
ImportsIronPdf' Define reusable HTML template for PDF filesDim htmlTemplate AsString = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>"' Customer names for batch PDF conversion processingDim names AsString() = {"John", "James", "Jenny"}' Create personalized PDF documents for each customerDim renderer As New ChromePdfRenderer()For Each name In names ' Replace placeholder with actual data in HTML string Dim htmlInstance AsString = htmlTemplate.Replace("[[NAME]]", name) ' Generate personalized PDF document from HTML content Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance) ' Save with customer-specific filename as PDF files pdf.SaveAs($"{name}-invoice.pdf")Next
Imports IronPdf
' Define reusable HTML template for PDF files
Dim htmlTemplate As String = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>"
' Customer names for batch PDF conversion processing
Dim names As String() = {"John", "James", "Jenny"}
' Create personalized PDF documents for each customer
Dim renderer As New ChromePdfRenderer()
For Each name In names
' Replace placeholder with actual data in HTML string
Dim htmlInstance As String = htmlTemplate.Replace("[[NAME]]", name)
' Generate personalized PDF document from HTML content
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
' Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf")
Next
Handlebars .NET 을 사용한 HTML을 PDF 템플릿으로 변환
HTML을 PDF로 변환할 때 루프와 조건문이 있는 복잡한 템플릿에 대해, Handlebars.NET 고급 템플릿을 사용하여 동적 HTML 콘텐츠로 PDF 문서를 생성하십시오.
# First, install Handlebars.NET for HTML to PDF templatingPM > Install-패키지 Handlebars.NET
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-패키지 Handlebars.NET
SHELL
using HandlebarsDotNet;using IronPdf;// Define Handlebars template with placeholders for HTML contentvar source = @"<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>";// Compile template for reuse in PDF conversionvar template = Handlebars.Compile(source);// Create data object (can be database records) for HTML to PDF directlyvar data = new { title = "Monthly Report", body = "Sales increased by 15% this month."};// Merge template with data to create HTML contentvar htmlResult = template(data);// Convert templated HTML to PDF using the PDF convertervar renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf(htmlResult);pdf.SaveAs("monthly-report.pdf");
using HandlebarsDotNet;
using IronPdf;
// Define Handlebars template with placeholders for HTML content
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile template for reuse in PDF conversion
var template = Handlebars.Compile(source);
// Create data object (can be database records) for HTML to PDF directly
var data = new {
title = "Monthly Report",
body = "Sales increased by 15% this month."
};
// Merge template with data to create HTML content
var htmlResult = template(data);
// Convert templated HTML to PDF using the PDF converter
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlResult);
pdf.SaveAs("monthly-report.pdf");
ImportsHandlebarsDotNetImportsIronPdf' Define Handlebars template with placeholders for HTML contentDim source AsString = "<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>"' Compile template for reuse in PDF conversionDim template = Handlebars.Compile(source)' Create data object (can be database records) for HTML to PDF directlyDim data = New With { .title = "Monthly Report", .body = "Sales increased by 15% this month."}' Merge template with data to create HTML contentDim htmlResult = template(data)' Convert templated HTML to PDF using the PDF converterDim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf(htmlResult)pdf.SaveAs("monthly-report.pdf")
Imports HandlebarsDotNet
Imports IronPdf
' Define Handlebars template with placeholders for HTML content
Dim source As String =
"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile template for reuse in PDF conversion
Dim template = Handlebars.Compile(source)
' Create data object (can be database records) for HTML to PDF directly
Dim data = New With {
.title = "Monthly Report",
.body = "Sales increased by 15% this month."
}
' Merge template with data to create HTML content
Dim htmlResult = template(data)
' Convert templated HTML to PDF using the PDF converter
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlResult)
pdf.SaveAs("monthly-report.pdf")
IronPDF는 대규모로 PDF 파일을 생성해야 하는 경우 귀하의 HTML을 PDF로 변환하는 요구 사항을 완벽하게 충족하는 비동기 및 멀티스레딩 지원과 함께 기업급 성능을 제공합니다.
using IronPdf;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;public class PdfGenerationService{ // Async method for non-blocking PDF generation from HTML content public async Task<byte[]> GeneratePdfAsync(string html) { var renderer = new ChromePdfRenderer(); // Async HTML to PDF conversion preserves thread pool var pdf = await renderer.RenderHtmlAsPdfAsync(html); // Return PDF files as byte array for web responses return pdf.BinaryData; } // Concurrent batch PDF generation for multiple HTML strings public async TaskGenerateMultiplePdfsAsync(List<string> html템플릿) { var renderer = new ChromePdfRenderer(); // Create parallel conversion tasks to generate PDF documents var tasks = html템플릿.Select(html => renderer.RenderHtmlAsPdfAsync(html) ); // Await all PDF conversions simultaneously var pdfs = awaitTask.WhenAll(tasks); // Save generated PDF files from HTML content for (int i = 0; i < pdfs.Length; i++) { pdfs[i].SaveAs($"document-{i}.pdf"); } }}
using IronPdf;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class PdfGenerationService
{
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> html템플릿)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = html템플릿.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
}
C#
IronPDF v2026.6.1 · .NET 10 · 2026년 6월에 확인됨.
팁: HTML을 PDF로 변환할 때 성능 최적화 팁
최적의 PDF 생성 성능을 위해 64비트 시스템을 사용하십시오.
PDF 문서를 생성할 때는 충분한 서버 리소스를 확보하십시오 (성능이 부족한 무료 서버는 피하십시오).
HTML 콘텐츠에 포함된 복잡한 JavaScript 에 대해 충분한 렌더링 지연 시간을 허용하십시오.
가능한 경우 ChromePdfRenderer 인스턴스를 재사용하십시오.
배치/비동기 작업을 위한 최근의 메모리 수정 사항을 활용하여 리소스 사용량을 줄이십시오; 사용자 지정 헤더/푸터를 반복적으로 사용하여 파일 크기를 줄이는 테스트를 진행합니다.
HTML 콘텐츠를 보호된 PDF 형식으로 변환할 때 암호와 권한을 사용하여 민감한 PDF 문서를 안전하게 보호하세요.
using IronPdf;var renderer = new ChromePdfRenderer();// Convert HTML to PDF with securityvar pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");// Configure security settings for PDF filespdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documentspdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files// Set granular permissions for PDF formatpdf.SecuritySettings.AllowUserCopyPasteContent = false;pdf.SecuritySettings.AllowUserAnnotations = false;pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality;// Apply strong encryption to PDF documentspdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;pdf.SaveAs("secure-document.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML to PDF with security
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");
// Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files
// Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality;
// Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;
pdf.SaveAs("secure-document.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Convert HTML to PDF with securityDim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>")' Configure security settings for PDF filespdf.SecuritySettings.UserPassword = "user123" ' Password to open PDF documentspdf.SecuritySettings.OwnerPassword = "owner456" ' Password to modify PDF files' Set granular permissions for PDF formatpdf.SecuritySettings.AllowUserCopyPasteContent = Falsepdf.SecuritySettings.AllowUserAnnotations = Falsepdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality' Apply strong encryption to PDF documentspdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256pdf.SaveAs("secure-document.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML to PDF with security
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>")
' Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123" ' Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456" ' Password to modify PDF files
' Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality
' Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256
pdf.SaveAs("secure-document.pdf")
PDF 파일에 디지털 서명을 추가하는 방법
HTML 콘텐츠에서 PDF 파일을 생성할 때 PDF 문서의 진위성을 보장하기 위해 암호화 서명을 추가하세요. 서명이 완료되면 서명을 확인하고 서명자의 인증서를 읽습니다 감사 및 준수 검사입니다.
using IronPdf;using IronPdf.Signing;var renderer = new ChromePdfRenderer();// Generate PDF from HTML pagevar pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");// Create digital signature with certificate for PDF filesvar signature = new PdfSignature("certificate.pfx", "password"){SigningContact = "legal@company.com",SigningLocation = "New York, NY",SigningReason = "Contract Approval"};// Apply signature to PDF documentspdf.Sign(signature);pdf.SaveAs("signed-contract.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML page
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");
// Create digital signature with certificate for PDF files
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "legal@company.com",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
// Apply signature to PDF documents
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
표준 HTML 폼 요소를 대화형 작성 가능 PDF 폼 필드로 변환하려면 CreatePdfFormsFromHtml 렌더링 옵션을 활성화하십시오. 이는 텍스트 입력, 체크박스, 라디오 버튼 및 드롭다운 메뉴를 생성된 PDF 문서의 편집 가능한 필드로 보존합니다.
using IronPdf;var renderer = new ChromePdfRenderer();// Enable HTML form to PDF form conversionrenderer.RenderingOptions.CreatePdfFormsFromHtml = true;string htmlForm = @" <h2>Employee Onboarding Form</h2> <form> <label>Full Name:</label> <input type='text' name='fullName' value='' /><br/> <label>Department:</label> <select name='department'> <option value='engineering'>Engineering</option> <option value='marketing'>Marketing</option> <option value='sales'>Sales</option> </select><br/> <label>Agree to Terms:</label> <input type='checkbox' name='agreeTerms' /> </form>";var pdf = renderer.RenderHtmlAsPdf(htmlForm);pdf.SaveAs("onboarding-form.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string htmlForm = @"
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>";
var pdf = renderer.RenderHtmlAsPdf(htmlForm);
pdf.SaveAs("onboarding-form.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Enable HTML form to PDF form conversionrenderer.RenderingOptions.CreatePdfFormsFromHtml = TrueDim htmlForm AsString = " <h2>Employee Onboarding Form</h2> <form> <label>Full Name:</label> <input type='text' name='fullName' value='' /><br/> <label>Department:</label> <select name='department'> <option value='engineering'>Engineering</option> <option value='marketing'>Marketing</option> <option value='sales'>Sales</option> </select><br/> <label>Agree to Terms:</label> <input type='checkbox' name='agreeTerms' /> </form>"Dim pdf = renderer.RenderHtmlAsPdf(htmlForm)pdf.SaveAs("onboarding-form.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
Dim htmlForm As String = "
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlForm)
pdf.SaveAs("onboarding-form.pdf")
{
경고: HTML의 각 양식 필드에는 고유한 name 속성이 있어야 합니다. 중복된 이름은 사용자가 양식을 작성할 때 예기치 않은 동작을 일으키는 PDF에서 필드가 동일한 값을 공유하게 됩니다.
전체 문서보다는 페이지의 특정 섹션을 렌더링하려면 렌더링 전에 대상 요소를 분리하세요. 가장 직접적인 접근 방식은 백분위수를 JavaScript 렌더링 옵션을 사용하여 문서 본문을 타깃 요소의 콘텐츠로 대체하는 것이며, 추출 전에 요소가 존재하는지 확인하기 위해 WaitFor.HtmlQuerySelector()를 조합한 것입니다. 아래 코드 조각은 document.head을 보존하여 스타일시트와 폰트가 유지되도록 합니다; 이 단계가 없으면 상위 선택기를 사용하는 CSS 규칙이 추출된 PDF에서 손실됩니다.
서버 측 시나리오에서 원시 HTML에 액세스할 수 있는 경우, AngleSharp과 같은 해석기를 사용하여 타깃 조각을 추출하고 이를 RenderHtmlAsPdf()에 전달하십시오. JavaScript 실행은 필요하지 않습니다.
using IronPdf;// Full page HTML containing the target elementstring fullPageHtml = @"<html><body> <header><h1>Acme Corp Invoice</h1></header> <div id='invoice-summary'> <h2>Invoice #12345</h2> <p>Total: $1,250.00</p> </div> <footer>Confidential</footer></body></html>";var renderer = new ChromePdfRenderer();renderer.RenderingOptions.EnableJavaScript = true;// Replace the body with only the target elementrenderer.RenderingOptions.Javascript = @" var el = document.querySelector('#invoice-summary'); if (el) { var head = document.head.innerHTML; document.body.innerHTML = el.outerHTML; document.head.innerHTML = head; }";// Wait for the target element before JS executesrenderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);pdf.SaveAs("invoice-summary.pdf");
using IronPdf;
// Full page HTML containing the target element
string fullPageHtml = @"
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<p>Total: $1,250.00</p>
</div>
<footer>Confidential</footer>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.Javascript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
// Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary.pdf");
ImportsIronPdf' Full page HTML containing the target elementDim fullPageHtml AsString = "<html><body> <header><h1>Acme Corp Invoice</h1></header> <div id='invoice-summary'> <h2>Invoice #12345</h2> <p>Total: $1,250.00</p> </div> <footer>Confidential</footer></body></html>"Dim renderer As New ChromePdfRenderer()renderer.RenderingOptions.EnableJavaScript = True' Replace the body with only the target elementrenderer.RenderingOptions.Javascript = " var el = document.querySelector('#invoice-summary'); if (el) { var head = document.head.innerHTML; document.body.innerHTML = el.outerHTML; document.head.innerHTML = head; }"' Wait for the target element before JS executesrenderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)Dim pdf = renderer.RenderHtmlAsPdf(fullPageHtml)pdf.SaveAs("invoice-summary.pdf")
Imports IronPdf
' Full page HTML containing the target element
Dim fullPageHtml As String = "
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<p>Total: $1,250.00</p>
</div>
<footer>Confidential</footer>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
' Replace the body with only the target element
renderer.RenderingOptions.Javascript = "
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
"
' Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)
Dim pdf = renderer.RenderHtmlAsPdf(fullPageHtml)
pdf.SaveAs("invoice-summary.pdf")
인증 뒤에 있는 페이지를 렌더링하는 세 가지 메커니즘이 있습니다: 네트워크 로그인 자격 증명, 사용자 정의 쿠키 및 HTTP 요청 헤더. 이는 보호된 웹 콘텐츠를 PDF로 변환할 때 가장 일반적인 인증 시나리오를 다룹니다.
로그인 자격 증명
보호된 URL을 PDF로 변환할 때 기본, 다이제스트, 또는 NTLM 인증을 위해 ChromeHttpLoginCredentials을 사용하십시오.
using IronPdf;var renderer = new ChromePdfRenderer();// Configure network authenticationrenderer.LoginCredentials = new ChromeHttpLoginCredentials{NetworkUsername = "user@domain.com",NetworkPassword = "securePassword",AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic};var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports");pdf.SaveAs("authenticated-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure network authentication
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword",
AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
};
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports");
pdf.SaveAs("authenticated-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Configure network authenticationrenderer.LoginCredentials = New ChromeHttpLoginCredentialsWith { .NetworkUsername = "user@domain.com", .NetworkPassword = "securePassword", .AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic}Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports")pdf.SaveAs("authenticated-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Configure network authentication
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword",
.AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
}
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports")
pdf.SaveAs("authenticated-report.pdf")
쿠키 및 HTTP 헤더
토큰 기반 또는 세션 기반 인증의 경우, 사용자 정의 쿠키 및 HTTP 헤더를 렌더링 요청에 직접 첨부하세요.
using IronPdf;var renderer = new ChromePdfRenderer();// Add session cookiesrenderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";// Add custom HTTP headers (e.g., API key or Bearer token)renderer.RenderingOptions.HttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");pdf.SaveAs("dashboard.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Add session cookies
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";
renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";
// Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.HttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");
pdf.SaveAs("dashboard.pdf");
C#
팁: HTML 양식 기반 로그인(POST 사용자 이름/암호)의 경우 HttpClient을 처음 인증하고, CustomCookies 사전에 결과 쿠키를 전달하여 보호된 페이지를 렌더링하는 것을 고려하세요.
HTML 조각을 결합하여 PDF를 생성하려면 병합할 수 있습니다. 이렇게 하면 여러 섹션의 보고서를 생성하거나 서로 다른 소스에서 콘텐츠를 결합할 수 있습니다:
var renderer = new ChromePdfRenderer();PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");var merged = PdfDocument.Merge(part1, part2);merged.SaveAs("Merged.pdf");// Alternative approach: copy specific pagesvar combinedDoc = new PdfDocument();combinedDoc.CopyPage(part1, 0); // Copy first pagecombinedDoc.CopyPage(part2, 0); // Copy first pagecombinedDoc.SaveAs("Combined.pdf");
var renderer = new ChromePdfRenderer();
PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");
PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");
var merged = PdfDocument.Merge(part1, part2);
merged.SaveAs("Merged.pdf");
// Alternative approach: copy specific pages
var combinedDoc = new PdfDocument();
combinedDoc.CopyPage(part1, 0); // Copy first page
combinedDoc.CopyPage(part2, 0); // Copy first page
combinedDoc.SaveAs("Combined.pdf");
Dim renderer = New ChromePdfRenderer()Dim part1 AsPdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>")Dim part2 AsPdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>")Dim merged = PdfDocument.Merge(part1, part2)merged.SaveAs("Merged.pdf")' Alternative approach: copy specific pagesDim combinedDoc = New PdfDocument()combinedDoc.CopyPage(part1, 0) ' Copy first pagecombinedDoc.CopyPage(part2, 0) ' Copy first pagecombinedDoc.SaveAs("Combined.pdf")
Dim renderer = New ChromePdfRenderer()
Dim part1 As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>")
Dim part2 As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>")
Dim merged = PdfDocument.Merge(part1, part2)
merged.SaveAs("Merged.pdf")
' Alternative approach: copy specific pages
Dim combinedDoc = New PdfDocument()
combinedDoc.CopyPage(part1, 0) ' Copy first page
combinedDoc.CopyPage(part2, 0) ' Copy first page
combinedDoc.SaveAs("Combined.pdf")
서로 다른 HTML 조각에서 여러 섹션의 보고서를 생성할 때 유용합니다. 탐색을 개선하기 위해 북마크를 추가할 수 있습니다.
웹 API에서 HTML을 PDF로 어떻게 변환하나요?
ASP.NET Web API에서 MemoryStream을 사용하여 디스크에 저장하지 않고 PDF를 생성하고 반환합니다. 이 패턴은 Blazor 애플리케이션 및 RESTful 서비스에 이상적입니다:
[HttpGet("download")]public IActionResultGetPdf(){ var renderer = new ChromePdfRenderer(); string html = "<h1>Web Report</h1><p>Generated dynamically.</p>"; var pdf = renderer.RenderHtmlAsPdf(html); var bytes = pdf.BinaryData; // Optional: Add metadata pdf.MetaData.Author = "API Service"; pdf.MetaData.CreationDate = DateTime.Now; returnFile(bytes, "application/pdf", "report.pdf");}
[HttpGet("download")]
public IActionResult GetPdf()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Web Report</h1><p>Generated dynamically.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;
// Optional: Add metadata
pdf.MetaData.Author = "API Service";
pdf.MetaData.CreationDate = DateTime.Now;
return File(bytes, "application/pdf", "report.pdf");
}
<HttpGet("download")>Public Function GetPdf() AsIActionResult Dim renderer = New ChromePdfRenderer() Dim html AsString = "<h1>Web Report</h1><p>Generated dynamically.</p>" Dim pdf = renderer.RenderHtmlAsPdf(html) Dim bytes = pdf.BinaryData ' Optional: Add metadata pdf.MetaData.Author = "API Service" pdf.MetaData.CreationDate = DateTime.Now ReturnFile(bytes, "application/pdf", "report.pdf")End Function
<HttpGet("download")>
Public Function GetPdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<h1>Web Report</h1><p>Generated dynamically.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes = pdf.BinaryData
' Optional: Add metadata
pdf.MetaData.Author = "API Service"
pdf.MetaData.CreationDate = DateTime.Now
Return File(bytes, "application/pdf", "report.pdf")
End Function
이 패턴은 .NET 10 웹 애플리케이션에서 서버 측 PDF 생성에 매우 적합합니다. MVC 애플리케이션의 CSHTML 뷰와 통합할 수 있습니다.
헤더, 워터마크 및 보안을 추가하는 방법
전문적인 헤더 및 푸터 추가
페이지 번호, 날짜, 또는 브랜드를 표시하는 헤더 및 푸터는 다중 페이지 문서를 훨씬 더 읽기 쉽게 하고 전문적으로 보이게 만듭니다. IronPDF는 이들을 HTML 조각으로 처리하므로 이미지와 브랜드 색상을 포함한 전체 CSS 스타일을 사용할 수 있습니다:
using IronPdf;var renderer = new ChromePdfRenderer();renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter{MaxHeight = 50,HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",BaseUrl = new Uri(@"file:///C:/assets/")};renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter{MaxHeight = 30,HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",DrawDividerLine = true};renderer.RenderingOptions.MarginTop = 60;renderer.RenderingOptions.MarginBottom = 40;var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");pdf.SaveAs("report-with-headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
MaxHeight = 50,
HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
BaseUrl = new Uri(@"file:///C:/assets/")
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 30,
HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");
pdf.SaveAs("report-with-headers.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooterWith { .MaxHeight = 50, .HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>", .BaseUrl = New Uri("file:///C:/assets/")}renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooterWith { .MaxHeight = 30, .HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>", .DrawDividerLine = True}renderer.RenderingOptions.MarginTop = 60renderer.RenderingOptions.MarginBottom = 40Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>")pdf.SaveAs("report-with-headers.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.MaxHeight = 50,
.HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
.BaseUrl = New Uri("file:///C:/assets/")
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.MaxHeight = 30,
.HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
.DrawDividerLine = True
}
renderer.RenderingOptions.MarginTop = 60
renderer.RenderingOptions.MarginBottom = 40
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>")
pdf.SaveAs("report-with-headers.pdf")
{page} 및 {total-pages} 같은 플레이스홀더는 렌더링 시간에 자동으로 대체됩니다. 동적 날짜 삽입, 로고 배치, 교차 페이지 스타일에 대한 헤더 및 푸터 튜토리얼을 검토하십시오.
워터마크, 암호화 및 디지털 서명 적용
워터마크는 초안 문서 및 기밀 보고서를 보호합니다. 암호 보호 및 권한 설정은 PDF를 인쇄, 복사, 또는 편집할 수 있는 사람을 제한합니다. 디지털 서명은 계약서 및 규제 문서에 대해 입증 가능한 진위층을 추가합니다. 단일 워크플로우에서 이 세 가지를 모두 결합할 수 있습니다:
using IronPdf;using System.Security.Cryptography.X509Certificates;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");// Watermarkpdf.ApplyWatermark( "<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>", rotation: 45, opacity: 30);// Encryption and permissionspdf.SecuritySettings.UserPassword = "user123";pdf.SecuritySettings.OwnerPassword = "owner456";pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;pdf.SecuritySettings.AllowUserCopyPasteContent = false;// Digital signaturevar cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");var signature = new PdfSignature(cert){SigningContact = "Jane Smith",SigningLocation = "New York, NY",SigningReason = "Contract Approval"};pdf.Sign(signature);pdf.SaveAsRevision("signed-contract.pdf");
using IronPdf;
using System.Security.Cryptography.X509Certificates;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");
// Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation: 45,
opacity: 30
);
// Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
// Digital signature
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");
var signature = new PdfSignature(cert)
{
SigningContact = "Jane Smith",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
ImportsIronPdfImportsSystem.Security.Cryptography.X509CertificatesDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>")' Watermarkpdf.ApplyWatermark( "<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>", rotation:=45, opacity:=30)' Encryption and permissionspdf.SecuritySettings.UserPassword = "user123"pdf.SecuritySettings.OwnerPassword = "owner456"pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrintpdf.SecuritySettings.AllowUserCopyPasteContent = False' Digital signatureDim cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password")Dim signature As New PdfSignature(cert) With { .SigningContact = "Jane Smith", .SigningLocation = "New York, NY", .SigningReason = "Contract Approval"}pdf.Sign(signature)pdf.SaveAsRevision("signed-contract.pdf")
Imports IronPdf
Imports System.Security.Cryptography.X509Certificates
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>")
' Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation:=45,
opacity:=30
)
' Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
' Digital signature
Dim cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password")
Dim signature As New PdfSignature(cert) With {
.SigningContact = "Jane Smith",
.SigningLocation = "New York, NY",
.SigningReason = "Contract Approval"
}
pdf.Sign(signature)
pdf.SaveAsRevision("signed-contract.pdf")
클라우드 환경에서 HTML을 PDF로 변환하려면 헤드리스 렌더링, 임시 파일 경로 및 리소스 할당을 위한 특정 구성이 필요합니다. 이 섹션은 IronPDF와 함께 가장 일반적인 클라우드 플랫폼 및 컨테이너화된 배포를 다룹니다.
플랫폼
최소 리소스
패키지
자동 구성
임시 경로
핵심 주의 사항
Azure 앱 서비스
B1 등급 (기본)
IronPdf.Linux
true
/tmp
무료/공유 단계는 실패 (GPU 없음, 낮은 메모리)
Azure Functions(Windows)
B1 등급
IronPdf
true
/tmp
"패키지 파일에서 실행" 체크 해제
AWS 람다
512 MB / 60초 제한 시간
IronPdf.Linux
true
/tmp (필수)
기본 파일 시스템은 읽기 전용
Docker (Ubuntu/Debian)
이미지 종속
IronPdf.Linux
false
이미지 기본값
false 설정 (Dockerfile이 종속성을 처리합니다)
Azure에 배포하는 방법
Azure Functions 또는 App Service에 배포할 때 GPU 가속을 비활성화하고 Chrome 기반 렌더링에 충분한 메모리를 제공하는 호스팅 등급을 확인하세요. 애플리케이션 시작 시점에 렌더링 호출 전에 이 설정을 추가하세요.
Azure 샌드박스는 헤드리스 모드로 실행되며 GPU 접근이 없고, 무료/공유 등급(F1, D1)은 Chrome이 필요한 리소스를 제공하지 않습니다. B1 (기본) 등급 이상을 대상으로 하세요.
using IronPdf;// Azure sandboxes block GPU access, always disableIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;// Required on non-GUI Linux systemsIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");pdf.SaveAs("azure-report.pdf");
using IronPdf;
// Azure sandboxes block GPU access, always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");
pdf.SaveAs("azure-report.pdf");
ImportsIronPdf' Azure sandboxes block GPU access, always disableIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled' Required on non-GUI Linux systemsIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = TrueDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>")pdf.SaveAs("azure-report.pdf")
Imports IronPdf
' Azure sandboxes block GPU access, always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>")
pdf.SaveAs("azure-report.pdf")
주의: Azure App Service 무료 및 공유 등급(F1, D1)은 Chrome 기반 PDF 렌더링을 위한 충분한 리소스를 가지고 있지 않습니다. 최소 B1 (기본) 등급을 사용하여 메모리 부족 오류 및 프로세스 타임아웃을 피하십시오.
AWS Lambda는 Chrome 기반 PDF 렌더링을 위한 Docker 기반 배포가 필요합니다. 기본 Lambda 파일 시스템은 읽기 전용이므로 모든 임시 및 배포 경로는 /tmp를 가리켜야 합니다.
렌더링 호출 전에 함수 처리기 상단에서 이러한 설정을 구성하세요.
using Amazon.Lambda.Core;using IronPdf;public class PdfFunction{ public stringFunctionHandler(string input, ILambdaContext context) { // Lambda's only writable directory var tmpPath = "/tmp/";IronPdf.Installation.TempFolderPath = tmpPath;IronPdf.Installation.CustomDeploymentDirectory = tmpPath;IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled; // Let IronPDF install Chrome dependencies on first cold startIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true; context.Logger.LogLine("Rendering PDF..."); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(input); // Save to /tmp before uploading to S3 or returning var outputPath = $"{tmpPath}output.pdf"; pdf.SaveAs(outputPath); return outputPath; }}
using Amazon.Lambda.Core;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
ImportsAmazon.Lambda.CoreImportsIronPdfPublic Class PdfFunction Public Function FunctionHandler(input AsString, context AsILambdaContext) AsString ' Lambda's only writable directory Dim tmpPath AsString = "/tmp/"IronPdf.Installation.TempFolderPath = tmpPathIronPdf.Installation.CustomDeploymentDirectory = tmpPathIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled ' Let IronPDF install Chrome dependencies on first cold startIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True context.Logger.LogLine("Rendering PDF...") Dim renderer As New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(input) ' Save to /tmp before uploading to S3 or returning Dim outputPath AsString = $"{tmpPath}output.pdf" pdf.SaveAs(outputPath) Return outputPath End FunctionEnd Class
Imports Amazon.Lambda.Core
Imports IronPdf
Public Class PdfFunction
Public Function FunctionHandler(input As String, context As ILambdaContext) As String
' Lambda's only writable directory
Dim tmpPath As String = "/tmp/"
IronPdf.Installation.TempFolderPath = tmpPath
IronPdf.Installation.CustomDeploymentDirectory = tmpPath
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
context.Logger.LogLine("Rendering PDF...")
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(input)
' Save to /tmp before uploading to S3 or returning
Dim outputPath As String = $"{tmpPath}output.pdf"
pdf.SaveAs(outputPath)
Return outputPath
End Function
End Class
참고해 주세요: Lambda 함수를 최소 512 MB 메모리와 60초 타임아웃으로 설정하세요. Chrome 기반 렌더링은 메모리 소모가 크며, 콜드 스타트는 임베디드 브라우저 엔진을 초기화하는 데 추가 시간이 필요합니다.
Docker 배포의 경우 이미지 크기를 줄이고 런타임 자산 다운로드를 피하기 위해 IronPdf.Linux NuGet 패키지를 사용하세요. 이 패키지는 컨테이너화된 환경에 최적화된 리눅스 기반 바이너리를 미리 번들로 포함합니다.
Dockerfile이 이미 apt-get을 통해 Chrome의 공유 라이브러리 종속성을 설치한 경우 LinuxAndDockerDependencies자동 구성 = false을 설정하세요. 런타임 자동 설치는 그럴 경우 중복되며 권한 오류나 더 긴 콜드 스타트를 발생시킬 수 있습니다.
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:10.0
# Install Chrome dependencies for PDF rendering
RUN apt-get update && apt-get install -y \
libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libxshmfence1 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text
using IronPdf;// Dependencies handled by Dockerfile apt-get, disable runtime installIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;// No GPU in containersIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");pdf.SaveAs("output.pdf");
using IronPdf;
// Dependencies handled by Dockerfile apt-get, disable runtime install
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;
// No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");
pdf.SaveAs("output.pdf");
ImportsIronPdf' Dependencies handled by Dockerfile apt-get, disable runtime installIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = False' No GPU in containersIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.DisabledDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>")pdf.SaveAs("output.pdf")
Imports IronPdf
' Dependencies handled by Dockerfile apt-get, disable runtime install
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = False
' No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>")
pdf.SaveAs("output.pdf")
.NET Core 에서 HTML을 PDF로 변환하는 성능을 최적화하고 확장하는 방법은 무엇일까요?
IronPDF의 Chromium 엔진은 이미 최신 하드웨어에서 대부분의 페이지를 < 1초 이내에 렌더링하지만, 렌더링 배치, 멀티스레딩 활성화 및 Headless Chrome 오버헤드 최소화로 처리량을 곱할 수 있습니다. 아래의 팁은 모든 .NET 버전에 동일하게 적용됩니다.
1. 백그라운드 스레드 풀에서 일괄 렌더링
IronPdf.License.LicenseKey = "YourLicenseKey";ChromePdfRenderer renderer = new ChromePdfRenderer();// Set rendering optionsrenderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Set rendering options
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;
renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
ImportsIronPdfLicense.LicenseKey = "YourLicenseKey"Dim renderer As New ChromePdfRenderer()' Set rendering optionsrenderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portraitrenderer.RenderHtmlFileAsPdf("testFile.html").SaveAs("GeneratedFile.pdf")
Imports IronPdf
License.LicenseKey = "YourLicenseKey"
Dim renderer As New ChromePdfRenderer()
' Set rendering options
renderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portrait
renderer.RenderHtmlFileAsPdf("testFile.html").SaveAs("GeneratedFile.pdf")
ChromePdfRenderer는 **스레드 안전성**을 가지고 있습니다; 단일 인스턴스가 교착 상태 없이 수십 개의 동시 작업을 처리할 수 있습니다.
Parallel.ForEach는 모든 CPU 코어를 포화시킵니다; 일반적인 서버는 단일 스레드 루프와 비교하여 4–6배 처리량 증가를 봅니다.
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("2.pdf")
pdf.AppendPdf(pdf2)
pdf.SaveAs("appendedFile.pdf")
실시간 개발자 도구 추적 기능을 사용하면 코드를 다시 컴파일하지 않고도 누락된 글꼴, 404 이미지 및 타이밍 이벤트를 확인할 수 있습니다.
5. 다시 렌더링하는 대신 템플릿 PDF를 재사용하세요.
송장 실행의 경우 플레이스홀더가 포함된 템플릿 PDF를 생성하고 복잡한 HTML을 다시 구축하는 대신 텍스트 교체를 수행합니다. 속도가 10배 더 빠르고 메모리 사용량도 적습니다.
IronPDF 강력한 Chromium 기반 렌더링 엔진, 직관적인 API 및 잦은 제품 개선 덕분에 C# PDF 생성과 관련하여 많은 팀에서 선택하는 솔루션입니다. 여러분의 PDF 생성 요구에 가장 적합한 PDF 변환기를 찾기 위해 IronPDF 다른 PDF 변환기와 비교해 보겠습니다.
무료 및 오픈 소스 대안
고려될 수 있는 도구들:
PuppeteerSharp: 헤드리스 Chrome을 구동하는 Puppeteer의 MIT 라이센스 .NET 포트.
.NET Playwright: Microsoft의 Apache-2.0 자동화 라이브러리로, 역시 Chromium 기반.
wkhtmltopdf: 오래된 독립 실행형 HTML-to-PDF 바이너리.
네이티브 브라우저 루트: 헤드리스 브라우저 또는 OS 인쇄 드라이버에서 직접 PDF로 인쇄.
먼저 드로 예정인 구별: PuppeteerSharp 그리고 Playwright는 PDF 라이브러리라기보다는 브라우저 자동화 프레임워크입니다. 이들은 실제 Chromium 상단에 PDF로 인쇄하는 호출을 노출하므로 렌더링 충실도가 뛰어나지만 머릿글과 바닥글, 암호화, 서명, PDF/A와 같은 PDF 특정 사항과 브라우저의 수명 주기는 직접 처리해야 합니다: Chromium 바이너리 배송 및 업데이트, 동시성 처리와 충돌 복구, 손으로 문서 구조를 만들어야 합니다. Playwright는 초기에 알아두면 좋은 제약 사항을 추가합니다: PdfAsync는 헤드리스 Chromium(아니라면 FireFox 또는 WebKit)에서만 실행되므로, 배포 환경에서는 헤드리스 Chrome을 보장해야 합니다. 이는 컨테이너 및 서버리스 환경에서 중요합니다.
wkhtmltopdf는 또 다르게 자리합니다. 프로젝트는 2024년에 아카이브되었으며 최종 릴리스(0.12.6, 2020)는 ~2012년 Qt WebKit 엔진을 실행하며 더 이상의 보안 패치를 받지 않으며 보안 미설정 심각한 SSRF 자문(CVE-2022-35583)을 포함합니다; 신뢰할 수 있는 입력에 대한 간단한 정적 문서에는 여전히 작업 가능하지만, 대외적 결과물에는 덜 작용합니다. 네이티브 브라우저 경로는 어떤 라이브러리도 필요하지 않으며, 어떤 .NET-본질적 PDF API나 서버 사이드 자동화에 대한 실제 제어를 가지는 데 큰 다운사이드를 가지는 것입니다.
프로토타입, 내장 도구, 제로 예산 작업에 대해, 이러한 대안들은 유효한 선택입니다. 아래 비교는 기능별로 상용 라이브러리를 다룹니다.
빠른 의사 결정 매트릭스: IronPDF 와 기타 .NET PDF 변환기 비교
해결책
사용 시점
~에 가장 적합함
IronPDF
최신 웹사이트/HTML을 원본과 동일한 시각적 품질로 PDF로 변환합니다.
안정적인 HTML 렌더링 엔진, 동적 콘텐츠 및 전문적인 지원이 필요한 기업용 애플리케이션.
wkhtmltopdf
구식 렌더링이 허용되는 중요하지 않은 애플리케이션에서 간단한 HTML 변환입니다.
기존 HTML/CSS를 이용한 기본 문서 생성.
Syncfusion
이미 Syncfusion 생태계에 투자했거나 무료 커뮤니티 라이선스를 받을 자격이 있는 경우.
IronPDF 픽셀 단위까지 완벽한 결과를 제공하며, 모든 동적 웹 콘텐츠, 최신 웹 글꼴 스타일 및 대화형 요소를 Chrome에 표시되는 그대로 정확하게 보존합니다. 이 모든 작업은 단 몇 줄의 코드로 가능합니다.
Syncfusion
Syncfusion에서 PDF를 렌더링했는데 대부분의 섹션과 스타일, 특히 동적 콘텐츠가 누락되었습니다. 처음에는 레딧 보안 시스템에 의해 차단되었습니다. 더 나은 결과를 얻으려면 광범위한 명령줄 조정이 필요하지만, 출력은 여전히 불완전합니다.
Aspose.PDF
Aspose.PDF를 사용하려면 먼저 수동으로 HTML 파일을 다운로드해야 합니다(직접 URL 다운로드는 지원하지 않습니다). 변환 후 출력물은 적절한 서식이 적용되지 않았고 거의 모든 콘텐츠 섹션이 누락되어 동적 콘텐츠를 사용하는 최신 웹 환경에 적합하지 않았습니다.
wkhtmltopdf
wkhtmltopdf는 빠르게 완료되었지만 실시간 업데이트, 동적 요소 및 대화형 섹션과 같은 중요한 콘텐츠가 누락된 단순하고 정적인 페이지를 생성했습니다. 이는 wkhtmltopdf가 최신 JavaScript 기반 웹사이트와 호환되지 않음을 보여줍니다.
성능 및 출력 PDF 품질에 대한 결론
안정적인 HTML-PDF 변환기가 필요한 .NET 개발자에게 IronPDF 최소한의 코드, 사용하기 쉬운 API, 그리고 잦은 제품 개선으로 두각을 나타냅니다.
실제 웹 콘텐츠 테스트에서 가장 빠르고 정확한 결과를 제공했으며, Syncfusion은 속도가 느렸고, Aspose는 추가 단계를 요구했으며, wkhtmltopdf는 최신 스타일을 지원하지 못했습니다. IronPDF 오늘날의 HTML을 PDF로 변환하는 워크플로에 있어 속도, 정확성 및 간편함의 최적의 균형을 제공합니다.
참고해 주세요: Aspose, Syncfusion, wkhtmltopdf는 각각의 소유자의 상표입니다. 이 사이트는 해당 업체와 제휴 관계가 없으며, 해당 업체의 승인을 받지 않았습니다. 모든 이름, 로고, 브랜드는 소유자의 것이며, 비교는 작성 시점에 공개된 정보를 기반으로 합니다.
요약
이 가이드는 기본적인 문자열 변환부터 비동기 처리, 디지털 서명, 일괄 생성과 같은 고급 기능에 이르기까지 .NET 에서 HTML을 PDF로 변환하는 데 필요한 모든 내용을 다룹니다. 본 연구에서는 세 가지 변환 방법, 필수 구성, 고급 기능 및 보안 설정을 시연하고, 실제 환경에서 동적 문서 생성을 테스트하여 IronPDF 다른 라이브러리와 비교했습니다.
경쟁사들이 최신 웹사이트와의 호환성 문제나 복잡한 해결 방법을 필요로 하는 동안, IronPDF 최소한의 코드와 강력한 렌더링 엔진으로 완벽한 결과를 제공했습니다.
PDF 워크플로우를 간소화하고 단 몇 줄의 코드로 다양한 PDF 생성 기능을 경험해 보시겠습니까? NuGet 패키지 관리자를 통해 IronPDF 설치하거나(또는 Visual Studio에서 NuGet 패키지 관리 선택) 오늘 바로 첫 번째 HTML을 PDF로 변환해 보세요.
C#에서 HTML을 PDF로 변환하려면 HTML, CSS3 및 JavaScript 픽셀 단위로 정확한 PDF로 변환하는 Chrome 렌더링 라이브러리를 사용할 수 있습니다. IronPDF 와 같은 도구를 사용하면 URL, HTML 문자열 또는 파일에서 렌더링할 수 있으며 헤더, 인증 및 인쇄 설정도 지원합니다.
.NET 에서 사용할 수 있는 최고의 HTML-PDF 변환 라이브러리는 무엇인가요?
최고의 라이브러리는 정확한 Chrome 렌더링, 크로스 플랫폼 배포 및 Enterprise 기능을 지원해야 합니다. IronPDF Windows, Linux, macOS 및 Docker에서 실행되며 보안, 서명, 규정 준수 및 확장 가능한 .NET 애플리케이션을 지원하여 이 모든 조건을 충족합니다.
.NET용 무료 HTML에서 PDF로 변환 옵션은 무엇인가요?
wkhtmltopdf, PuppeteerSharp, Playwright와 같은 오픈 소스 경로는 HTML을 PDF로 무료로 변환하지만 편의성을 유지 관리로 교환해야 합니다 — 이전 렌더링 엔진, 번들 브라우저 바이너리 또는 수동 서버 구성이 필요합니다. IronPDF는 상업용으로, 개발 중에는 전체 기능과 워터마크 없이 무료 30일 체험판을 제공하며, 생산 라이선스는 $999부터 시작합니다. 가격 보기 →
C#을 사용하여 HTML 문자열을 PDF로 변환하는 방법은 무엇인가요?
HTML 문자열을 PDF로 변환하려면 ChromePdfRenderer 클래스와 해당 클래스의 RenderHtmlAsPdf 메서드를 사용하십시오. 이 메서드에 HTML 문자열을 전달한 다음 SaveAs 사용하여 PDF를 저장하십시오.
C#에서 웹 페이지 URL을 PDF 문서로 변환하는 단계는 무엇인가요?
RenderUrlAsPdf 메서드를 사용하면 웹 페이지 URL을 PDF로 직접 변환할 수 있으며, 이 방법을 사용하면 스타일, 이미지, 양식 및 하이퍼링크와 같은 대화형 요소를 유지할 수 있습니다.
C#에서 HTML 파일을 PDF로 변환하는 방법은 무엇인가요?
로컬 HTML 파일을 PDF로 변환하려면 ChromePdfRenderer.RenderHtmlFileAsPdf("path/to/file.html") 사용하세요. IronPDF 모든 상대 경로(이미지, CSS, JS)를 자동으로 해석합니다.
ASP.NET Razor 페이지 또는 MVC 뷰를 PDF로 변환하는 방법은 무엇인가요?
IronPDF Razor 페이지용 IronPdf.Extensions.Razor 와 MVC 뷰용 IronPdf.Extensions.Mvc.Core 라는 전용 확장 패키지를 제공합니다. 의존성 주입을 사용하여 RenderRazorToPdf 또는 RenderRazorViewToPdf 호출하면 컨트롤러에서 뷰를 PDF로 직접 변환할 수 있습니다. Razor 가이드를 참조하세요.
PDF에서 JavaScript 콘텐츠가 올바르게 표시되도록 하려면 어떻게 해야 합니까?
RenderingOptions.EnableJavaScript = true 로 설정하여 JavaScript 렌더링을 활성화하고, RenderingOptions.WaitFor.RenderDelay 사용하여 렌더링 지연 시간을 추가하여 변환 전에 동적 콘텐츠가 완전히 로드되도록 합니다. WaitFor 가이드를 참조하세요.
왜 내 HTML에서 PDF로의 출력이 빈 페이지이거나 내용이 누락되었나요?
빈 PDF 또는 부분적인 PDF는 거의 항상 페이지가 캡처될 때 렌더링이 완료되지 않았거나, 자산이 로드되지 않았음을 의미합니다. 동적 또는 JavaScript 기반의 콘텐츠에 대해서는 RenderingOptions.EnableJavaScript = true로 설정하고 WaitFor.RenderDelay (또는 WaitFor.HtmlQuerySelector)를 추가하여 Chrome이 먼저 완성되도록 합니다. 로컬 이미지, CSS 또는 폰트가 누락된 경우, BaseUrlPath를 전달하여 상대 경로가 올바르게 해석되도록 합니다. WaitFor 가이드 보기 →
C#에서 PDF에 머리글과 바닥글을 추가하는 가장 좋은 방법은 무엇일까요?
간단한 텍스트 머리글과 바닥글에는 TextHeaderFooter 클래스를 사용하고, 좀 더 복잡한 HTML 콘텐츠에는 HtmlHeaderFooter 클래스를 사용하세요. {page} , {total-pages} , {date} 와 같은 동적 자리 표시자를 포함하여 콘텐츠를 자동으로 생성할 수 있습니다. 머리글 및 바닥글 가이드를 참조하세요.
C# .NET 에서 PDF 출력 시 페이지 나누기를 어떻게 처리하나요?
인쇄 매체 유형 CSS 블록 내에서 page-break-after: always 및 page-break-inside: avoid 와 같은 CSS 속성을 사용하여 PDF의 페이지 나누기를 제어하세요. 페이지 나누기 가이드를 참조하세요.
PDF에서 용지 크기와 방향을 설정하는 데 사용할 수 있는 옵션은 무엇입니까?
RenderingOptions.PaperSize 사용하여 용지 크기(A4, Letter, Legal 등 옵션 포함)를 설정하고, RenderingOptions.PaperOrientation 을 사용하여 세로 또는 가로 방향을 설정하세요. 밀리미터 또는 인치 단위의 사용자 지정 크기도 지원됩니다. 용지 크기 가이드를 참조하세요. →
인증된 웹 페이지를 PDF로 변환할 수 있나요?
예. IronPDF 쿠키, 사용자 지정 HTTP 헤더 및 폼 기반 인증을 지원합니다. ChromePdfRenderer.RenderingOptions.CustomCookies 를 통해 쿠키를 설정하거나 토큰 기반 인증을 위해 인증 헤더를 전달할 수 있습니다. Windows NTLM 및 Kerberos 인증도 지원됩니다. 쿠키 가이드를 참조하세요 →
C#에서 하나의 HTML 템플릿으로 여러 개의 PDF 파일을 만들 수 있나요?
네, 플레이스홀더가 포함된 HTML 템플릿을 만든 다음, 문자열 바꾸기 또는 Handlebars .NET 과 같은 템플릿 라이브러리를 사용하세요. 반복되는 데이터에서 플레이스홀더를 실제 값으로 바꾸고 RenderHtmlAsPdf 사용하여 PDF를 생성하면 됩니다.
생성한 PDF 파일에 비밀번호를 설정하여 보안을 강화할 수 있을까요?
예, SecuritySettings 속성을 사용하여 사용자 및 소유자 암호를 설정하고, 인쇄 및 복사와 같은 권한을 구성하고, SecuritySettings.EncryptionAlgorithm 을 통해 AES256 암호화를 적용할 수 있습니다. 암호화 가이드를 참조하세요. →
HTML에서 PDF/A 규격 문서를 생성할 수 있나요?
네. IronPDF 대부분의 HTML-to-PDF 변환기가 지원하지 않는 PDF/A-1b, PDF/A-2b, PDF/A-3b 및 PDF/UA 표준을 지원하여 보관 및 접근성 규정을 준수합니다. PDF/A 가이드를 참조하세요 .
대량의 PDF 파일을 생성할 때 성능을 최적화하려면 어떻게 해야 할까요?
RenderHtmlAsPdfAsync 와 같은 비동기 메서드를 사용하여 비차단 작업을 수행함으로써 성능을 최적화하세요. ChromePdfRenderer 인스턴스를 재사용하고, Task.WhenAll 사용하여 여러 PDF를 동시에 처리하며, 64비트 시스템에서 서버 리소스가 충분한지 확인하세요. 비동기 가이드를 참조하세요 →
여러 PDF 파일을 병합하거나 문서에 표지를 포함하려면 어떻게 해야 하나요?
정적 PdfDocument.Merge 메서드를 사용하여 여러 PDF 파일을 결합할 수 있습니다. 표지 페이지는 별도로 생성한 후 본문 문서와 병합하여 전체 PDF 파일을 만들 수 있습니다. 병합 가이드를 참조하세요.
IronPDF Azure, AWS 또는 Docker에 배포할 수 있습니까?
네. IronPDF Azure App Service, Azure Functions, AWS Lambda 및 Linux 기반 Docker 컨테이너에서 실행됩니다. 각 플랫폼에 대한 전용 설정 가이드와 Docker 이미지가 제공됩니다. Azure 가이드 보기 → · AWS 가이드 보기 → · Docker 가이드 보기 →
.NET 10 호환성: IronPDF .NET 10을 바로 지원합니까?
네, IronPDF .NET 10과 완벽하게 호환됩니다. IronPDF 릴리스 노트에 따르면, 이 라이브러리는 추가 설정 없이 .NET 10 프로젝트에서 바로 사용할 수 있도록 준비되어 있습니다. 웹, 콘솔, 데스크톱 또는 마이크로서비스 애플리케이션 등 어떤 유형의 애플리케이션을 사용하든 IronPDF .NET 10에서 별도의 설정 없이 바로 작동합니다.
IronPDF 무료로 사용할 수 있나요?
IronPDF는 개발 중 전체 기능과 워터마크 없이 무료 30일 체험판을 제공합니다. 상업적 사용에는 $999부터 시작하는 상업용 라이선스가 필요합니다. Lite, Plus, Professional, Enterprise 등급이 제공됩니다. 가격 보기 →
이 라이브러리의 렌더링 품질은 wkhtmltopdf와 같은 다른 옵션과 비교했을 때 어떻습니까?
이 라이브러리는 wkhtmltopdf의 구식 WebKit 엔진과 달리 최신 Chrome 렌더링 엔진을 사용하여 픽셀 단위까지 완벽한 PDF를 생성합니다. 서버 실행 파일이 필요 없고, JavaScript/CSS3를 완벽하게 지원하며, 정기적인 업데이트와 전문적인 지원을 제공합니다.
HTML을 PDF로 변환할 때 PDFSharp 대신 이 라이브러리를 선택해야 하는 이유는 무엇인가요?
PDFSharp는 HTML을 PDF로 변환하는 내장 기능이 없어 복잡한 해결 방법을 사용해야 합니다. 이 라이브러리는 고급 API를 통해 HTML/URL/파일을 직접 변환할 수 있으며, 최신 웹 기술을 지원하고 정기적인 업데이트와 전문적인 지원을 제공합니다. PDFSharp 비교 보기 →
HTML 변환에 있어 iTextSharp보다 이 프로그램이 더 나은 선택인 이유는 무엇일까요?
iTextSharp의 무료 버전은 HTML을 PDF로 변환하는 기능을 기본적으로 지원하지 않으며, API가 복잡합니다. 이 라이브러리는 직관적인 API, 완벽한 CSS3/JavaScript 지원, 그리고 AGPL 라이선스 제한이 없는 원활한 HTML 변환 기능을 제공합니다. iTextSharp 비교 보기 →
이 라이브러리의 렌더링 품질은 Aspose.PDF와 비교했을 때 어떻습니까?
이 라이브러리는 픽셀 단위까지 완벽한 Chrome 품질의 PDF를 생성하는 반면, Aspose.PDF는 스타일과 동적 콘텐츠를 제대로 반영하지 못하는 경우가 많습니다. Aspose는 URL 변환을 위해 HTML 파일을 수동으로 다운로드해야 하지만, 이 라이브러리는 URL을 직접 변환하여 훨씬 높은 정확도를 제공합니다. Aspose 비교 보기 →
Syncfusion PDF 대신 이 라이브러리를 선택해야 하는 이유는 무엇일까요?
Syncfusion도 괜찮은 라이브러리지만, 이 라이브러리는 Chrome 엔진에 최적화되어 있어 더 빠른 성능을 제공하고 동적 콘텐츠를 더욱 효율적으로 처리합니다. 또한 더 간단한 API와 OCR 및 바코드 생성과 같은 추가 기능을 제공합니다. Syncfusion 비교 보기 →
제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.