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

Haukcode.DinkToPdf에서 IronPDF로 마이그레이션

Haukcode.DinkToPdf는 한때 인기 있었던 DinkToPdf 라이브러리의 계속된 프로젝트로, .NET 응용 프로그램을 위한 HTML을 PDF로 변환하는 데 wkhtmltopdf 바이너리를 사용합니다. Haukcode.DinkToPdf는 원래 프로젝트가 중단된 후에도 .NET Core를 따라갔지만, 상위 종속성에서부터나온 상당한 보안 문제를 가지고 있습니다. wkhtmltopdf 프로젝트는 2023년 1월에 보관되었으므로 이러한 문제는 해결되지 않습니다.

이 가이드는 Haukcode.DinkToPdf에서 IronPDF로의 철저한 마이그레이션 경로를 제공하며, 보안 위험을 제거하려는 전문 .NET 개발자를 위한 단계별 지침, 코드 비교 및 실용적인 예제를 포함합니다.

중대한 보안 경고: CVE-2022-35583

Haukcode.DinkToPdf는 해결할 수 없는 wkhtmltopdf의 주요 보안 취약점을 상속받습니다:

CVE-2022-35583 - 심각한 SSRF 취약점 (CVSS 9.8)

wkhtmltopdf 라이브러리(및 모든 래퍼 포함 Haukcode.DinkToPdf)는 서버 사이드 요청 위조(SSRF)에 취약합니다:

  • 공격 벡터: 악의적인 HTML 콘텐츠는 서버가 내부 리소스를 가져오도록 만들 수 있습니다
  • AWS 메타데이터 공격: AWS 자격 증명을 탈취하기 위해 http://169.254.169.254에 접근할 수 있습니다
  • 내부 네트워크 액세스: 내부 서비스를 스캔하고 액세스할 수 있습니다
  • 로컬 파일 포함: file:// 프로토콜을 통해 로컬 파일을 읽을 수 있습니다
  • 영향: 완전한 인프라 접수가 가능

이 취약점에 대한 해결책은 없습니다 wkhtmltopdf가 2023년에 포기되고 보관되었기 때문에. 마지막 릴리스는 2020년에 0.12.6 버전이었습니다.

IronPDFvs Haukcode.DinkToPdf: 기능 비교

구조적 차이를 이해하면 기술 결정을 내리는데 이주 투자를 평가하는데 도움이 됩니다:

측면 Haukcode.DinkToPdf IronPDF
기본 엔진 wkhtmltopdf (Qt WebKit ~2015) Chromium (정기적 업데이트)
보안 상태 CVE-2022-35583 (심각, 해결 불가능함) 활성적으로 패치됨
프로젝트 상태 포기된 프로젝트의 분기 활성적으로 개발됨
HTML5/CSS3 제한적 지원됨
JavaScript 제한됨, 보안되지 않음 전체 V8 엔진
네이티브 바이너리 필요 (플랫폼 별) 자급자족
스레드 안전성 싱글톤 패턴 필요 설계상 스레드 안전
지원 커뮤니티만 전문 지원
업데이트 예상되는 것 없음 정기적인 릴리즈
라이선스 MIT (무료) 체험판이 포함된 상업용

빠른 시작: Haukcode.DinkToPdf에서 IronPDF로 마이그레이션

이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.

1단계: DinkToPdf 및 네이티브 바이너리 제거

Haukcode.DinkToPdf NuGet 패키지 제거:

# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
SHELL

프로젝트에서 네이티브 바이너리 삭제:

  • libwkhtmltox.dll (Windows)
  • libwkhtmltox.so (Linux)
  • libwkhtmltox.dylib (macOS)

2단계:IronPDF설치

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

3단계: 네임스페이스 업데이트

DinkToPdf 네임스페이스를 IronPdf로 교체:

// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

4단계: 라이센스 초기화

애플리케이션 시작 시 라이선스 초기화를 추가합니다:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

코드 마이그레이션 예제

기본 HTML을 PDF로 변환

