IRONSOFTWAREHOME
동영상

C#에서 HTML 파일을 PDF로 렌더링하는 방법

Curtis Chau
Curtis Chau
Updated: 2026년 1월 11일

Aspose.PDF에서 마이그레이션해야 하는 이유는 무엇인가요?

Aspose.PDF는 Enterprise급 기능을 제공하지만 PDF 생성 요구에 맞는 현대적인 대안을 찾기 위해 여러 요소가 개발 팀을 이끌고 있습니다.

비용 비교

Aspose.PDF는 1년의 업데이트가 포함된 영구 라이선스 모델을 사용합니다; 옵션으로 갱신하여 업데이트 창을 확장할 수 있습니다. 출처: Aspose 가격 페이지.

측면Aspose.PDFIronPDF
시작 가격 (개발자 소규모 기업)$1,199/개발자$999 일회성 (Lite)
라이선스 모델영구 + 1년의 업데이트 포함; optional renewal영구 라이선스
개발자 OEM$3,597/개발자 (무제한 배포)더 높은 티어에 포함됨
지원모든 유료 계층에 포함됨포함됨
무료 평가판30일 임시 라이선스 (그 외에는 워터마크 + 크기 제한)개발을 위한 무료

HTML 렌더링 엔진 비교

Aspose.PDF는 Chromium이 아닌 자체 개발 HTML/CSS 렌더링 엔진을 사용합니다; Aspose 포럼의 사용자 보고에 따르면 Flexbox 및 CSS Grid와 같은 최신 CSS 레이아웃 기능에 차이가 있습니다. IronPDF는 HTML을 PDF로 렌더링하기 위해 내장된 Chromium 빌드를 사용합니다.

기능Aspose.PDF (자체 엔진)IronPDF (Chromium)
CSS3 지원부분적; 현대 레이아웃 기능의 차이전체 CSS3
플렉스박스/그리드제한적 / 불일치 (Aspose 포럼 보고에 의함)전체 지원
JavaScript제한적전체 지원 (Chromium의 V8 통해)
웹 폰트부분적완전함
모던 HTML5부분적완전함
렌더링 품질복잡한 레이아웃에 따라 가변적Chrome 상응

성능 특성

사용자들은 Aspose 지원 포럼에서 성능 차이를 보고했습니다. 아래 숫자는 커뮤니티 보고 시나리오를 반영합니다 — 자신의 작업량과 비교하여 확인하십시오.

미터법Aspose.PDFIronPDF
HTML 렌더링사용자가 복잡한 CSS 작업량에서 성능 저하를 보고했습니다최적화된 Chromium 엔진
대용량 문서일부 시나리오에서 메모리 증가가 보고되었습니다효율적인 스트리밍
리눅스 성능커뮤니티 포럼에서 CPU 및 메모리 증가가 보고됨안정적

Aspose.PDF vs. IronPDF: 주요 차이점

측면Aspose.PDFIronPDF
가격 (입문)$1,199/개발자 (영구 + 1년 업데이트)$999 일회성 (Lite)
HTML 엔진자체 개발 엔진 (제한된 최신 CSS)Chromium (전체 CSS3/JS)
성능복잡한 CSS에서 포럼 보고된 성능 저하최적화됨
라이선스 모델영구 + .lic 파일; 업데이트를 위한 선택적 갱신영구 + 코드 기반 키
Linux 지원CPU/메모리 문제에 대한 포럼 보고안정적
페이지 색인1-기반 (Pages[1])0-기반 (Pages[0])

이전 준비

필수 조건

환경이 다음 요구 사항을 충족하는지 확인하세요:

  • .NET Framework 4.6.2+ 또는 .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ 또는 VS Code와 C# 확장
  • NuGet 패키지 관리자 접근 -IronPDF라이선스 키 (ironpdf.com에서 무료 체험판 제공)

Aspose.PDF 사용 감사

해당 솔루션 디렉토리에서 다음 명령을 실행하여 모든 Aspose.PDF 참조를 식별하십시오:

# Find all Aspose.Pdf using statements
grep -r "using Aspose.Pdf" --include="*.cs" .

# Find HtmlLoadOptions usage
grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" .

# Find Facades usage
grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" .

# Find TextAbsorber usage
grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" .
SHELL

예상해야 할 주요 변경사항

