C#에서 HTML 문서를 PDF 문서로 변환

블로그 카테고리: 이미징PDF.NET

2026/04/08

C#에서 HTML 페이지를 PDF 문서로 변환하는 것은 흔히 사용되는 작업으로, HTML 템플릿을 기반으로 송장, 보고서, 계약서 및 기타 비즈니스 문서를 생성하는 데 자주 활용됩니다. 또한, 동적 웹 콘텐츠를 정적이고 휴대 가능하며 인쇄 가능한 문서로 변환하는 데에도 필수적입니다.

HTML 페이지를 PDF 문서로 변환하는 과정은 다음과 같은 단계를 포함합니다:

HTML5 표준 사양(https://html.spec.whatwg.org/print.pdf)에는 1553페이지가 포함되어 있습니다.

CSS2 표준 명세(https://www.w3.org/TR/CSS22/css2.pdf)는 426페이지로 구성되어 있습니다.

JavaScript 표준 명세(https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf)는 835페이지로 구성되어 있습니다.

위에서 HTML을 PDF로 변환하는 단계와 HTML5, CSS2, JavaScript 사양에 대한 정보를 제공한 이유는 일반적으로 HTML을 PDF로 변환하는 작업이 처음부터 구현할 경우 매우 복잡하다는 점을 명확히 하기 위함입니다.

하지만 이러한 복잡한 작업은 최신 웹 브라우저에서 이미 구현되어 있으며, 웹 브라우저는 HTML 페이지를 완벽하게 렌더링하고 렌더링된 HTML 페이지를 PDF 파일로 저장할 수 있습니다. 따라서 다음과 같은 질문이 제기됩니다. C# 애플리케이션에서 웹 브라우저를 사용하여 HTML 페이지를 PDF 문서로 변환하는 것이 가능할까요?

이 문서에서는 Chromium을 사용하여 C# 애플리케이션에서 어떤 복잡성의 HTML 페이지든 최고 품질로 PDF 문서로 변환하는 방법을 완전히 무료로 살펴보겠습니다.

Chromium은 Google Chrome, Microsoft Edge, Opera 등 대부분의 최신 웹 브라우저의 기반으로 사용되는 오픈 소스 웹 브라우저 프로젝트입니다. 이 소프트웨어는 속도, 보안 및 안정성을 염두에 두고 설계되었으며 Google, Microsoft 및 기타 회사의 개발자들이 상당한 기여를 했습니다.


Chrome 명령줄을 사용하여 C#에서 HTML 페이지를 PDF 문서로 변환하기

HTML 페이지를 PDF 문서로 변환하는 가장 쉬운 방법은 명령줄에서 다음 Chrome 명령을 실행하는 것입니다.
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu —run-all-compositor-stages-before-draw --no-margins --printBackground=true --no-pdf-header-footer --print-to-pdf="D:\result.pdf" "https://www.vintasoft.com/index.html"

Chrome 명령줄에서 사용되는 매개변수에 대한 간략한 설명은 다음과 같습니다.

위 명령은 Windows/Linux/macOS 명령줄 또는 C# 코드에서 실행할 수 있습니다.

다음은 Chrome을 사용하는 .NET 콘솔 애플리케이션에서 HTML 페이지를 PDF 문서로 변환하는 방법을 보여주는 C# 코드입니다.
using System.Diagnostics;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string chromePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
            string sourceUrl = "https://www.vintasoft.com/index.html";
            string resultPdfFilePath = @"D:\result.pdf";
            string chromeArgsTemplate =
                "--headless --no-pdf-header-footer --no-margins --disable-gpu --run-all-compositor-stages-before-draw --printBackground=true --print-to-pdf=\"{0}\" {1}";
            
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName = chromePath,
                Arguments = string.Format(chromeArgsTemplate, resultPdfFilePath, sourceUrl),
                UseShellExecute = false,
                CreateNoWindow = false
            };
            using (Process process = Process.Start(startInfo))
            {
                process.WaitForExit();
            }
            
            Console.WriteLine("HTML page is converted to the PDF document.");
        }
    }
}


이 변환 방법은 컴퓨터에 Chrome 웹 브라우저가 설치되어 있고 "chrome.exe" 파일의 경로를 알고 있는 경우 사용할 수 있습니다.

결과 .NET 애플리케이션은 추가 라이브러리를 포함하지 않고 Chrome 웹 브라우저에 전적으로 의존하므로 크기가 작습니다.


CefSharp.OffScreen NuGet 패키지를 사용하여 C#에서 HTML 페이지를 PDF 문서로 변환하기

CefSharp.OffScreen NuGet 패키지에는 컴파일된 CefSharp 라이브러리 버전이 포함되어 있으며, 개발자는 이를 통해 Chromium 웹 브라우저의 전체 인스턴스를 사용자 인터페이스 없이 백그라운드에서 실행할 수 있습니다.

.NET Framework 애플리케이션에서 CefSharp.OffScreen 라이브러리를 사용하려면 .NET Framework 애플리케이션에 CefSharp.OffScreen NuGet 패키지에 대한 참조를 추가하기만 하면 됩니다.

.NET Core 애플리케이션에서 CefSharp.OffScreen 라이브러리를 사용하려면 .NET Core 애플리케이션에 CefSharp.OffScreen.NETCore NuGet 패키지에 대한 참조를 추가하기만 하면 됩니다.

