C#과 IronPDF를 사용하여 .NET Core에서 HTML을 PDF로 변환
HTML에서 고품질 PDF를 직접 생성하는 것은 최신 .NET 애플리케이션에서 흔히 요구되는 사항입니다. 보고서, 송장, 티켓 등 모든 문서가 웹 UI와 일치하는 픽셀 단위까지 완벽한 출력을 필요로 합니다. IronPDF HTML, Razor 뷰 및 전체 웹사이트를 표준을 준수하는 PDF 문서로 렌더링하기 위한 단일 C# API를 제공하여 이러한 워크플로를 간소화합니다. 이 가이드를 마치면 개발자는 ASP.NET Core 프로젝트에서 URL, 원시 HTML 또는 MVC 뷰를 변환하고 동일한 코드를 Windows, Linux, Docker 또는 서버리스 환경에 배포할 수 있게 됩니다.
빠른 시작: .NET Core 에서 HTML을 PDF로 만들기
IronPDF 라이브러리를 사용하면 .NET Core 에서 HTML을 PDF로 손쉽게 변환할 수 있습니다. 이 가이드는 최소한의 코드로 HTML 콘텐츠를 고품질 PDF로 렌더링하여 빠르게 시작할 수 있도록 간단한 예제를 제공합니다. PDF 생성 기능을 애플리케이션에 손쉽게 통합하려는 개발자에게 적합합니다.
최소 워크플로우(5단계)
IronPDFNuGet 패키지를 설치하세요.RenderUrlAsPdf사용하여 웹사이트 URL을 변환하세요.RenderHtmlAsPdf통해 원시 HTML을 렌더링합니다.- MVC 뷰를 PDF로 내보내기
- 용지 크기, 여백, 머리글 및 바닥글을 조정하세요.
빠른 시작 체크리스트
- 설치 –
Install-Package IronPdf - URL 렌더링 –
ChromePdfRenderer.RenderUrlAsPdf() - 원시 HTML 렌더링 –
ChromePdfRenderer.RenderHtmlAsPdf() - Razor 뷰 내보내기 –
ChromePdfRenderer.RenderHtmlAsPdfAsync() - 출력 조정 –
ChromePdfRenderer.RenderingOptions활용
이 튜토리얼에서 다루는 내용
- URL, HTML 문자열 및 Razor 뷰 변환
- 용지, 여백 및 미디어 유형 구성
- 크로스플랫폼 배포 (Windows, Linux, Docker)
- 후처리: 병합, 워터마크 추가, 비밀번호 보호 및 디지털 서명 PDF
- 엔드투엔드 샘플: 티켓 예매 MVC 앱
.NET Core 에 PDF 라이브러리를 설치하는 방법은 무엇인가요?
이 라이브러리를 설치하는 것은 모든 .NET 8 프로젝트에서 한 줄짜리 명령으로 가능하며, .NET 9 미리 보기 및 곧 출시될 .NET 10과도 호환성을 유지합니다. NuGet 패키지 관리자 콘솔을 사용하면 패키지 관리자가 Windows, Linux, Docker 및 서버리스 대상에 필요한 모든 종속성을 자동으로 해결합니다.
PM> Install-Package IronPdf # .NET 8 LTS and higher
PM> Install-Package IronPdf # .NET 8 LTS and higher
dotnet add package IronPdf와 함께 작동합니다.설치가 완료되면 모든 공개 URL을 변환하여 모든 연결이 제대로 되었는지 확인하십시오.
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-3.cs
public class ClientModel
{
[Required]
public string Name { get; set; }
[Required]
public string Phone { get; set; }
[Required]
public string Email { get; set; }
}
Public Class ClientModel
<Required>
Public Property Name() As String
<Required>
Public Property Phone() As String
<Required>
Public Property Email() As String
End Class
작동 방식
ChromePdfRenderer는 내부적으로 샌드박스된 Chromium 인스턴스를 시작하며 별도의 Chrome 설치가 필요 없습니다.RenderUrlAsPdf는 JavaScript 기반 콘텐츠, CSS 미디어 쿼리 및 폰트를 포함한 완전히 렌더된 DOM을 캡처합니다.- 결과
PdfDocument는 출력의 병합, 암호 보호 또는 디지털 서명의 도움을 주는 메서드를 노출합니다. 이러한 기능은 이 튜토리얼의 뒷부분에서 다룹니다.
Azure App Service, AWS Lambda, 온프레미스 Linux 등 배포 관련 세부 사항은 전용 설치 가이드 및 고급 NuGet 설정 페이지를 참조하세요. Docker 및 K8s 클러스터에 대한 내부 CI/CD 팁은 Docker 배포 모범 사례 에서 다룹니다.
.NET Core 서비스에서 웹사이트 URL을 PDF로 변환하는 방법은 무엇인가요?
RenderUrlAsPdf에 대한 단일 호출은 충분합니다. 공개적으로 접근할 수 있는 URL을 전달하면 IronPDF는 완전히 렌더링된 표준 호환 PDF를 반환합니다. 아래 코드는 .NET 8 LTS를 대상으로 하며, .NET 9 미리 보기 버전과 2025년에 출시될 예정인 .NET 10에서도 변경 없이 컴파일됩니다.
단계별 예시
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-4.cs
public class ClientServices
{
private static ClientModel _clientModel;
public static void AddClient(ClientModel clientModel)
{
_clientModel = clientModel;
}
public static ClientModel GetClient()
{
return _clientModel;
}
}
Public Class ClientServices
Private Shared _clientModel As ClientModel
Public Shared Sub AddClient(ByVal clientModel As ClientModel)
_clientModel = clientModel
End Sub
Public Shared Function GetClient() As ClientModel
Return _clientModel
End Function
End Class
작동 원리
ChromePdfRenderer는 샌드박스된 Chromium 인스턴스를 시작하며 별도의 시스템 Chrome 의존성이 없으므로 Docker 이미지를 슬림하게 유지합니다.RenderUrlAsPdf는 DOM과 JavaScript가 완료될 때까지 기다렸다가 스냅샷을 찍으므로 단일 페이지 앱이 올바르게 렌더링됩니다.CssMediaType를 Print로 설정하면 엔진은 인쇄 전용 규칙을 사용하여 브라우저의 인쇄 → PDF로 저장 출력과 일치하게 됩니다.- 결과
PdfDocument는 암호화, 디지털 서명, 병합 또는 래스터화될 수 있습니다. 이러한 기능은 뒷부분에서 다루어질 것입니다.
renderer.LoggingOptions.DebugMode = true을 활성화하고 렌더링 중에 실시간 DevTools를 검사하기 위한 Headless Chrome 디버그 가이드를 따르십시오.관련 자료
- API 참조 –
ChromePdfRenderer.RenderUrlAsPdf - API 참조 –
PdfDocument.SaveAs - 튜토리얼 – Docker 컨테이너에 IronPDF 배포하기
.NET Core 에서 HTML 원본을 PDF로 변환하는 방법은 무엇인가요?
페이지 URL의 HTML 문자열 또는 렌더링된 마크업을 ChromePdfRenderer.RenderHtmlAsPdf에 전달하면 표준 준수 PDF를 즉시 생성합니다. 이 방법은 IronPDF에 내장된 Chromium 엔진을 실행하므로 외부 브라우저 설치나 WebView 종속성이 필요하지 않습니다. 아래에 표시된 코드는 현재 .NET 8 LTS에서 컴파일되며 .NET 9 및 2025년 11월 출시 예정인 .NET 10과도 호환성을 유지합니다.
예시 - HTML 조각에서 PDF 생성
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-5.cs
@model IronPdfMVCHelloWorld.Models.ClientModel
@{
ViewBag.Title = "Book Ticket";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-10 pull-right">
<button type="submit" value="Save" class="btn btn-sm">
<i class="fa fa-plus"></i>
<span>
Save
</span>
</button>
</div>
</div>
</div>
}
model ReadOnly Property () As IronPdfMVCHelloWorld.Models.ClientModel
ViewBag.Title = "Book Ticket"
End Property
'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Index</h2> [using](Html.BeginForm())
If True Then
'INSTANT VB TODO TASK: The following line uses invalid syntax:
' <div class="form-horizontal"> @Html.ValidationSummary(True, "", New { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Phone, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Phone, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Phone, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-10 pull-right"> <button type="submit" value="Save" class="btn btn-sm"> <i class="fa fa-plus"></i> <span> Save </span> </button> </div> </div> </div> }
이 코드가 보여주는 것
- 내장 Chromium — IronPDF는 Chromium 엔진을 번들로 묶어 HTML5, CSS3, JavaScript 호환성을 보장하여 현대 브라우저와 동등하게 만듭니다.
- 단일 종속성 — 경량 NuGet 설치로 Windows, Linux, Docker 및 Azure/AWS를 커버하며 추가 시스템 라이브러리가 필요 없습니다.
- 렌더링 옵션 –
PaperSize,CssMediaType, 및RenderDelay는 브라우저 인쇄 설정을 반영하여 PDF가 화면 레이아웃에 일치하도록 합니다. - 미래 대상 보장 — API 표면은 .NET 8, .NET 9 STS 그리고 다가오는 .NET 10에서 동일하여 장기 유지보수가 최소화됩니다.
- 후처리 훅 –
PdfDocument는 병합, 암호 보호 및 디지털 서명에 대한 도움을 줍니다. 이러한 기능은 이 가이드 후반부에서 다루어집니다.
추가 읽기 자료: 단계별 HTML-문자열-PDF 튜토리얼 및 ChromePdfRenderer API 문서를 참조하세요.
ASP .NET Core MVC 뷰를 PDF로 내보내는 방법은 무엇인가요?
IronPDF는 완전히 처리된 Razor 뷰( .cshtml )를 브라우저처럼 렌더링하고 PdfDocument로 결과를 스트리밍합니다. 아래 워크플로는 컨트롤러 로직을 깔끔하게 유지하고, 브라우저 플러그인이 필요하지 않으며, .NET 8 LTS, .NET 9 미리 보기 및 2025년 11월 출시 예정인 .NET 10에서 작동합니다.
엔드투엔드 컨트롤러 예시
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel
Public Class TicketsController
Inherits Controller
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New()
_renderer = New ChromePdfRenderer With {
.RenderingOptions = New PdfRenderingOptions With {
.PaperSize = PdfPaperSize.A5, ' Compact ticket size
.PaperOrientation = PdfPdfOrientation.Portrait,
.FitToPaperWidth = True,
.CssMediaType = PdfCssMediaType.Print,
.Margins = New PdfMargins(5, 10, 5, 10) ' mm
}
}
End Sub
' GET /Tickets/Print/42
Public Async Function Print(id As Integer) As Task(Of IActionResult)
Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)
' 1. Render the Razor view to an HTML string
Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm)
' 2. Convert HTML → PDF
Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
' 3. Stream back as a file
Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
End Using
End Function
End Class
이 코드가 보여주는 것
- 임시 파일 없음 — Razor 뷰는 메모리 내에서 렌더링된 다음
RenderHtmlAsPdf에 직접 전달되어 디스크 I/O를 피하고 임시 폴더 레이스 조건을 방지합니다. - 티켓 크기 출력 —
PaperSize = A5및 좁은 여백이 집에서 출력할 티켓을 간결하게 유지합니다. - 일관된 인쇄 스타일 —
CssMediaType = Print는 브라우저에서 사용하는 동일한@media printCSS 규칙을 적용합니다. - 바이너리 스트리밍 —
pdf.BinaryData는 파일 시스템을 건드리지 않고 문서를 스트리밍합니다; API 엔드포인트 및 Lambda 함수에 이상적입니다. - 재사용 가능한 렌더 —
ChromePdfRenderer는 컨트롤러당 한 번 생성된 후 재사용되어 프로세스 스폰 오버헤드를 최소화합니다.
PaperSize , PaperOrientation , FitToPaperWidth
Margins , Header , Footer , Watermark
다음 단계: 암호화, 디지털 서명을 추가하거나 여러 티켓을 하나의 파일로 병합하세요. 병합 예시 와 디지털 서명 방법을 참조하세요.
인쇄하기 전에 용지 크기, 여백, 머리글, 워터마크 및 보안 설정을 어떻게 세밀하게 조정할 수 있나요?
IronPDF는 출력의 모든 측면(종이 크기, 방향, 머리글 및 바닥글, JavaScript 타이밍, 워터마크, 암호화 및 디지털 서명)을 제어하는 단일 ChromePdfRenderOptions 객체를 노출합니다. 그것은 추가적인 브라우저 플러그인 없이 가능합니다.
코드 예시 — 여러 옵션을 한 번에 적용하기
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-7.cs
[HttpPost]
public ActionResult Index(ClientModel model)
{
if (ModelState.IsValid)
{
ClientServices.AddClient(model);
return RedirectToAction("TicketView");
}
return View(model);
}
<HttpPost>
Public Function Index(ByVal model As ClientModel) As ActionResult
If ModelState.IsValid Then
ClientServices.AddClient(model)
Return RedirectToAction("TicketView")
End If
Return View(model)
End Function
이러한 선택 사항들이 중요한 이유
PaperSize,Margins, 및CssMediaType는 브라우저의 인쇄 대화 상자를 반영하여 화면 레이아웃과 PDF가 Windows, Linux 및 Docker에서 동일하게 유지됩니다.- HTML 헤더와 푸터는 Razor 토큰, CSS 및 JavaScript를 지원합니다. 이는 동적 페이지 번호 또는 브랜드 구축에 유용합니다.
HtmlStamp는 전체 HTML + CSS 제어로 브랜드 워터마크 만들기를 단일 줄로 할 수 있습니다.- 보안 옵션을 통해 타사 도구 없이 128비트 암호화, 소유자/사용자 암호 및 세부적인 권한 설정을 사용할 수 있습니다.
- 디지털 서명은 코드에 직접 암호화 봉인을 추가하여 법적 진위성과 위변조 방지 기능을 유지합니다.
ExtractAllText및ExtractAllImages와 같은 추출 도우미는 분석이 필요한 경우 프로세스를 반대로 합니다.
빠른 참조 — 자주 사용하는 설정
PaperSize , PaperOrientation , Margins , CssMediaType , RenderDelay
`HtmlHeader` , `HtmlFooter` , 동적 Razor 플레이스홀더, 페이지 번호 토큰
`Watermark` , `HtmlStamp` , 투명도, 정렬
`SecurityOptions` , `SignAndStamp` , 소유자/사용자 암호, 인증서 봉인
다음 작업: 여러 PDF 파일 병합, 텍스트 및 이미지 추출, Docker 또는 서버리스 환경에 배포. 플랫폼 간 호환성을 확보하려면 배포 섹션으로 진행하십시오.
Linux와 Windows의 Docker 환경에 PDF 생성 코드를 배포하려면 어떻게 해야 할까요?
IronPdf는 단일 독립형 NuGet 패키지로 제공되며, Windows 및 Linux 모두에서 ASP.NET Core(또는 콘솔) 앱을 컨테이너화하는 것이 간단합니다. 핵심은 게시된 바이너리를 슬림한 런타임 이미지에 복사하고, Linux에서는 IronPDF에 필요한 두 가지 네이티브 라이브러리(libnss3 및 libatk1.0-0)를 추가하는 것입니다.
멀티스테이지 Dockerfile (Ubuntu 22.04)
####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyPdfApp.dll"]
mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022로 교체하십시오. Chromium DLL이 번들로 제공되므로 추가 패키지가 필요하지 않습니다.엔드투엔드 검증 스크립트
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
- API 액션은 Section2와 동일하게 내부적으로
ChromePdfRenderer.RenderUrlAsPdf를 호출합니다. IronPDF 컨테이너 내부에서 샌드박스 처리된 Chromium 프로세스를 실행합니다. 헤드리스 렌더링을 사용하기 때문에 X 서버가 필요하지 않습니다. - 대용량 렌더링 중에도 메모리 사용량은 200MB 미만으로 유지됩니다.
libnss3 및 libatk1.0-0가 모두 있는지 확인하십시오. musl C 라이브러리에 필요한 심볼이 부족하여 Alpine 이미지를 지원 하지 않습니다 .
내부 자원
- 튜토리얼 – Docker 컨테이너에 IronPDF 배포하기
- 방법 – Azure App Service Linux에서 IronPDF 실행
- API 레퍼런스 –
ChromePdfRenderer클래스
.NET Core 에서 기존 PDF 파일을 열고, 병합하고, 워터마크를 추가하고, 콘텐츠를 추출하는 방법은 무엇인가요?
IronPDF는 IronPDF, Adobe® Acrobat 또는 제3자 도구로 생성된 모든 PDF를 첫 번째 클래스 PdfDocument 객체로 처리하며, 품질 손실 없이 열고, 편집하고, 보안하고, 다시 저장할 수 있습니다. 동일한 API 인터페이스는 현재 .NET 8 LTS에서 작동하며 .NET 9 미리 보기 및 곧 출시될 .NET 10에서도 변경 없이 컴파일됩니다.
통합 샘플 — 열기 → 병합 → 워터마크 → 추출
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-10.cs
[HttpPost]
public ActionResult TicketView(TicketModel model)
{
IronPdf.Installation.TempFolderPath = $@"{Directory.GetParent}/irontemp/";
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
var html = this.RenderViewAsync("_TicketPdf", model);
var renderer = new IronPdf.ChromePdfRenderer();
using var pdf = renderer.RenderHtmlAsPdf(html.Result, @"wwwroot/css");
return File(pdf.Stream.ToArray(), "application/pdf");
}
<HttpPost>
Public Function TicketView(ByVal model As TicketModel) As ActionResult
IronPdf.Installation.TempFolderPath = $"{AddressOf Directory.GetParent}/irontemp/"
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
Dim html = Me.RenderViewAsync("_TicketPdf", model)
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html.Result, "wwwroot/css")
Return File(pdf.Stream.ToArray(), "application/pdf")
End Function
이것이 중요한 이유
- 열기 및 병합 –
PdfDocument.FromFile는 암호화된 파일을 포함하여 모든 표준 호환 PDF를 로드하는 반면,PdfDocument.Merge는 단일 호출에서 임의의 문서 수를 연결합니다. - 워터마크 –
ApplyStamp(별칭HtmlStamp)는 선택된 페이지에 로고, QR 코드 또는 대각선 텍스트와 같은 완전히 스타일이 적용된 HTML/CSS 오버레이를 래스터화 없이 삽입합니다. - 콘텐츠 추출 –
ExtractAllText및ExtractAllImages는 다운스트림 아카이빙 또는 AI 파이프라인용으로 원시 UTF-8 텍스트 또는 바이너리 이미지 스트림을 가져옵니다. - 디지털 서명 준비 – 동일한
PdfDocument인스턴스는SignAndStamp로 봉인될 수 있으며 RFC 3161 호환 해시를 생성하여 ISO 32000-2 디지털 서명 요건에 맞춥니다. - 개방형 표준 준수 – IronPDF 원본 PDF 구조(글꼴, 레이어, XMP 메타데이터)를 유지하므로 출력물이 Adobe® Reader 및 기타 ISO 32000-1 뷰어와 호환됩니다.
- 미래 지향적 – 이 API는 상호 운용 어셈블리 및 Win32 GDI 호출을 사용하지 않으므로 코드는 Windows, Linux, Docker 및 향후 출시될 .NET 10 서버리스 SKU에서 변경 없이 실행됩니다.
페이지를 분할, 회전 또는 삭제해야 하시나요? 세부적인 작업 방법은 페이지 수준 편집 튜토리얼을 참조하세요.
.NET Core 에서 PDF 파일을 암호화하고 디지털 서명하는 방법은 무엇인가요?
IronPDF 두 단계를 통해 문서를 보호합니다. 첫 번째 단계는 AES 기반 암호화 (사용자/소유자 암호 + 세부적인 권한 설정)이고, 두 번째 단계는 암호화 해시를 사용하여 파일을 봉인하는 X.509 디지털 서명입니다 . 두 API는 동일한 PdfDocument 객체에 있으므로, .NET 8 LTS에서는 워크플로우가 동일하며, .NET 9 프리뷰 및 향후 .NET 10 릴리스에서도 변경 없이 컴파일됩니다.
예시 — 256비트 AES 암호화를 적용하고, 인쇄 권한을 잠그고, 서명을 표시합니다.
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-11.cs
using System.IO;
using System.Threading.Tasks;
public static class ControllerExtensions
{
public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
}
controller.ViewData.Model = model;
using (var writer = new StringWriter())
{
IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
if (viewResult.Success == false)
{
return $"A view with the name {viewName} could not be found";
}
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
await viewResult.View.RenderAsync(viewContext);
return writer.GetStringBuilder().ToString();
}
}
}
Imports System.IO
Imports System.Threading.Tasks
Public Module ControllerExtensions
<System.Runtime.CompilerServices.Extension> _
Public Async Function RenderViewAsync(Of TModel)(ByVal controller As Controller, ByVal viewName As String, ByVal model As TModel, Optional ByVal As Boolean = False) As Task(Of String)
If String.IsNullOrEmpty(viewName) Then
viewName = controller.ControllerContext.ActionDescriptor.ActionName
End If
controller.ViewData.Model = model
Using writer = New StringWriter()
Dim viewEngine As IViewEngine = TryCast(controller.HttpContext.RequestServices.GetService(GetType(ICompositeViewEngine)), ICompositeViewEngine)
Dim viewResult As ViewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, Not partial)
If viewResult.Success = False Then
Return $"A view with the name {viewName} could not be found"
End If
Dim viewContext As New ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, New HtmlHelperOptions())
Await viewResult.View.RenderAsync(viewContext)
Return writer.GetStringBuilder().ToString()
End Using
End Function
End Module
비하인드 스토리
- AES-256 암호화 — IronPDF는 NIST 승인 AES 키로 페이로드를 감싸 비허가 열기, 인쇄 또는 복사-붙여넣기를 차단합니다.
- 권한 세분화 –
AllowUserPrinting및AllowUserFormData와 같은 속성은 작업별 권한을 조정합니다; 제한 사항을 적용하려면 소유자 암호가 필요합니다. - 디지털 서명 –
SignAndStamp는 Adobe® Acrobat 및 기타 ISO 32000-2 뷰어에서 인식하는 변조 표시 해시를 생성하는 RFC 3161 타임스탬프 및 인증서 체인을 포함합니다. - 원스톱 API – 암호화와 서명이 동일한
PdfDocument인스턴스를 수정하므로, 여러 파일 전환을 피하고 내부 폰트, 레이어 및 메타데이터를 보존합니다.
location 문자열이 ASCII로 깨끗한지 확인하십시오.핵심 보안 설정
`PdfSecuritySettings` → `OwnerPassword` , `UserPassword` , `EncryptionAlgorithm` , `AllowUserPrinting`
`PdfDocument.SignAndStamp` — PFX 경로, 권한, 위치, 사유, 타임스탬프
심층 분석을 위한 내부 자료
- 튜토리얼 – PDF 암호 보호 방법
- 예제 – PDF에 디지털 서명
- API reference –
PdfSecuritySettings
.NET Core 에서 HTML을 PDF로 변환하는 성능을 최적화하고 확장하는 방법은 무엇일까요?
IronPDF의 Chromium 엔진은 이미 최신 하드웨어에서 대부분의 페이지를 < 1초 이내에 렌더링하지만, 렌더링 배치, 멀티스레딩 활성화 및 Headless Chrome 오버헤드 최소화로 처리량을 곱할 수 있습니다. 아래의 팁은 모든 .NET 버전에 동일하게 적용됩니다.
1. 백그라운드 스레드 풀에서 일괄 렌더링
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
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");
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배 처리량 증가를 봅니다.- ASP.NET 요청이 대기열에 쌓이는 경우, 응답 시간을 낮추기 위해 렌더링 작업이 많은 경우 호스팅된 백그라운드 서비스 또는 메시지 큐로 이동하세요 .
2. Headless Chrome 시작 비용 줄이기
IronPDF 자체 Chromium 빌드를 제공하지만, 렌더링할 때마다 약간의 시작 비용이 발생합니다. 풀링은 도움이 되며, Linux 컨테이너에는 두 가지 네이티브 라이브러리가 포함되어야 합니다.
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0
라이브러리가 누락된 경우 Docker 로그에 libnss3.so not found 오류로 표시됩니다.
IronPDF에서 자동으로 적용되는 Chrome 플래그에는 컨테이너의 메모리 및 루트 사용자 문제를 줄이기 위해 --disable-gpu 및 --no-sandbox가 포함됩니다.
3. RenderDelay 또는 WaitFor와 함께 늦은 JavaScript 기다리기
DOMContentLoaded 후에 데이터 카운터를 애니메이션화하거나 가져오는 페이지는 짧은 지연을 필요로 할 수 있습니다:
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
사용자 지정 프로미스와 DOM 폴링에 대한 자세한 내용은 WaitFor 튜토리얼을 참조하세요.
4. 특정 요청에 대해 디버그 로깅을 활성화합니다.
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
PdfDocument pdf = PdfDocument.FromFile("1.pdf");
PdfDocument pdf2 = PdfDocument.FromFile("2.pdf");
pdf.AppendPdf(pdf2);
pdf.SaveAs("appendedFile.pdf");
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배 더 빠르고 메모리 사용량도 적습니다.
빠른 튜닝 체크리스트
`Parallel.ForEach` , `async/await` 사용하여 단일 `ChromePdfRenderer` 재사용합니다.
`aspnet:8.0-jammy` 사용하고 `libnss3` 및 `libatk1.0-0` 설치하세요. `--no-sandbox` 및 `--disable-gpu` 플래그를 사용하세요.
SPA 하이드레이션이 느린 경우 `RenderDelay` , `WaitFor()` , DevTools 타임라인 로그를 확인하세요.
추가 자료
- 방법 – 동기/멀티스레딩으로 PDF 생성
- 문제 해결 – 성능 지원 센터
- 예제 – 스레드 렌더링 데모
무료 체험판은 어디에서 다운로드하고, 라이선스를 선택하고, 전문가 지원을 받을 수 있나요? {#anchor-10-resources}
'무료 체험 시작' 양식을 작성하시면 30일 무료 체험판 키가 즉시 발급되며, 워터마크 없이 HTML-PDF 변환, 디지털 서명, 암호화 등 모든 기능을 이용하실 수 있습니다.
라이브러리를 평가한 후 영구 개발자 라이선스 , 배포 라이선스 또는 Enterprise 라이선스를 선택하십시오. 각 플랜에는 무료 마이너 업데이트, 개발/스테이징/프로덕션 사용 권한, 그리고 30일 환불 보증이 포함됩니다. 키 적용은 단일 코드 줄(IronPdf.License.LicenseKey = "YOUR-KEY";)이며 CI/CD 파이프라인에서 자동화할 수 있습니다.
포괄적인 문서 (빠른 시작 가이드 , API 참조 및 튜토리얼 비디오) 는 문서 포털에서 확인할 수 있으며 모든 .NET 릴리스에 맞춰 업데이트됩니다.
엔지니어링 관련 질문은 시카고에 위치한 지원팀에서 실시간 채팅 , 이메일 또는 전화를 통해 영업일 기준 하루 이내에 답변을 받으실 수 있습니다.
성능 튜닝 및 배포 관련 FAQ는 성능 지원 센터에 모여 있습니다.
바로가기 링크
| 의지 | URL | 왜 중요한가 |
|---|---|---|
| 30일 무료 체험판 키를 받으세요 | https://ironpdf.com/demos/ |
워터마크 없이 모든 기능을 사용할 수 있습니다. |
| 라이선스 및 가격 책정 | https://ironpdf.com/licensing/ |
영구 구독 플랜 또는 정기 구독 플랜; Iron Suite 10개의 라이브러리를 묶어서 제공합니다. |
| API 참조 | https://ironpdf.com/object-reference/api/ |
전체 클래스 문서, 예를 들면 ChromePdfRenderer |
| 문서 포털 | https://ironpdf.com/docs/ |
가이드, 튜토리얼, 샘플 프로젝트 |
| 성능 지원 | https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ |
최적화 및 확장 팁 |
| 고객 지원팀에 문의하세요. | https://ironsoftware.com/contact-us/ |
실시간 채팅, 이메일, 전화 지원 |
다음 단계
- MVC 뷰 렌더링부터 AES-256 암호화까지 모든 주요 기능을 보여주는 샘플 저장소를 복제하세요 .
- 평가판 키를 기존 솔루션에 연결하고 단위 테스트를 실행하여 플랫폼 간 호환성을 검증하십시오.
- 프로젝트별 맞춤 권장 사항을 받으려면 엔지니어링 팀과 실시간 데모를 예약하세요 .
이러한 리소스를 활용하면 모든 .NET 팀은 단 한 번의 스프린트 내에 온프레미스, Docker 또는 서버리스 환경에서 픽셀 단위까지 완벽한 PDF를 제작하여 배포할 수 있습니다.
자주 묻는 질문
.NET Core 에서 HTML을 PDF로 변환하는 방법은 무엇인가요?
.NET Core 에서 IronPDF 라이브러리를 사용하면 HTML을 PDF로 변환할 수 있습니다. 먼저 IronPDF NuGet 패키지를 설치한 다음 ChromePdfRenderer 인스턴스를 생성합니다. RenderHtmlAsPdf 메서드를 사용하여 HTML 문자열을 PDF로 변환할 수 있습니다.
웹사이트 URL을 PDF 문서로 변환하는 방법은 무엇인가요?
웹사이트 URL을 PDF 문서로 변환하려면 IronPDF NuGet 패키지를 설치하고 ChromePdfRenderer 인스턴스를 생성한 다음 RenderUrlAsPdf 메서드를 사용하여 URL을 PDF로 렌더링합니다. 결과는 SaveAs 메서드를 사용하여 저장할 수 있습니다.
Razor 뷰를 PDF로 변환하는 가장 좋은 방법은 무엇인가요?
Razor 뷰를 PDF로 변환하는 가장 좋은 방법은 IronPDF 사용하는 것입니다. 먼저 Razor 뷰를 HTML 문자열로 렌더링한 다음, 이 문자열을 RenderHtmlAsPdf 메서드에 전달하여 PDF 문서를 생성합니다.
PDF 문서의 보안을 강화하려면 어떻게 해야 할까요?
IronPDF 사용하여 AES-256 암호화를 적용하고, 암호를 설정하고, 사용자 권한을 제어하여 PDF 보안을 강화하세요. SecuritySettings 속성을 통해 이러한 설정을 구성하여 인쇄 및 편집과 같은 작업을 제한할 수 있습니다.
PDF 렌더링을 사용자 지정하는 데 사용할 수 있는 옵션은 무엇입니까?
IronPDF ChromePdfRenderOptions 클래스를 통해 용지 크기, 방향, 여백 설정 및 CSS 미디어 유형 적용을 포함한 다양한 렌더링 옵션을 제공합니다. 또한 사용자 지정 문서 출력을 위해 머리글, 바닥글 및 워터마크를 추가할 수 있습니다.
Docker 컨테이너에 PDF 생성 애플리케이션을 배포하려면 어떻게 해야 하나요?
Docker 컨테이너에 PDF 생성 애플리케이션을 배포하려면 Dockerfile에서 Linux 종속성을 구성하고 사용자 권한을 설정해야 합니다. 종속성 자동 관리를 위해 IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig 를 활용하십시오.
C#을 사용하여 PDF에 워터마크를 추가하는 방법은 무엇인가요?
IronPDF 사용하면 HtmlStamp 객체의 Watermark 속성을 이용하여 PDF에 워터마크를 추가할 수 있습니다. 고급 옵션으로는 HtmlStamper 클래스를 통해 사용자 지정 위치 지정 및 투명도 효과를 적용할 수 있습니다.
PDF 문서에 디지털 서명을 추가할 수 있나요?
네, IronPDF의 PdfSignature 클래스를 사용하여 PDF에 디지털 서명을 추가할 수 있습니다. PdfDocument 객체의 Sign 메서드를 사용하고 문서의 무결성과 진위성을 보장하기 위해 인증서 파일을 제공하면 됩니다.
.NET Core 에서 PDF 생성 성능을 최적화하는 방법은 무엇인가요?
스레드로부터 안전한 ChromePdfRenderer 인스턴스를 재사용하고, 멀티스레딩을 활성화하며, 불필요한 헤드리스 Chrome 시작 플래그를 제거하여 PDF 생성 성능을 최적화하세요. 이러한 방법을 통해 애플리케이션의 효율성을 향상시킬 수 있습니다.
이 튜토리얼의 .NET Core HTML-to-PDF 예제는 .NET 10에서도 작동합니까?
네. IronPDF .NET 10과 완벽하게 호환되므로 이 튜토리얼의 ChromePdfRenderer HTML-to-PDF 예제를 핵심 코드 변경 없이 .NET 10 프로젝트에서 사용할 수 있습니다. 주요 차이점은 프로젝트를 생성할 때 .NET 10을 대상으로 지정하고 NuGet 에서 최신 IronPDF 패키지를 설치하여 HTML, Razor 뷰 또는 URL에서 픽셀 단위까지 정확한 PDF를 생성하는 것입니다.