Aspose.PDF 패턴변경 필요
new Document() + Pages.Add()대신 HTML 렌더링 사용
HtmlLoadOptionsChromePdfRenderer.RenderHtmlAsPdf()
TextFragment + 수동 위치 지정CSS 기반 위치 지정
PdfFileEditor.Concatenate()PdfDocument.Merge()
TextFragmentAbsorberpdf.ExtractAllText()
ImageStampHTML 기반 워터마크
.lic 파일 라이선싱코드 기반 라이센스 키
1-based 페이지 색인 생성0-based 페이지 색인 생성

단계별 마이그레이션 프로세스

1단계: NuGet 패키지 업데이트

Aspose.PDF를 제거하고 IronPDF를 설치하십시오:

# Remove Aspose.PDF
dotnet remove package Aspose.PDF

# Install IronPDF
dotnet add package IronPdf
SHELL

또는 패키지 관리자 콘솔을 통해:

Uninstall-Package Aspose.PDF
Install-Package IronPdf
PowerShell

2단계: 네임스페이스 참조 업데이트

Aspose.PDF 네임스페이스를 IronPDF로 교체하십시오:

// Remove these
using Aspose.Pdf;
using Aspose.Pdf.Text;
using Aspose.Pdf.Facades;
using Aspose.Pdf.Generator;

// Add these
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;

3단계: 라이선스 구성 업데이트

Aspose.PDF는 .lic 파일 라이선싱을 사용합니다. IronPDF는 간단한 코드 기반 키를 사용합니다.

Aspose.PDF 구현:

var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

IronPDF 구현:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

완전한 API 마이그레이션 참조

핵심 클래스 매핑

Aspose.PDF 클래스IronPDF 동등
DocumentPdfDocument
HtmlLoadOptionsChromePdfRenderer
TextFragmentAbsorberPdfDocument.ExtractAllText()
PdfFileEditorPdfDocument.Merge()
TextStamp / ImageStampPdfDocument.ApplyWatermark()
LicenseIronPdf.License

문서 작업

Aspose.PDF 메소드IronPDF 메소드
new Document()new PdfDocument()
new Document(path)PdfDocument.FromFile(path)
doc.Save(path)pdf.SaveAs(path)
doc.Pages.Countpdf.PageCount
doc.Pages.Delete(index)pdf.RemovePages(index)

HTML을 PDF로 변환

Aspose.PDF 메소드IronPDF 메소드
new HtmlLoadOptions()new ChromePdfRenderer()
new Document(stream, htmlOptions)renderer.RenderHtmlAsPdf(html)
new Document(path, htmlOptions)renderer.RenderHtmlFileAsPdf(path)

코드 마이그레이션 예제

HTML 문자열에서 PDF로

가장 일반적인 Aspose.PDF 작업은 접근 방식의 근본적인 차이를 보여줍니다—Aspose.PDF는 HTML을 MemoryStream에 래핑해야 하지만, IronPDF는 문자열을 직접 수용합니다.

Aspose.PDF 구현:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent)))
        {
            var htmlLoadOptions = new HtmlLoadOptions();
            var document = new Document(stream, htmlLoadOptions);
            document.Save("output.pdf");
        }
        
        Console.WriteLine("PDF created from HTML string");
    }
}

IronPDF 구현:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created from HTML string");
    }
}

IronPDF는 MemoryStream 래퍼를 완전히 제거하여 더 깔끔하고 직관적인 API를 제공합니다.

HTML 파일을 PDF로

Aspose.PDF 구현:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var htmlLoadOptions = new HtmlLoadOptions();
        var document = new Document("input.html", htmlLoadOptions);
        document.Save("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

IronPDF 구현:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

여러 PDF 병합

Aspose.PDF는 페이지를 수동으로 반복해야 합니다. IronPDF는 정적 Merge 메서드를 제공합니다.

Aspose.PDF 구현:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var document1 = new Document("file1.pdf");
        var document2 = new Document("file2.pdf");
        
        foreach (Page page in document2.Pages)
        {
            document1.Pages.Add(page);
        }
        
        document1.Save("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}

IronPDF 구현:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");
        
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully");
    }
}

텍스트 추출

Aspose.PDF 구현:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");
var absorber = new TextAbsorber();

foreach (Page page in document.Pages)
{
    page.Accept(absorber);
}

string extractedText = absorber.Text;
Console.WriteLine(extractedText);

IronPDF 구현:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text - one line!
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Or extract from specific page
string page1Text = pdf.ExtractTextFromPage(0);

IronPDF는 복수 단계에서 단일 메소드 호출로 텍스트 추출을 간소화합니다.

워터마크 추가

Aspose.PDF 구현:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");

