이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.

C# 및 VB.NET에서 HTML을 PDF로 변환

이미 HTML 형식으로 컨텐츠를 작성하는 데 많은 시간과 비용이 소요되었다면 해당 HTML에서 PDF를 작성하는 것이 좋습니다. 이러한 접근 방식은 중복 작업을 피하고 싶은 모든 사람에게 자연스러운 방향입니다.

투자를 성공적으로 재사용하려면 프로그래밍 방식으로 변환을 수행해야 하며 결과 PDF는 시각적으로 소스 HTML과 최대한 유사해야 합니다.

HTML을 PDF로 변환

.NET 애플리케이션에서 HTML을 PDF로 변환하기 위한 API

Docotic.Pdf 라이브러리용 무료 HTML-PDF 추가 기능은 이러한 변환을 위한 API를 제공합니다. 추가 기능과 라이브러리는 모두 .NET 및 .NET Core 프레임워크용으로 구축된 웹 및 데스크톱 애플리케이션에서 사용할 수 있습니다.

Docotic.Pdf 라이브러리 9.3.17036-dev HTML을 PDF로 변환하는 추가 기능 9.3.17036-dev
회귀 테스트 14,665건의 테스트 통과 총 NuGet 다운로드 4,191,515

추가 기능은 변환 중에 Chromium을 사용하는 HTML-PDF .NET 라이브러리입니다. 각 변환 전에 추가 기능은 지원되는 최신 Chromium이 이미 다운로드되었는지 자동으로 확인합니다. 이미 다운로드한 적격 버전은 모두 재사용됩니다. 적합한 버전이 발견되지 않으면 추가 기능은 변환 전에 버전을 다운로드합니다. Google Chrome(R)과 동일한 웹 표준을 준수할 것으로 예상됩니다.

추가 기능은 Windows, macOS 및 Linux 환경의 HTML에서 PDF를 생성할 수 있습니다. Azure에서 HTML을 PDF로 변환하는 방법 문서에서 Linux에서 추가 기능을 구성하는 방법을 읽어보세요.

추가 기능은 NuGet에서 사용 가능이며 라이브러리의 바이너리가 포함된 zip에도 포함되어 있습니다. 평가 모드 제한 없이 라이브러리를 사용해 보려면 여기에서 시간 제한이 있는 무료 라이센스 키를 얻을 수 있습니다.

간단한 HTML을 PDF C#으로 변환

HTML-PDF API를 사용하면 C# 변환 코드는 다음과 같습니다.

static async Task convertUrlToPdfAsync(string urlString, string pdfFileName)
{
    using (var converter = await HtmlConverter.CreateAsync())
    {
        using (var pdf = await converter.CreatePdfAsync(new Uri(urlString)))
            pdf.Save(pdfFileName);
    }
}

오히려 간단합니다. PDF 문서를 생성하려면 두 번의 호출만 필요합니다. 보시다시피 API는 비동기식이며 동기식 메서드를 전혀 제공하지 않습니다.

일부 동기 코드에서 API를 호출하려는 경우 다음 래퍼를 사용할 수 있습니다:

Task.Run(async () =>
{
    await convertUrlToPdfAsync("https://bitmiracle.com/", "output.pdf");
}).GetAwaiter().GetResult();

일반적으로 비동기 메서드를 동기식으로 호출하는 것은 권장되지 않으므로 다른 선택의 여지가 없는 경우에만 래퍼를 사용하세요.

동기식 및 비동기식 콘솔 애플리케이션 모두에서 API를 사용하는 방법을 보여주는 샘플 코드를 제공합니다. 또한 Windows FormsWPF 애플리케이션에 대한 샘플 코드도 있습니다.

HTML을 PDF로 샘플 그룹도 있습니다. 각 샘플은 C# 및 VB.NET 버전으로 제공됩니다.

C# 및 VB.NET에서 HTML 문자열 또는 파일을 사용하여 PDF 만들기

API를 사용하면 HTML 문자열을 PDF로 쉽게 변환할 수 있습니다. 문자열에는 전체 HTML 문서 또는 일부만 포함될 수 있습니다. 변환기는 HTML 코드에서 PDF를 생성합니다.

var html = "<body><br/><br/><br/><h1>Hello, World<h1></body>";
using (var pdf = await converter.CreatePdfFromStringAsync(html))
    pdf.Save("output.pdf");

변환하려는 HTML 코드의 모든 상대 링크에 대한 기본 URL을 지정할 수 있습니다. 다음은 C#에서 기본 URL을 사용하여 HTML을 PDF로 변환하는 방법에 대한 코드 조각입니다.

var incompleteHtml = "<img src=\"/images/team.svg\"></img>";
var options = new HtmlConversionOptions();
options.Load.BaseUri = new Uri("https://bitmiracle.com/");
using (var pdf = await converter.CreatePdfFromStringAsync(incompleteHtml, options))
    pdf.Save("output.pdf");

HTML 파일을 변환하는 것은 URL을 변환하는 것과 거의 동일합니다. URL 대신 경로를 허용하는 CreatePdfAsync 오버로드를 사용하세요. C# 또는 VB.NET 코드에서 HTML 파일을 PDF로 변환할 때 기본 URL 및 기타 옵션도 지원됩니다.

var sampleHtmlPath = @"C:\path\to\sample.html";
using (var pdf = await converter.CreatePdfAsync(sampleHtmlPath))
    pdf.Save("output.pdf");

API를 사용하여 SVG 이미지를 PDF로 변환할 수도 있습니다.

사용자 정의 페이지 크기, 여백 및 배율 사용

PDF 생성 방법에 변환 옵션을 제공하여 HTML에서 PDF C#으로의 변환을 설정할 수 있습니다.

