Azure Function에서 IronPDF로 C# HTML PDF 변환하기
IronPDF는 MVC 웹사이트 및 Azure Functions를 포함한 Azure 플랫폼에서 PDF 문서를 생성, 조작 및 읽습니다. 이 가이드에서는 프로덕션 환경에 맞게 적절히 구성하고 최적화하여 Azure Functions에서 HTML을 PDF로 변환하는 방법을 보여줍니다.
Docker 컨테이너 내에서 Azure Functions를 실행하는 경우 이 Azure Docker Linux 튜토리얼을 참조하십시오.
빠른 시작: Azure에서 IronPDF로 HTML PDF 변환 시작하기
IronPDF를 사용하여 Azure 애플리케이션에서 HTML을 PDF로 변환해 보세요. 이 간편 가이드는 IronPDF API 메서드를 사용하여 URL을 PDF 문서로 렌더링하는 방법을 보여줍니다. 이 예시는 IronPDF를 사용하여 Azure 솔루션에 PDF 기능을 통합하는 간단한 방법을 보여줍니다. 이 예제를 따라 서식을 유지한 채 PDF를 생성하고 Azure 프로젝트를 빠르게 실행해 보세요.
최소 워크플로우(5단계)
- Azure에서 PDF를 생성하는 C# 라이브러리를 설치하세요.
- Azure Basic B1 호스팅 계층 이상을 선택하세요.
- 게시할 때 `Run from package file` 옵션의 체크를 해제하세요.
- 권장 구성 지침을 따르십시오.
- Azure를 사용하여 PDF 생성기를 만들려면 코드 예제를 참조하세요.
튜토리얼 사용법
프로젝트는 어떻게 설정하나요?
어떤 IronPDF 패키지를 설치해야 할까요?
첫 번째 단계는 NuGet을 사용하여 IronPDF를 설치하는 것입니다.
- Windows 기반 Azure Functions에서
IronPdf패키지를 사용하십시오 - Windows용 NuGet IronPdf 패키지 - Linux 기반 Azure Functions에서
IronPdf.Linux패키지를 사용하십시오 - Linux용 NuGet IronPdf 패키지
Install-Package IronPdf
또는 Azure용 IronPDF 직접 다운로드 패키지 링크를 사용하여 .dll 파일을 수동으로 설치할 수도 있습니다.
보다 고급 설치 옵션에 대해서는 종합적인 NuGet 패키지 가이드를 참조하세요.
어떤 Azure 옵션을 구성해야 하나요?
어떤 Azure 호스팅 등급을 선택해야 할까요?
Azure Basic B1 은 렌더링 요구 사항을 충족하는 데 필요한 최소 호스팅 수준입니다. 높은 처리량을 가진 시스템을 구축하는 경우, 이를 업그레이드해야 할 수도 있습니다. B1 등급은 IronPDF의 HTML-to-PDF 변환 기능을 구동하는 Chrome PDF 렌더링 엔진 에 충분한 리소스를 제공합니다.
"패키지 파일에서 실행" 옵션을 해제해야 하는 이유는 무엇입니까?
Azure Functions 애플리케이션을 배포할 때 Run from package file이 선택되지 않도록 하십시오. 이 옵션을 선택하면 IronPDF가 실행 중에 필요한 런타임 종속성을 추출하지 못하도록 하는 읽기 전용 배포가 생성됩니다.
.NET 6용 설정 방법은 무엇인가요?
최근 마이크로소프트는 .NET 6 이상 버전에서 이미지 처리 라이브러리를 제거하여 많은 기존 API가 더 이상 작동하지 않게 되었습니다. 따라서 이러한 기존 API 호출을 계속 사용할 수 있도록 프로젝트를 구성해야 합니다.
- Linux에서
Installation.LinuxAndDockerDependenciesAutoConfig=true;을 설정하여libgdiplus이 시스템에 설치되도록 하십시오 - .NET 6 프로젝트의 .csproj 파일에 다음 내용을 추가하세요.
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles><GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>XML -
프로젝트에
runtimeconfig.template.json라는 파일을 만들고 다음 내용으로 채우세요:{ "configProperties": { "System.Drawing.EnableUnixSupport": true } } - 마지막으로, System.Drawing에 대한 Unix 지원을 활성화하려면 프로그램 시작 부분에 다음 줄을 추가하십시오.
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", True)$vbLabelText $csharpLabel
Azure에서 Docker를 언제 사용해야 할까요?
Azure에서 SVG 글꼴에 대한 제어 권한과 성능 제어 기능을 확보하는 한 가지 방법은 Docker 컨테이너 내에서 IronPDF 애플리케이션과 함수를 사용하는 것입니다. 이러한 접근 방식은 런타임 환경에 대한 더 나은 제어 기능을 제공하고 플랫폼별 제약 사항을 상당 부분 제거합니다.
저희는 Linux 및 Windows 인스턴스용 IronPDF Azure Docker 튜토리얼을 종합적으로 제공하고 있으며, 이를 읽어보시기를 권장합니다.
Azure Functions 코드는 어떤 모습일까요?
이 예제는 내장된 Azure 로거에 로그 항목을 자동으로 출력합니다 (참조: ILogger log). 자세한 로깅 구성은 사용자 지정 로깅 가이드를 참조하십시오.
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log, ExecutionContext context)
{
log.LogInformation("Entered PrintPdf API function...");
// Apply license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Configure logging
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
IronPdf.Logging.Logger.EnableDebugging = false;
// Configure IronPdf settings
Installation.LinuxAndDockerDependenciesAutoConfig = false;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
try
{
log.LogInformation("About to render pdf...");
// Create a renderer and render the URL as PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
log.LogInformation("Finished rendering pdf...");
// Return the rendered PDF as a file download
return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
}
catch (Exception e)
{
log.LogError(e, "Error while rendering pdf");
}
return new OkObjectResult("OK");
}
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log, ExecutionContext context)
{
log.LogInformation("Entered PrintPdf API function...");
// Apply license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Configure logging
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
IronPdf.Logging.Logger.EnableDebugging = false;
// Configure IronPdf settings
Installation.LinuxAndDockerDependenciesAutoConfig = false;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
try
{
log.LogInformation("About to render pdf...");
// Create a renderer and render the URL as PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
log.LogInformation("Finished rendering pdf...");
// Return the rendered PDF as a file download
return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
}
catch (Exception e)
{
log.LogError(e, "Error while rendering pdf");
}
return new OkObjectResult("OK");
}
<FunctionName("PrintPdf")>
Public Shared Async Function Run(<HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route := Nothing)> ByVal req As HttpRequest, ByVal log As ILogger, ByVal context As ExecutionContext) As Task(Of IActionResult)
log.LogInformation("Entered PrintPdf API function...")
' Apply license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
' Configure logging
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
IronPdf.Logging.Logger.CustomLogger = log
IronPdf.Logging.Logger.EnableDebugging = False
' Configure IronPdf settings
Installation.LinuxAndDockerDependenciesAutoConfig = False
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Try
log.LogInformation("About to render pdf...")
' Create a renderer and render the URL as PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.google.com/")
log.LogInformation("Finished rendering pdf...")
' Return the rendered PDF as a file download
Return New FileContentResult(pdf.BinaryData, "application/pdf") With {.FileDownloadName = "google.pdf"}
Catch e As Exception
log.LogError(e, "Error while rendering pdf")
End Try
Return New OkObjectResult("OK")
End Function
고급 HTML 문자열 렌더링 예제
CSS 스타일링이 적용된 사용자 지정 HTML과 같은 더 복잡한 시나리오의 경우 HTML 문자열을 PDF로 변환하는 기능을 사용할 수 있습니다.
[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("Processing HTML to PDF request");
// Read HTML content from request body
string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();
// Configure renderer with custom options
var renderer = new ChromePdfRenderer()
{
RenderingOptions = new ChromePdfRenderOptions()
{
MarginTop = 20,
MarginBottom = 20,
MarginLeft = 10,
MarginRight = 10,
CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
PrintHtmlBackgrounds = true,
CreatePdfFormsFromHtml = true
}
};
try
{
// Add custom CSS
string styledHtml = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 20px; }}
h1 {{ color: #2c3e50; }}
.highlight {{ background-color: #f1c40f; padding: 5px; }}
</style>
</head>
<body>
{htmlContent}
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(styledHtml);
return new FileContentResult(pdf.BinaryData, "application/pdf")
{
FileDownloadName = "styled-document.pdf"
};
}
catch (Exception ex)
{
log.LogError(ex, "Failed to render HTML to PDF");
return new BadRequestObjectResult("Error processing HTML content");
}
}
[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("Processing HTML to PDF request");
// Read HTML content from request body
string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();
// Configure renderer with custom options
var renderer = new ChromePdfRenderer()
{
RenderingOptions = new ChromePdfRenderOptions()
{
MarginTop = 20,
MarginBottom = 20,
MarginLeft = 10,
MarginRight = 10,
CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
PrintHtmlBackgrounds = true,
CreatePdfFormsFromHtml = true
}
};
try
{
// Add custom CSS
string styledHtml = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 20px; }}
h1 {{ color: #2c3e50; }}
.highlight {{ background-color: #f1c40f; padding: 5px; }}
</style>
</head>
<body>
{htmlContent}
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(styledHtml);
return new FileContentResult(pdf.BinaryData, "application/pdf")
{
FileDownloadName = "styled-document.pdf"
};
}
catch (Exception ex)
{
log.LogError(ex, "Failed to render HTML to PDF");
return new BadRequestObjectResult("Error processing HTML content");
}
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Azure.WebJobs
Imports Microsoft.Azure.WebJobs.Extensions.Http
Imports Microsoft.AspNetCore.Http
Imports Microsoft.Extensions.Logging
Imports IronPdf
Public Module HtmlToPdfFunction
<FunctionName("RenderHtmlWithCss")>
Public Async Function RenderHtmlWithCss(
<HttpTrigger(AuthorizationLevel.Function, "post", Route:=Nothing)> req As HttpRequest,
log As ILogger) As Task(Of IActionResult)
log.LogInformation("Processing HTML to PDF request")
' Read HTML content from request body
Dim htmlContent As String = Await New StreamReader(req.Body).ReadToEndAsync()
' Configure renderer with custom options
Dim renderer As New ChromePdfRenderer() With {
.RenderingOptions = New ChromePdfRenderOptions() With {
.MarginTop = 20,
.MarginBottom = 20,
.MarginLeft = 10,
.MarginRight = 10,
.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
.PrintHtmlBackgrounds = True,
.CreatePdfFormsFromHtml = True
}
}
Try
' Add custom CSS
Dim styledHtml As String = $"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 20px; }}
h1 {{ color: #2c3e50; }}
.highlight {{ background-color: #f1c40f; padding: 5px; }}
</style>
</head>
<body>
{htmlContent}
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(styledHtml)
Return New FileContentResult(pdf.BinaryData, "application/pdf") With {
.FileDownloadName = "styled-document.pdf"
}
Catch ex As Exception
log.LogError(ex, "Failed to render HTML to PDF")
Return New BadRequestObjectResult("Error processing HTML content")
End Try
End Function
End Module
Azure Functions에서 라이선스를 관리하는 방법에 대한 자세한 내용은 라이선스 키 사용 설명서를 참조하세요.
알려진 문제점은 무엇인가요?
공유 호스팅 환경에서 SVG 글꼴이 표시되지 않는 이유는 무엇인가요?
한 가지 제한 사항은 Azure 호스팅 플랫폼 개요에서 저렴한 공유 웹 앱 계층에서는 Google Fonts와 같은 SVG 글꼴을 로드하는 서버를 지원하지 않는다는 것입니다. 이는 Windows GDI+ 그래픽 개체에 대한 접근을 차단하는 보안 제한 때문입니다.
최상의 글꼴 렌더링이 필요한 경우 , IronPDF용 Windows 또는 Linux Docker 컨테이너 가이드를 참조하거나 Azure VPS를 사용하는 것을 권장합니다.
Azure 무료 티어 호스팅이 느린 이유는 무엇인가요?
Azure의 무료 및 공유 계층과 사용량 기반 요금제는 PDF 렌더링에 적합하지 않습니다. 저희가 직접 사용하고 있는 Azure B1 호스팅/프리미엄 플랜을 추천합니다. HTML to PDF의 과정은 어떤 컴퓨터에도 중요한 '작업'입니다 - 웹 페이지를 직접 열고 렌더링하는 것과 유사합니다. 실제 브라우저 엔진이 사용됩니다, 따라서 이에 맞춰 공급하고 비슷한 성능의 데스크탑 컴퓨터에서와 같은 렌더링 시간을 기대해야 합니다.
Azure Functions를 로컬 환경에서 디버깅하려면 어떻게 해야 하나요?
로컬 개발 및 테스트에 대해서는 로컬 컴퓨터에서 Azure Functions 프로젝트 디버깅 가이드를 참조하세요. 이를 통해 Azure에 배포하기 전에 문제를 식별하고 해결할 수 있습니다.
Azure 로그는 어디에서 찾을 수 있나요?
PDF 생성 문제를 해결할 때 Azure 로그는 매우 유용합니다. IronPDF 작업과 관련된 로그에 액세스하고 해석하는 방법에 대한 자세한 내용은 Azure 로그 파일 가이드를 참조하세요.
엔지니어링 지원 요청은 어떻게 생성하나요?
지원 요청 티켓을 생성하려면 IronPDF 엔지니어링 지원 요청 방법 가이드를 참조하십시오.
생산을 위한 모범 사례
- 항상 적절한 호스팅 티어를 사용하십시오 - 안정적인 성능을 위해
B1또는 그 이상 - 로깅을 올바르게 구성하십시오 - 프로덕션 모니터링을 위해 Azure Application Insights를 사용하십시오.
- 예외를 적절하게 처리하십시오 - 일시적인 오류에 대한 재시도 로직을 구현하십시오
- HTML 콘텐츠 최적화 - 외부 리소스 사용을 최소화하고 가능한 경우 base64로 인코딩된 이미지를 사용하십시오.
- 철저한 테스트 - Azure 배포 전에 로컬 환경에서 PDF 생성 유효성을 검사하십시오.
- 리소스 사용량 모니터링 - 메모리 및 CPU 사용량을 추적하여 적절하게 확장합니다.
자주 묻는 질문
PDF 생성을 위해 필요한 최소 Azure 호스팅 티어는 무엇입니까?
IronPDF는 PDF 렌더링을 위해 최소 Azure Basic B1 티어의 호스팅이 필요합니다. B1 티어는 IronPDF의 HTML-PDF 변환 기능을 지원하는 Chrome PDF 렌더링 엔진에 충분한 리소스를 제공합니다.
Windows 기반 Azure Functions를 사용하려면 어떤 패키지를 설치해야 하나요?
Windows 기반 Azure Functions의 경우 NuGet에서 IronPDF 패키지를 설치하세요. 이 패키지는 Windows 환경에 최적화되어 있으며 Chrome 렌더링 엔진을 사용하여 완벽한 PDF 생성 기능을 제공합니다.
Azure Functions에서 HTML을 PDF로 변환하는 방법은 무엇인가요?
IronPDF의 ChromePdfRenderer를 사용하면 단 한 줄의 코드로 HTML을 PDF로 변환할 수 있습니다. 새 인스턴스를 생성하고 HTML 콘텐츠를 RenderHtmlAsPdf() 함수에 전달한 다음, 생성된 PDF 파일을 저장하면 됩니다.
앱 서비스 플랜을 잘못 선택하면 어떻게 되나요?
앱 서비스 플랜 유형을 선택하지 않으면 IronPDF에서 PDF 문서를 렌더링하지 못할 수 있습니다. PDF 렌더링 엔진이 올바르게 작동하려면 Azure 호스팅 환경을 적절히 구성해야 합니다.
게시할 때 '패키지 파일에서 실행' 옵션을 선택 해제해야 하는 이유는 무엇입니까?
Azure Functions 애플리케이션을 게시할 때 IronPDF가 Azure 환경 내의 렌더링 구성 요소 및 종속성에 제대로 액세스하고 활용할 수 있도록 '패키지 파일에서 실행' 옵션을 선택 해제해야 합니다.
Linux 기반 Azure Functions를 사용하여 PDF를 생성할 수 있습니까?
네, Linux 기반 Azure Functions의 경우 NuGet에서 IronPDF.Linux 패키지를 사용하세요. 이 패키지는 Linux 환경에 최적화되어 있으며 동일한 PDF 생성 기능을 제공합니다.
PDF 생성 처리량을 높여야 한다면 어떻게 해야 할까요?
처리량이 높은 시스템의 경우 B1 등급 이상으로 업그레이드해야 할 수 있습니다. IronPDF는 Azure 리소스에 따라 확장되므로 더 높은 성능 등급을 선택하여 PDF 생성 요구 사항 증가에 대응할 수 있습니다.