var textStamp = new TextStamp("CONFIDENTIAL");
textStamp.Background = true;
textStamp.XIndent = 100;
textStamp.YIndent = 100;
textStamp.Rotate = Rotation.on45;
textStamp.Opacity = 0.5;
textStamp.TextState.Font = FontRepository.FindFont("Arial");
textStamp.TextState.FontSize = 72;
textStamp.TextState.ForegroundColor = Color.Red;

foreach (Page page in document.Pages)
{
    page.AddStamp(textStamp);
}

document.Save("watermarked.pdf");

IronPDF 구현:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.5;
    font-family: Arial;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

IronPDF는 HTML/CSS 기반의 워터마킹을 사용하여 익숙한 웹 기술을 통해 전체 스타일링 제어를 제공합니다.

비밀번호 보호

Aspose.PDF 구현:

using Aspose.Pdf;

var document = new Document("document.pdf");
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256);
document.Save("protected.pdf");

IronPDF 구현:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");

IronPDF는 강력하게 타입된 프로퍼티를 통해 권한에 대한 세분된 제어를 제공합니다. 더 많은 옵션을 보려면 암호화 문서를 참조하세요.

머리말과 바닥글

IronPDF 구현:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-family:Arial; font-size:12px;'>
            Company Header
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-family:Arial; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>");
pdf.SaveAs("with_headers.pdf");

IronPDF는 동적 페이지 번호를 위한 {page}{total-pages} 같은 자리 표시자 토큰을 지원합니다. 더 많은 옵션은 헤더 및 푸터 문서를 참조하세요.

중요한 마이그레이션 노트

페이지 색인 변경

Aspose.PDF는 1-based 색인을 사용합니다. IronPDF는 0-based 색인을 사용합니다:

// Aspose.PDF - 1-based indexing
var firstPage = doc.Pages[1];  // First page
var thirdPage = doc.Pages[3];  // Third page

//IronPDF- 0-based indexing
var firstPage = pdf.Pages[0];  // First page
var thirdPage = pdf.Pages[2];  // Third page

라이선스 파일을 코드 키로

.lic 파일 라이선싱을 코드 기반 활성화로 교체:

// Aspose.PDF
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

// IronPDF
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable
IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY");

ASP.NET Core 통합

IronPDF 패턴:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}

의존성 주입 구성

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();
}

성능 최적화

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}

일반적인 마이그레이션 문제 해결

문제: HtmlLoadOptions를 찾을 수 없습니다

ChromePdfRenderer로 교체:

// Remove this
var doc = new Document(stream, new HtmlLoadOptions());

// Use this
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);

문제: TextFragmentAbsorber를 찾을 수 없음

직접 텍스트 추출 사용:

// Remove this
var absorber = new TextFragmentAbsorber();
page.Accept(absorber);
string text = absorber.Text;

// Use this
var pdf = PdfDocument.FromFile("doc.pdf");
string text = pdf.ExtractAllText();

문제: PdfFileEditor.Concatenate 사용할 수 없음

PdfDocument.Merge()를 사용하세요:

// Remove this
var editor = new PdfFileEditor();
editor.Concatenate(files, output);

// Use this
var pdfs = files.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs(output);

마이그레이션 후 점검 목록

코드 마이그레이션을 완료한 후, 다음을 확인하십시오:

  • Aspose.PDF 라이선스 파일 (.lic) 제거
  • HTML 렌더링 품질 확인 (CSS Grid, Flexbox가 이제 제대로 작동해야 함)
  • 큰 문서와 복잡한 CSS로 경계 사례 테스트
  • 페이지 인덱스 참조 업데이트 (1 기반에서 0 기반으로)
  • 해당하는 경우 Docker 구성을 업데이트하세요
  • 새로운 라이선스 키 구성으로 CI/CD 파이프라인 업데이트
  • 팀을 위한 새로운 패턴을 문서화하세요

추가 리소스


Aspose.PDF에서 IronPDF로 마이그레이션하면 자체 개발 HTML 엔진에서 Chromium 기반 렌더링으로 코드베이스가 이동됩니다. MemoryStream 래퍼의 제거, 단순화된 텍스트 추출, 더 넓은 CSS3 지원은 즉시 생산성 향상을 제공하며, IronPDF의 코드 기반 키는 .lic 파일 처리를 대체합니다.

참고해 주세요: Aspose는 해당 소유자의 등록 상표입니다. 이 사이트는 Aspose Pty Ltd와 관련이 없으며, 승인받지 않았고, 후원받지도 않았습니다. 모든 제품 이름, 로고 및 브랜드는 각 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.