가장 기본적인 작업은 이러한 .NET PDF 라이브러리 간의 복잡성 차이를 나타냅니다.

Haukcode.DinkToPdf 접근법:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());

        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
                }
            }
        };

        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());

        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
                }
            }
        };

        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO

Module Program
    Sub Main()
        Dim converter = New SynchronizedConverter(New PdfTools())

        Dim doc = New HtmlToPdfDocument() With {
            .GlobalSettings = New GlobalSettings() With {
                .ColorMode = ColorMode.Color,
                .Orientation = Orientation.Portrait,
                .PaperSize = PaperKind.A4
            },
            .Objects = New List(Of ObjectSettings) From {
                New ObjectSettings() With {
                    .HtmlContent = "<html><body><h1>Hello World</h1></body></html>"
                }
            }
        }

        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("output.pdf", pdf)
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 접근법:

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

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

        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");

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

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

        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");

        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System.IO

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

        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")

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

Haukcode.DinkToPdf는 PdfTools이 포함된 SynchronizedConverter을 만들고, GlobalSettingsObjects이 포함된 HtmlToPdfDocument을 구성하고, HtmlContent이 포함된 ObjectSettings을 추가하고, converter.Convert()을 호출하여 원시 바이트를 얻고, File.WriteAllBytes()로 파일에 수작업으로 써야 합니다.

IronPDF는 이를 세 줄로 단축합니다: ChromePdfRenderer을 생성하고, RenderHtmlAsPdf()을 호출하며, 내장된 SaveAs() 메서드를 사용합니다.

고급 HTML에서 PDF로의 시나리오는 HTML to PDF 변환 가이드를 참조하십시오.

URL을 PDF로 변환

URL을 PDF로 변환하는 것은 비슷한 패턴 차이를 보여줍니다.

Haukcode.DinkToPdf 접근법:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());

        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
            },
            Objects = {
                new ObjectSettings() {
                    Page = "https://www.example.com",
                }
            }
        };

        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());

        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
            },
            Objects = {
                new ObjectSettings() {
                    Page = "https://www.example.com",
                }
            }
        };

        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO

Module Program
    Sub Main()
        Dim converter = New SynchronizedConverter(New PdfTools())

        Dim doc = New HtmlToPdfDocument() With {
            .GlobalSettings = New GlobalSettings() With {
                .ColorMode = ColorMode.Color,
                .Orientation = Orientation.Portrait,
                .PaperSize = PaperKind.A4
            },
            .Objects = New List(Of ObjectSettings) From {
                New ObjectSettings() With {
                    .Page = "https://www.example.com"
                }
            }
        }

        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("webpage.pdf", pdf)
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 접근법:

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

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

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");

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

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

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");

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

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

        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")

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

Haukcode.DinkToPdf는 ObjectSettings.Page을 사용하여 URL용으로 동일한 문서 구성 패턴을 사용합니다. IronPDF는 명확한 의도를 표현하는 전용 RenderUrlAsPdf() 메서드를 제공합니다.

URL to PDF 문서에서 인증 및 사용자 정의 헤더 옵션을 탐색하십시오.

사용자 정의 페이지 설정

방향, 용지 크기 및 여백을 구성하려면 다른 접근 방식을 사용해야 합니다.

Haukcode.DinkToPdf 접근법:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());

        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Landscape,
                PaperSize = PaperKind.Letter,
                Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
                }
            }
        };

        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("landscape.pdf", pdf);
    }
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());

        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Landscape,
                PaperSize = PaperKind.Letter,
                Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
                }
            }
        };

        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("landscape.pdf", pdf);
    }
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO

