푸터 콘텐츠로 바로가기
마이그레이션 가이드

Spire.PDF에서 IronPDF로의 마이그레이션 방법 (C#)

Spire.PDF에서 IronPDF로의 마이그레이션은 이미지 기반 텍스트를 자주 생성하는 레거시 HTML 경로에서 실질적이고 선택 가능하며 검색 가능한 텍스트를 생성하는 Chromium 파이프라인으로 귀하의 PDF 생성을 이동시킵니다. 이 가이드는 Spire.PDF의 HTML 렌더링 트레이드오프와 보고된 폰트 임베딩 문제를 모두 다루는 완전한 단계별 마이그레이션 경로를 제공합니다.

왜 Spire.PDF에서 IronPDF로 마이그레이션해야 하는가

Spire.PDF 이해하기

Spire.PDF는 .NET 개발자가 PDF 문서를 효율적으로 처리할 수 있도록 설계된 강력한 상용 PDF 라이브러리입니다. Spire.PDF는 특히 레거시 응용 프로그램에서의 특정 기능과 E-iceblue 도구 세트의 다른 구성 요소와의 통합 능력으로 프로그래밍 커뮤니티에서 자리매김을 했습니다.

그러나 Spire.PDF는 실제 사용에 영향을 미치는 몇 가지 기본적인 문제를 가지고 있으며, 특히 HTML-to-PDF 변환과 최신 웹 표준 지원에 문제가 있습니다.

중요 기술 이슈

문제 영향 IronPDF 솔루션
레거시 HTML 경로에서 자주 이미지로 렌더링되는 텍스트 PDF 검색 불가능, 접근 불가, 텍스트 복사 불가 실제 텍스트 렌더링
레이시 경로에 대한 IE/Edge Legacy 또는 QtWebKit 의존성 구식 렌더링, 최신 CSS 문제 번들로 제공되는 최신 Chromium
보고된 폰트 임베딩 문제 다른 시스템에서 문서가 잘못 표시됨 신뢰할 수 있는 글꼴 처리
큰 배포 발자국 더 높은 메모리 사용 번들로 제공되는 Chromium 런타임
레거시 경로의 제한된 CSS 최신 레이아웃이 올바르게 렌더링되지 않음 전체 CSS3 지원

핵심 문제: 이미지 기반 PDF

Spire.PDF의 레거시 HTML 경로의 알려진 단점 중 하나는 HTML 문서 내에서 텍스트를 이미지로 렌더링하는 경향이 있다는 점입니다. 이는 텍스트가 선택되거나 검색되지 않는 PDF를 생성합니다. 검색 또는 텍스트 상호작용이 필요한 애플리케이션의 제한 사항입니다.

스파이어.PDF의 LoadFromHTML() 메서드를 레거시 엔진에서 사용할 때, 종종 텍스트를 실제 텍스트가 아닌 비트맵 이미지로 렌더링하여 이러한 문제를 발생시킵니다:

  • 텍스트를 선택할 수 없습니다
  • 텍스트를 검색할 수 없습니다
  • 텍스트를 복사할 수 없습니다
  • 스크린 리더가 읽지 못함 (접근성 위반)
  • 파일 크기가 훨씬 더 큽니다
  • 확대 시 픽셀화 발생

Spire.PDF 대IronPDF비교

기능 Spire.PDF IronPDF
HTML to PDF 렌더링 기본적으로 레거시 IE/QtWebKit; v10.7.21 버전부터 시스템 Chrome이 필요로 하는 ChromeHtmlConverter 옵트인 번들로 제공된 Chromium (최신, 추가 설치 불필요)
텍스트 출력 (HTML 경로) 레거시 경로에서 종종 이미지로 렌더링됨 실제 텍스트 (선택 및 검색 가능)
폰트 처리 레거시 경로에서 보고된 문제 신뢰할 수 있는 글꼴 처리
CSS3 지원 레거시 경로에서 제한됨 전체
플렉스박스/그리드 레거시 경로에서 지원되지 않음 지원됨
JavaScript 레거시 경로에서 제한됨 전체 ES6+
PDF 접근성 레거시 경로에서 나쁨 (이미지 기반 출력) 태그 텍스트 출력
API 설계 많은 오버로드, 수동 페이지 설정 싱글 플루언트 렌더러
라이선스 프리미엄/상용 상업적

현대 .NET에서 IronPDF는 Spire.PDF의 HTML-to-PDF 트레이드오프를 처리하여 텍스트를 실제 선택 가능한 텍스트로 렌더링하여 생성된 PDF가 검색 가능하고 접근 가능하게 합니다.


시작하기 전에

필수 조건

  1. .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
  3. IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요

NuGet 패키지 변경 사항

# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
SHELL

라이선스 구성

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

완전한 API 참조

네임스페이스 변경

// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
$vbLabelText   $csharpLabel

핵심 API 매핑

Spire.PDF IronPDF
new PdfDocument() new ChromePdfRenderer()
pdf.LoadFromHTML() renderer.RenderHtmlAsPdf()
pdf.LoadFromFile() PdfDocument.FromFile()
pdf.SaveToFile() pdf.SaveAs()
pdf.Close() 필요 없음
pdf.Pages.Add() renderer.RenderHtmlAsPdf()
pdf.InsertPageRange() PdfDocument.Merge()
page.Canvas.DrawString() TextStamper + ApplyStamp()
PdfFont HTML에서의 CSS 스타일링
PdfBrush HTML에서의 CSS 스타일링

코드 마이그레이션 예제

예제 1: HTML에서 PDF로 변환

이전(Spire.PDF):

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

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System

Class Program
    Shared Sub Main()
        Dim pdf As New PdfDocument()
        Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()

        Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"

        pdf.LoadFromHTML(htmlString, False, True, True)
        pdf.SaveToFile("output.pdf")
        pdf.Close()
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예시는 HTML 렌더링의 근본적인 차이를 보여줍니다. Spire.PDF는 LoadFromHTML()을(를) PdfHtmlLayoutFormat 객체와 함께 사용하며, 이는 종종 텍스트를 비트맵 이미지로 렌더링합니다. 그 결과 사용자가 텍스트를 선택하거나 복사하거나 검색할 수 없는 PDF가 생성됩니다.

IronPDF는 RenderHtmlAsPdf()와 함께 ChromePdfRenderer을 사용하여 완전히 선택 가능하고 검색 가능하며 접근 가능한 진짜 텍스트를 생성합니다. Close() 호출이 필요하지 않습니다—IronPDF는 자동 정리를 위한 dispose 패턴을 사용합니다. 종합적인 예시는 HTML to PDF 문서를 참조하세요.

예시 2: 여러 PDF 병합

이전(Spire.PDF):

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

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
Imports Spire.Pdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf1 As New PdfDocument()
        pdf1.LoadFromFile("document1.pdf")

        Dim pdf2 As New PdfDocument()
        pdf2.LoadFromFile("document2.pdf")

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1)

        pdf1.SaveToFile("merged.pdf")
        pdf1.Close()
        pdf2.Close()
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        Dim merged = PdfDocument.Merge(pdf1, pdf2)

        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Spire.PDF는 각 문서를 new PdfDocument() + LoadFromFile()으로 수동으로 로드한 후, 삽입할 페이지를 지정하기 위해 InsertPageRange()을 사용하고, 각 문서에 대해 Close()을 호출해야 합니다.

