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

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

Spire.PDF에서 IronPDF로의 마이그레이션은 텍스트를 이미지로 렌더링하는 라이브러리에서 최신 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 솔루션
이미지로 렌더링된 텍스트 PDF 검색 불가능, 접근 불가, 텍스트 복사 불가 실제 텍스트 렌더링
Internet Explorer 의존성 구식 렌더링, 보안 위험 최신 Chromium 엔진
글꼴 포함 실패 다른 시스템에서 문서가 잘못 표시됨 신뢰할 수 있는 글꼴 처리
큰 배포 발자국 높은 메모리 사용량, 느린 시작 효율적인 배포
제한된 CSS 지원 최신 레이아웃이 올바르게 렌더링되지 않음 전체 CSS3 지원

핵심 문제: 이미지 기반 PDF

Spire.PDF의 주요 단점 중 하나는 HTML 문서 내 텍스트를 이미지로 렌더링하는 경향이 있다는 것입니다. 이로 인해 텍스트가 선택하거나 검색할 수 없는 PDF가 생성되어 검색 기능이나 문서 텍스트 상호작용이 필요한 응용 프로그램에 심각한 제한이 될 수 있습니다.

Spire.PDF의 LoadFromHTML() 메서드를 사용할 때 종종 실제 텍스트가 아닌 비트맵 이미지로 텍스트를 렌더링하여 다음과 같은 문제를 만듭니다:

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

Spire.PDF 대IronPDF비교

기능 Spire.PDF IronPDF
HTML to PDF 렌더링 텍스트가 이미지로 렌더링됨 참된 텍스트 렌더링(선택 가능하고 검색 가능)
렌더링 엔진 일부 시스템에서 Internet Explorer에 종속됨 Chromium 기반, 최신 웹 표준 준수
폰트 처리 폰트 임베딩에 관한 알려진 문제 신뢰할 수 있고 강력한 폰트 처리
CSS3 지원 제한적 전체
플렉스박스/그리드 지원되지 않음 지원됨
JavaScript 제한적 전체 ES6+
PDF 접근성 부족함 (이미지 기반) 우수함
API 설계 복잡함 간단하고 직관적임
배포 풋프린트 대형 보통
라이선스 프리미엄/상용 상업적

.NET 10 및 C# 14를 2025년과 2026년까지 계획하는 팀에게 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는 PdfHtmlLayoutFormat 객체와 함께 LoadFromHTML()를 사용하여 종종 텍스트를 비트맵 이미지로 렌더링합니다. 그 결과 사용자가 텍스트를 선택하거나 복사하거나 검색할 수 없는 PDF가 생성됩니다.

IronPDF는 ChromePdfRendererRenderHtmlAsPdf()을 사용하여 완전히 선택 가능하고 검색 가능하며 접근할 수 있는 실제 텍스트를 생성합니다. IronPDF는 자동 정리를 위해 dispose 패턴을 사용하므로 Close() 호출이 필요하지 않습니다. 포괄적인 예제를 보려면 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.FromFile() 패턴과 여러 문서를 수용할 수 있는 정적 PdfDocument.Merge() 메서드를 사용합니다. 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는 Text, FontSize, VerticalOffset, HorizontalOffset과 같은 직관적인 속성이 있는 TextStamper 객체를 사용한 다음, 이를 ApplyStamp()으로 적용합니다. 이 접근 방식은 보다 선언적이며 유지 보수가 더 쉽습니다.


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

왜 이것이 중요한가

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

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

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

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

4. 큰 파일 크기: 동일한 콘텐츠 비교에서 Spire.PDF(이미지 기반)는 IronPDF(텍스트 기반)보다 최대 16배 큰 파일을 생성합니다.

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

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

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

인터넷 익스플로러 문제

Spire.PDF의 렌더링 엔진

Spire.PDF는 일부 환경에서 HTML 렌더링을 위해 Internet Explorer/Edge 레거시에 의존합니다. IE는 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 Install-Package
  • 네임스페이스 가져오기 업데이트 (using Spire.Pdf;using IronPdf;)
  • RenderHtmlAsPdf()으로 LoadFromHTML() 대체 (중요 수정)
  • new PdfDocument() + LoadFromFile()PdfDocument.FromFile()으로 대체
  • InsertPageRange()PdfDocument.Merge()으로 대체
  • Canvas.DrawString()TextStamper + ApplyStamp()으로 대체
  • SaveToFile()SaveAs()으로 대체
  • 모든 Close() 호출 제거 (IronPDF에서는 필요 없습니다)
  • 애플리케이션 시작 시 라이선스 초기화 추가

테스트

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

커티스 차우
기술 문서 작성자

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

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

아이언 서포트 팀

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