Module Program
    Sub Main()
        Dim converter = New SynchronizedConverter(New PdfTools())

        Dim doc = New HtmlToPdfDocument() With {
            .GlobalSettings = New GlobalSettings() With {
                .ColorMode = ColorMode.Color,
                .Orientation = Orientation.Landscape,
                .PaperSize = PaperKind.Letter,
                .Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
            },
            .Objects = {
                New ObjectSettings() With {
                    .HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>"
                }
            }
        }

        Dim pdf As Byte() = converter.Convert(doc)
        File.WriteAllBytes("landscape.pdf", pdf)
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 접근법:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

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

        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;

        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");

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

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

        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;

        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");

        pdf.SaveAs("landscape.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

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

        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
        renderer.RenderingOptions.MarginTop = 10
        renderer.RenderingOptions.MarginBottom = 10
        renderer.RenderingOptions.MarginLeft = 10
        renderer.RenderingOptions.MarginRight = 10

        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>")

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

Haukcode.DinkToPdf는 MarginSettings 객체와 함께 GlobalSettings 내에 설정을 중첩합니다. IronPDF는 PaperSize, PaperOrientation 같은 명확한 이름의 직접 RenderingOptions 속성들과 개별 마진 속성을 제공합니다.

Haukcode.DinkToPdf API부터IronPDF매핑 참조

이 매핑은 직접적인 API 대응을 보여주어 마이그레이션을 가속화합니다:

변환기 클래스 매핑

Haukcode.DinkToPdf IronPDF
SynchronizedConverter ChromePdfRenderer
BasicConverter ChromePdfRenderer
PdfTools 해당 없음
IConverter 해당 없음

문서 구성 매핑

Haukcode.DinkToPdf IronPDF
HtmlToPdfDocument 메소드 호출
GlobalSettings RenderingOptions
ObjectSettings RenderingOptions
converter.Convert(doc) renderer.RenderHtmlAsPdf(html)

글로벌 설정 속성 매핑

글로벌 설정 속성 IronPDF 속성
ColorMode RenderingOptions.GrayScale
Orientation RenderingOptions.PaperOrientation
PaperSize RenderingOptions.PaperSize
Margins.Top RenderingOptions.MarginTop
Margins.Bottom RenderingOptions.MarginBottom
Margins.Left RenderingOptions.MarginLeft
Margins.Right RenderingOptions.MarginRight

객체 설정 속성 매핑

객체 설정 속성 IronPDF 동등
HtmlContent 첫 번째 매개변수는 RenderHtmlAsPdf()입니다
Page (URL) renderer.RenderUrlAsPdf(url)
HeaderSettings.Right = "[page]" TextHeader.RightText = "{page}"

플레이스홀더 구문 마이그레이션

Haukcode.DinkToPdf IronPDF
[page] {page}
[toPage] {total-pages}
[date] {date}

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

문제 1: 싱글톤 요구사항

Haukcode.DinkToPdf: 네이티브 wkhtmltopdf 바이너리의 스레드 안전성 문제로 싱글톤으로 SynchronizedConverter이 필요합니다.

솔루션: IronPDF의 ChromePdfRenderer은 설계 상 스레드 안전합니다—싱글톤이 필요하지 않습니다:

// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));

// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));

// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
' Before (DinkToPdf) - MUST be singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))

' After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton(Of IPdfService, IronPdfService)()
' Or services.AddTransient(Of IPdfService, IronPdfService)() - both are safe!
$vbLabelText   $csharpLabel

문제 2: 네이티브 바이너리 의존성

Haukcode.DinkToPdf: 플랫폼 별 네이티브 라이브러리 (libwkhtmltox.dll/so/dylib)를 요구.

해결책: IronPDF는 네이티브 바이너리 의존성이 없는 독립형입니다. 마이그레이션 후 이 파일들을 삭제하세요:

  • libwkhtmltox.dll (Windows)
  • libwkhtmltox.so (Linux)
  • libwkhtmltox.dylib (macOS)

문제 3: 반환 타입 차이

Haukcode.DinkToPdf: converter.Convert()byte[]을 직접 반환합니다.

솔루션: IronPDF는 여러 출력 옵션을 가진 PdfDocument 객체를 반환합니다:

var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData;  // Get bytes
pdf.SaveAs("output.pdf");       // Or save directly
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData;  // Get bytes
pdf.SaveAs("output.pdf");       // Or save directly
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes As Byte() = pdf.BinaryData  ' Get bytes
pdf.SaveAs("output.pdf")  ' Or save directly
$vbLabelText   $csharpLabel

문제 4: 헤더/푸터 플레이스홀더 구문

Haukcode.DinkToPdf: [page][toPage]와 같은 대괄호 구문을 사용합니다.

해결책: IronPDF의 중괄호 플레이스홀더로 업데이트 하세요:

// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    RightText = "Page {page} of {total-pages}"
};
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    RightText = "Page {page} of {total-pages}"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}