IronPDF는 PdfDocument.Merge() 메서드와 같은 정적 PdfDocument.FromFile() 패턴을 사용하여 여러 문서를 수용합니다. Close() 호출이 필요하지 않습니다. 더 많은 정보를 보려면 튜토리얼을 참조하세요.

예제 3: PDF에 텍스트 추가하기

이전(Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
Imports System

Class Program
    Shared Sub Main()
        Dim pdf As New PdfDocument()
        Dim page As PdfPageBase = pdf.Pages.Add()

        Dim font As New PdfFont(PdfFontFamily.Helvetica, 20)
        Dim brush As PdfBrush = New PdfSolidBrush(Color.Black)

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, New PointF(50, 50))

        pdf.SaveToFile("output.pdf")
        pdf.Close()
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>")

        Dim textStamper = New TextStamper() With {
            .Text = "Hello from IronPDF!",
            .FontSize = 20,
            .VerticalOffset = 50,
            .HorizontalOffset = 50
        }

        pdf.ApplyStamp(textStamper)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Spire.PDF는 특정 좌표에 텍스트를 배치하기 위해 PointF를 사용하는 PdfFont, PdfBrush, page.Canvas.DrawString()를 가진 캔버스 기반 드로잉 모델을 사용합니다.

IronPDF는 TextStamper 개체를 직관적인 속성 Text, FontSize, VerticalOffset, HorizontalOffset와 함께 사용한 후 ApplyStamp()로 적용합니다. 이 접근 방식은 보다 선언적이며 유지 보수가 더 쉽습니다.


텍스트를 이미지로 렌더링 하는 문제

왜 이것이 중요한가

Spire.PDF가 이미지 기반 렌더링으로 HTML을 PDF로 변환할 때 문서는 필수 기능을 잃습니다:

1. 텍스트 검색 없음: 사용자는 Ctrl+F를 사용하여 텍스트를 찾을 수 없습니다. 문서 관리 시스템은 콘텐츠를 인덱싱할 수 없습니다.

2. 텍스트 선택/복사 없음: 인용문, 참조, 데이터를 복사하려는 사용자는 텍스트를 선택할 수 없습니다. 이것은 이미지입니다.

3. 접근성 위반: 이미지 기반 PDF는 WCAG 2.1 준수, 섹션 508 준수(미국 정부), ADA 요구 사항 및 스크린 리더 호환성을 실패합니다.