다음은 C#에서 출력 페이지 크기, 여백 및 배율을 구성하는 방법을 보여주는 코드 조각입니다:

using (var converter = await HtmlConverter.CreateAsync())
{
    var options = new HtmlConversionOptions();

    // 페이지 방향을 가로 방향으로 지정할 수도 있고 포인트나 인치 단위로 크기를 제공할 수도 있습니다
    options.Page.SetSize(PdfPaperSize.ItalyEnvelope);

    options.Page.MarginLeft = 10;
    options.Page.MarginTop = 20;
    options.Page.MarginRight = 30;
    options.Page.MarginBottom = 40;

    options.Page.Scale = 1.5;

    using (var pdf = await converter.CreatePdfAsync(url, options))
        pdf.Save("output.pdf");
}

페이지 옵션을 사용하여 머리글 및 바닥글 템플릿을 지정할 수 있습니다. 템플릿은 몇 가지 변수를 지원하는 일반 HTML 코드를 사용합니다. 이러한 변수는 date, title, url, pageNumbertotalPages입니다.

이미지에는 인라인 스타일과 데이터 URI를 사용하는 것이 좋습니다.

페이지의 위쪽 및 아래쪽 여백을 지정할 수 있습니다. 여백이 없으면 머리글이나 바닥글이 페이지 내용에 의해 가려질 수 있습니다.

C# 또는 VB.NET에서 머리글 및 바닥글이 있는 HTML을 PDF로 변환 샘플 코드는 템플릿에서 변수 및 데이터 URI를 사용하는 방법을 보여줍니다.

비밀번호로 보호된 HTML을 PDF C#으로 변환

HTML 페이지가 사용자 이름/비밀번호 쌍으로 보호되어 있는 경우에도 PDF를 만들 수 있습니다. HtmlConversionOptions 내에서 인증 옵션을 설정하는 것만큼 쉽습니다.

var options = new HtmlConversionOptions();
options.Authentication.SetCredentials("foo", "bar");

using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

페이지가 제대로 작동하려면 일부 쿠키를 설정해야 하는 경우에도 쉽습니다. 해당 쿠키를 옵션에 추가하기만 하면 됩니다. 방법은 다음과 같습니다:

var options = new HtmlConversionOptions();
options.Cookies.Add(new Cookie("sessionID", "my-session-ID"));

using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

지연 변환 시작

기본적으로 변환은 로드 직후에 시작됩니다. 하지만 페이지가 안정화되는 데 시간이 필요한 경우가 있습니다. 예를 들어 일부 계산을 수행하고 해당 계산이 준비된 후 내용을 업데이트하는 경우입니다.

변환 시작 옵션을 사용하면 지정된 밀리초 동안 변환을 지연할 수 있습니다.

// 변환을 시작하기 전에 10초 동안 기다리십시오.
var options = new HtmlConversionOptions();
options.Start.SetStartAfterDelay(10 * 1000);

로드된 페이지의 요소를 전환하거나 동적 콘텐츠 로드가 발생하도록 하기 위해 스크립트를 실행해야 하는 경우도 있습니다. 이는 또한 가능합니다:

var options = new HtmlConversionOptions();
var js = @"
    async function scrollDownUntilYouCantAnyMore() {
        await new Promise((resolve, reject) => {
            // 간략하게 생략
            }, 400);
        });
    }
    scrollDownUntilYouCantAnyMore();
";
options.Start.SetStartAfterScriptRun(js);
using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

C# 또는 VB.NET에서 스크립트 실행 후 HTML을 PDF로 샘플 코드에는 전체 scrollDownUntilYouCantAnyMore 기능이 포함되어 있습니다. 샘플은 HTML을 PDF로 변환하기 전에 스크립트를 실행하는 방법을 보여줍니다.

SSL 오류를 무시하고 .NET에서 HTML을 PDF로 변환

변환 중에 SSL 오류가 발생할 수 있습니다. 이러한 오류는 일반적으로 자체 서명된 인증서 또는 신뢰할 수 없는 인증서로 인해 발생합니다. 취소되고 만료된 인증서로 인해 HTML-PDF 변환기에서도 예외가 발생할 수 있습니다.

SSL 오류가 발생하는 이유를 이해하고 무시해도 안전하다고 확신하는 경우 SSL 오류를 무시할 수 있습니다. HTML을 PDF로 변환하는 동안 SSL 오류를 무시하려면 IgnoreSslErrors = true와 함께 엔진 옵션을 사용하세요.

var engineOptions = new HtmlEngineOptions
{
    IgnoreSslErrors = true
};
using (var converter = await HtmlConverter.CreateAsync(engineOptions))
{
    var url = new Uri("https://self-signed.badssl.com/");
    using (var pdf = await converter.CreatePdfAsync(url))
        pdf.Save("output.pdf");
}

PDF 페이지에 HTML 콘텐츠 넣기

HTML을 변환하고 변환 결과를 일부 기존 PDF 페이지 위에 배치해야 하는 경우가 있습니다. 예를 들어 양식 그림이 있는 경우 해당 그림의 빈 영역 위에 무언가를 배치할 수 있습니다. 결과는 채워진 양식처럼 보입니다.

기존 PDF 콘텐츠 위에 변환된 HTML을 추가하려면 다음을 수행해야 합니다.

  • HTML에서 투명한 배경을 가진 PDF 페이지 생성
  • 변환된 페이지에서 XObject 생성
  • 기존 PDF 페이지에 해당 XObject를 그립니다.

HTML을 변환하여 C# 또는 VB.NET에서 기존 PDF 콘텐츠 위에 추가 샘플 코드는 모든 단계를 보여줍니다. 샘플을 살펴보시기 바랍니다.