' After (IronPDF)
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .RightText = "Page {page} of {total-pages}"
}
$vbLabelText   $csharpLabel

Haukcode.DinkToPdf 마이그레이션 체크리스트

이동 전 작업

코드베이스를 감사하여 모든 DinkToPdf 사용을 식별하세요:

# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .

# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .

# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .

# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .

# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .

# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .

# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
SHELL

현재 GlobalSettingsObjectSettings 설정 문서화. 제거할 수 있는 네이티브 라이브러리 로딩 코드를 식별하세요.

코드 업데이트 작업

  1. DinkToPdf NuGet 패키지를 제거하세요
  2. IronPdf NuGet 패키지를 설치하세요
  3. 네임스페이스 가져오기를 DinkToPdf에서 IronPdf로 업데이트합니다.
  4. SynchronizedConverter을(를) ChromePdfRenderer으로 대체하세요.
  5. HtmlToPdfDocument 패턴을 직접 메서드 호출로 변환합니다.
  6. GlobalSettings을(를) RenderingOptions으로 변환합니다.
  7. ObjectSettings을(를) RenderingOptions으로 변환합니다.
  8. 자리 표시자 구문을 업데이트합니다 ([page]{page}, [toPage]{total-pages})
  9. 시작 시IronPDF라이선스 초기화를 추가하세요

인프라 정리 작업

  1. 네이티브 바이너리(libwkhtmltox.*)를 삭제하세요
  2. 네이티브 라이브러리 로딩 코드를 제거하세요
  3. CustomAssemblyLoadContext가 있으면 제거하세요
  4. 의존성 주입을 업데이트 하세요 (더 이상 싱글톤이 필요하지 않음)
  5. 네이티브 바이너리를 위한 플랫폼 감지 코드를 제거하세요

마이그레이션 후 테스트

마이그레이션 후 다음 측면을 검증:

  • HTML을 PDF로 변환 테스트
  • URL을 PDF로 변환 테스트
  • 페이지 설정(크기, 방향, 여백) 확인
  • 플레이스홀더를 사용한 헤더 및 푸터 확인
  • 실제 HTML 템플릿으로 테스트
  • 부하 조건에서 성능 테스트

IronPDF로 마이그레이션할 때의 주요 이점

Haukcode.DinkToPdf에서 IronPDF로 이동하면 여러 가지 중요한 이점이 있습니다:

보안: 패치되지 않는 CVE-2022-35583 (SSRF) 및 다른 wkhtmltopdf 취약점을 제거합니다.

현대적 렌더링 엔진: 폐기된 Qt WebKit 2015 대신 적극적으로 업데이트되는 Chromium을 사용합니다. 완전한 HTML5, CSS3 및 JavaScript 지원.

네이티브 바이너리 없음: 플랫폼 별 DLL을 관리할 필요가 없는 독립형 라이브러리. Windows, Linux, macOS에서의 배포를 단순화합니다.

스레드 안전성: 싱글톤 요건 없음—ChromePdfRenderer을(를) 자유롭게 사용하십시오, 요청별 인스턴스화 패턴 포함.

더 간단한 API: 복잡한 문서 객체 생성 대신 RenderHtmlAsPdf(), RenderUrlAsPdf() 같은 직접 메서드 호출.

활발한 개발: .NET 10 및 C# 14의 채택이 2026년까지 증가함에 따라 IronPDF의 정기 업데이트는 현재 및 미래의 .NET 버전과의 호환성을 보장합니다.

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

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

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

아이언 서포트 팀

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