4. 큰 파일 크기: 레거시 HTML 경로에서 생성된 이미지 기반 출력은 동일한 콘텐츠에 대해 IronPDF가 생성하는 텍스트 기반 출력보다 몇 배 더 큰 파일을 만들 수 있습니다.

감지: 당신의 PDF가 이미지 기반인가?

Spire.PDF로 생성된 문서를 열고 다음 테스트를 시도하십시오:

  1. 텍스트 선택: 텍스트 위에서 클릭하고 드래그하십시오. 아무것도 강조 표시되지 않으면 → 이미지 기반
  2. Ctrl+F 검색: 페이지의 단어를 검색하십시오. "일치 항목 없음"이 나오면 → 이미지 기반
  3. 복사/붙여넣기: 텍스트를 선택하고 메모장에 복사하십시오. 붙여넣기 할 내용이 없으면 → 이미지 기반

레거시 HTML 엔진 문제

Spire.PDF의 렌더링 엔진

Spire.PDF의 LoadFromHTML(...)은 역사를 통해 두 가지 경로를 제공했습니다: Windows Internet Explorer/Edge Legacy WebBrowser 제어로 지원되는 비플러그인 경로와 별도로 다운로드되는 QT/WebKit 플러그인 경로. Spire.PDF 10.7.21(2024년 중반)은 로컬에 설치된 Google Chrome을 사용하는 세 번째 옵션 ChromeHtmlConverter을 추가했지만, 이는 옵트인이며 원본 LoadFromHTML API는 여전히 기본값으로 레거시 엔진을 사용합니다. Microsoft는 IE/Edge Legacy를 2022년에 공식적으로 사용하지 않기로 했으며, 레거시 경로에서 현대 CSS는 신뢰할 수 없고 JavaScript 지원은 부분적이며 렌더링은 시스템 간에 다를 수 있습니다.

Spire.PDF에서 실패하는 최신 CSS


<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>

<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
HTML

IronPDF는 최신 Chromium 렌더링을 사용하여 모든 CSS 기능이 올바르게 작동합니다.


이동 후 새로운 기능

IronPDF로 마이그레이션한 후 Spire.PDF가 제공할 수 없는 기능을 얻게 됩니다:

선택 가능하고 검색 가능한 텍스트

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>")
pdf.SaveAs("contract.pdf")

' Result:
' ✅ Text is fully selectable
' ✅ Text is searchable with Ctrl+F
' ✅ Text can be copied to clipboard
' ✅ Screen readers work perfectly
' ✅ File size is compact
' ✅ Zooming is crystal clear
$vbLabelText   $csharpLabel

최신 CSS 지원

var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
Dim renderer = New ChromePdfRenderer()

Dim html = "
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>"

Dim pdf = renderer.RenderHtmlAsPdf(html)
' All modern CSS features render correctly!
$vbLabelText   $csharpLabel

HTML 기반 워터마크

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.ApplyWatermark("
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>")
$vbLabelText   $csharpLabel

마이그레이션 체크리스트

사전 마이그레이션

  • 코드베이스의 모든 Spire.PDF 사용 내역 조사
  • 텍스트 선택 가능성에 대한 기존 PDF 테스트 (중요 문제 감지)
  • 문서 LoadFromHTML() 호출 (이것이 문제를 해결하는 우선순위입니다)
  • ironpdf.com에서IronPDF라이선스 키 획득

코드 업데이트

  • Spire.PDF NuGet 패키지를 제거합니다 (무료 버전을 사용하는 경우 FreeSpire.PDF 포함)
  • IronPdf NuGet 패키지를 설치합니다
  • 네임스페이스 가져오기를 업데이트합니다 (using Spire.Pdf;using IronPdf;)
  • LoadFromHTML()RenderHtmlAsPdf()로 교체합니다 (중요한 수정)
  • new PdfDocument() + LoadFromFile()PdfDocument.FromFile()로 교체합니다
  • InsertPageRange()PdfDocument.Merge()로 교체합니다
  • Canvas.DrawString()TextStamper + ApplyStamp()으로 교체합니다
  • SaveToFile()SaveAs()으로 교체합니다
  • 모든 Close() 호출을 제거합니다 (IronPDF에서는 필요하지 않습니다)
  • 애플리케이션 시작 시 라이선스 초기화 추가

테스트

  • 생성된 PDF에서 텍스트가 선택 가능한지 확인 (중요한 테스트)
  • CSS 렌더링 개선 사항 확인 (Flexbox/Grid가 이제 작동합니다)
  • 파일 크기가 작은지 확인
  • 화면 읽기 프로그램으로 접근성 테스트
  • 성능 비교

참고해 주세요Spire는 각 소유자의 등록 상표입니다. 이 사이트는 e-iceblue와 관련이 없으며 승인 또는 후원받지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

Curtis Chau
기술 문서 작성자

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

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해