다음은 CefSharp.OffScreen 라이브러리를 사용하여 HTML 페이지를 PDF 문서로 변환하는 .NET 콘솔 애플리케이션의 C# 코드입니다.
using CefSharp;
using CefSharp.OffScreen;
using System;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string sourceUrl = "https://www.vintasoft.com/index.html";
            string resultPdfFilePath = @"D:\result.pdf";
            Task task = ConvertHtmlToPdfUsingCefSharpOffScreen(sourceUrl, resultPdfFilePath);
            task.Wait();
            Console.WriteLine("HTML page is converted to the PDF document.");
            Console.ReadKey();
        }

        static async Task ConvertHtmlToPdfUsingCefSharpOffScreen(string url, string pdfPath)
        {
            // if CEF is not initialized
            if (Cef.IsInitialized == null || Cef.IsInitialized == false)
            {
                // create CEF settings
                CefSettings settings = new CefSettings();
                // initialize CEF
                Cef.Initialize(settings);
            }

            // create Chromium web browser
            using (ChromiumWebBrowser browser = new ChromiumWebBrowser(url))
            {
                // wait while page will be loaded
                await browser.WaitForInitialLoadAsync();

                // create PDF print settings
                PdfPrintSettings printSettings = new PdfPrintSettings
                {
                    MarginType = CefPdfPrintMarginType.None,
                    PrintBackground = true,
                    Landscape = false,
                    Scale = 1.0,
                    PreferCssPageSize = true,
                    DisplayHeaderFooter = false
                };

                // print web page to a PDF file
                await browser.PrintToPdfAsync(pdfPath, printSettings);
            }
        }
    }
}


이 변환 방법은 Chrome 웹 브라우저와 무관하며, CefSharp.OffScreen NuGet 패키지 제작자가 이미 컴파일을 완료했으므로 사용자가 직접 CefSharp를 컴파일할 필요가 없습니다.

결과로 생성되는 .NET 애플리케이션은 CefSharp 라이브러리 파일을 포함하고 있기 때문에 완전히 독립 실행형이며 크기가 큽니다(300MB 이상).


CefSharp 라이브러리를 사용하여 C#에서 HTML 페이지를 PDF 문서로 변환하기

CefSharp는 Chromium Embedded Framework(CEF)용 .NET 래퍼를 제공하는 오픈 소스 프로젝트입니다. CefSharp를 사용하면 개발자는 완전한 기능을 갖춘 Chromium 기반 웹 브라우저를 C# 또는 VB.NET 데스크톱 애플리케이션에 직접 포함할 수 있습니다.

CefSharp 저장소는 GitHub에 있습니다: https://github.com/cefsharp/cefsharp

이 저장소에는 샘플 콘솔 애플리케이션, 샘플 WinForms 애플리케이션 및 샘플 WPF 애플리케이션을 포함하여 15개의 프로젝트가 있습니다.

샘플 WPF 애플리케이션(프로젝트 "CefSharp.Wpf.Example")을 실행해 보세요."netcore"를 입력하면 Chrome과 유사한 페이지 탐색 기능을 갖춘 WPF 애플리케이션이 표시됩니다. 이 WPF 애플리케이션에는 링크 탐색, CSS 스타일 및 JavaScript 코드가 포함되어 있어 Chrome과 매우 유사하게 느껴집니다. 애플리케이션의 메인 메뉴에서 "테스트 => 현재 탭을 PDF로 인쇄"를 선택하여 렌더링된 HTML 페이지를 PDF 파일로 저장할 수 있습니다.


이 변환 방법은 Chrome 웹 브라우저와 무관하지만, Visual Studio에서 CefSharp 프로젝트를 컴파일할 때 자동으로 수행되는 소스 코드에서 CefSharp를 수동으로 컴파일해야 합니다.

결과로 생성된 .NET 애플리케이션("CefSharp.Wpf.Example.netcore" 프로젝트)은 완전히 독립 실행형이며 CefSharp 라이브러리 파일을 포함하고 있기 때문에 크기가 큽니다(400MB 이상).


VintaSoft Imaging .NET SDK를 사용한 PDF 문서 처리

VintaSoft는 HTML 페이지를 PDF 문서로 변환하는 기능을 SDK에 포함하지 않기로 결정했는데, 이는 해당 작업이 매우 복잡하고 최신 웹 브라우저에 이미 구현되어 있기 때문입니다.

동시에 VintaSoft Imaging .NET SDKVintaSoft PDF .NET Plug-in을 사용하면 Windows, Linux 및 macOS에서 PDF 및 PDF/A 문서를 생성, 보기, 검증, 인쇄, 주석 달기, 편집, 보호, 서명, 최적화, 압축, 변환 및 저장할 수 있습니다.

따라서 VintaSoft SDK를 사용하여 생성된 PDF 문서를 처리할 수 있습니다. 구체적으로는 다음과 같습니다.

VintaSoft Imaging .NET SDK + VintaSoft PDF .NET Plug-in을 사용하여 PDF 문서를 처리하는 기능에 대한 자세한 정보는 다음 링크에서 확인할 수 있습니다. https://www.vintasoft.com/ko/vspdf-dotnet-index.html