C#에서 HTML 페이지를 PDF 문서로 변환하는 것은 흔히 사용되는 작업으로, HTML 템플릿을 기반으로 송장, 보고서, 계약서 및 기타 비즈니스 문서를 생성하는 데 자주 활용됩니다. 또한, 동적 웹 콘텐츠를 정적이고 휴대 가능하며 인쇄 가능한 문서로 변환하는 데에도 필수적입니다.
HTML 페이지를 PDF 문서로 변환하는 과정은 다음과 같은 단계를 포함합니다:
- 원본 HTML 파일을 열고 HTML 페이지 코드를 분석합니다.
- HTML 페이지에서 사용된 CSS 및 JS 파일을 가져오세요.
- CSS 파일의 CSS 스타일을 파싱합니다.
- JS 파일에 있는 자바스크립트 코드를 파싱합니다.
- 자바스크립트 코드를 실행하고 결과로 생성된 HTML 페이지의 코드를 가져오세요.
- 새 PDF 문서를 만드세요.
- HTML 페이지의 래스터 및 벡터 그래픽(CSS 스타일 및 투명도 포함)을 PDF 페이지의 그래픽으로 변환하고 결과 PDF 문서에 추가합니다.
- HTML 페이지의 텍스트(CSS 스타일 포함)를 PDF 페이지의 텍스트로 변환하고 결과 PDF 문서에 추가합니다.
- 생성된 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 명령줄에서 사용되는 매개변수에 대한 간략한 설명은 다음과 같습니다.
- --headless – 그래픽 인터페이스 없이 Chrome을 실행하도록 지정합니다.
- --disable-gpu – HTML 페이지를 렌더링할 때 GPU를 비활성화하도록 지정합니다.이 매개변수는 이전 버전의 Chrome과의 호환성을 위해 필수적입니다.
- --run-all-compositor-stages-before-draw – HTML 페이지가 렌더링되기 전에 모든 렌더링 및 합성 단계를 완료해야 함을 지정합니다.
- --no-margins – HTML 페이지를 여백 없이 렌더링해야 함을 지정합니다.
- --printBackground – HTML 페이지에 배경 그래픽을 포함해야 함을 지정합니다.
- --no-pdf-header-footer – 생성된 PDF 문서에 문서 정보가 포함된 머리글/바닥글을 포함하지 않아야 함을 지정합니다.
- --print-to-pdf – 저장된 PDF 파일의 경로를 지정합니다. 경로는 절대 경로여야 합니다.
위 명령은 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 SDK와
VintaSoft 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