IRONSOFTWAREHOME
동영상

IronPDF 2021: Chrome 렌더링 엔진 EAP - PDF 생성의 게임 체인저!

Curtis Chau
Curtis Chau
Updated: 2026년 7월 19일

DinkToPdf는 wkhtmltopdf를 래핑하여 모든 보안 취약성과 기술적 제한을 계승합니다. 이 문제를 이해하는 것이 이주 시급성을 평가하는 데 중요합니다.

중대한 보안 문제

DinkToPdf는 wkhtmltopdf로부터 패치되지 않은 보안 권고를 상속받습니다:

  1. CVE-2022-35583 (SSRF): wkhtmltopdf 0.12.6에 대한 서버 사이드 요청 위조 권고 (NVD의 CVSS 9.8; 라이브러리 문제라기보다는 애플리케이션 측 입력 검증 문제로 상위 프로젝트에서 다투어진 사항). 어쨌든, 이는 패치되지 않을 것입니다.
  2. 보관된 프로젝트: wkhtmltopdf/wkhtmltopdf 리포지토리는 2023년 1월 2일에 보관되었으며, 전체 wkhtmltopdf GitHub 조직은 2024년 7월 10일에 보관되었습니다.
  3. 향후 보안 패치 없음: 어떤 알려진 또는 향후 취약점이 상위에서 수정되지 않을 것입니다.

기술적 문제

문제영향
스레드 안전성BasicConverter는 단일 스레드 전용입니다; SynchronizedConverter가 호출을 직렬화하며, 부하가 걸릴 경우 여전히 네이티브 측에서 충돌이 발생할 수 있습니다
네이티브 바이너리플랫폼에 따라 다르게 필요한 복잡한 libwkhtmltox 배포
CSS 제한구식 QtWebKit 포크 — 최신Flexbox/Grid레이아웃 지원 없음
JavaScript일관되지 않은 실행 및 타임아웃
렌더링구식 QtWebKit 기반 엔진 (wkhtmltopdf 0.12.6, 마지막 릴리스 2020년 6월)
유지보수DinkToPdf 1.0.8 마지막 릴리스 2017년 4월 18일 NuGet에서

아키텍처 비교

측면DinkToPdfIronPDF
보안CVE-2022-35583 (SSRF), 패치되지 않음 / 상위에서 다투어짐알려진 중요한 CVE 없음
렌더링 엔진구식 QtWebKit 포크 (wkhtmltopdf 0.12.6)최신 크로뮴
스레드 안전성SynchronizedConverter가 호출을 직렬화합니다; native-side crashes reported under load설계상 스레드 안전
네이티브 종속성플랫폼에 따라 다른 libwkhtmltox 바이너리관리 NuGet 패키지
CSS 지원최신 Flexbox/그리드 없음전체CSS3
JavaScript제한적, 일관성 없음지원됨
유지보수DinkToPdf 마지막 릴리스 2017년 4월; wkhtmltopdf org 보관 2024년 7월적극적으로 유지보수됨

기능 비교

기능DinkToPdfIronPDF
HTML to PDF✅ (구식 엔진)✅ (Chromium)
URL을 PDF로 변환
사용자 정의 여백
헤더/푸터✅ (제한적)✅ (전체 HTML)
CSS3❌ 제한적✅ 전체
Flexbox/Grid
JavaScript⚠ 제한됨✅ 전체
PDF 조작
양식 채우기
디지털 서명
암호화
워터마크
병합/분할

이전 준비

필수 조건

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

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

###DinkToPdf사용 감사

솔루션 디렉토리에서 다음 명령을 실행하여 모든DinkToPdf참조를 식별하세요:

# Find allDinkToPdfusages in your codebase
grep -r "using DinkToPdf" --include="*.cs" .
grep -r "SynchronizedConverter\|HtmlToPdfDocument\|ObjectSettings" --include="*.cs" .

# Find NuGet package references
grep -r "DinkToPdf" --include="*.csproj" .

# Find wkhtmltopdf binaries
find . -name "libwkhtmltox*"
SHELL

예상해야 할 주요 변경사항

변경DinkToPdfIronPDF영향
변환기SynchronizedConverter(new PdfTools())ChromePdfRenderer보다 간단한 인스턴스화
문서HtmlToPdfDocument직접 메소드 호출문서 객체 없음
설정GlobalSettings + ObjectSettingsRenderingOptions단일 옵션 객체
반환 유형byte[]PdfDocument더 강력한 객체
이진libwkhtmltox.dll/so없음 (관리됨)네이티브 파일 제거
스레드 안전성BasicConverter 단일 스레드; SynchronizedConverter 직렬화기본적으로 스레드 안전더 간단한 코드
DI싱글톤 필요어느 수명 주기나유연함

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

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

DinkToPdf 제거하고IronPDF설치:

# Remove DinkToPdf
dotnet remove package DinkToPdf

# Install IronPDF
dotnet add package IronPdf
SHELL

2단계: 네이티브 이진 파일 제거

프로젝트에서 이 플랫폼별 파일들을 삭제하십시오:

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

IronPDF에는 네이티브 종속성이 없습니다—모두 관리 코드입니다.

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

DinkToPdf 네임스페이스를 IronPDF로 대체:

// Remove these
using DinkToPdf;
using DinkToPdf.Contracts;

// Add this
using IronPdf;

4단계: 라이선스 구성

// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

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

핵심 클래스 매핑

DinkToPdfIronPDF
SynchronizedConverterChromePdfRenderer
BasicConverterChromePdfRenderer
PdfTools필요 없음
HtmlToPdfDocument필요 없음
GlobalSettingsRenderingOptions
ObjectSettingsRenderingOptions
MarginSettings개별 여백 속성

GlobalSettings 매핑

DinkToPdf GlobalSettingsIronPDF 동등
ColorMode = ColorMode.Color기본값 (항상 색상)
Orientation = Orientation.PortraitPaperOrientation = PdfPaperOrientation.Portrait
Orientation = Orientation.LandscapePaperOrientation = PdfPaperOrientation.Landscape
PaperSize = PaperKind.A4PaperSize = PdfPaperSize.A4
Margins = new MarginSettings()개별 여백 속성

MarginSettings 매핑

DinkToPdf 여백IronPDF 동등
Margins.Top = 10MarginTop = 10
Margins.Bottom = 10MarginBottom = 10
Margins.Left = 15MarginLeft = 15
Margins.Right = 15MarginRight = 15

코드 마이그레이션 예제

기본 HTML에서 PDF로

기본 변환은 DinkToPdf의 장황한 구성에서 IronPDF의 간소화된 API로의 극적인 단순화를 보여줍니다.

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 = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}

IronPDF 구현:

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

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

IronPDF는DinkToPdf구성 20줄을 4줄로 줄입니다. SynchronizedConverter 없음, PdfTools 없음, HtmlToPdfDocument 없음, ObjectSettings 없음 — 그냥 렌더링하고 저장하세요. 더 많은 옵션을 보려면 HTML to PDF 문서를 참조하세요.

URL을 PDF로 변환

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);
    }
}

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");
    }
}

IronPDF의 RenderUrlAsPdf는 중첩된 ObjectSettings.Page 구성을 직접적인 메서드 호출로 대체합니다. 더 많은 옵션을 보려면 URL to PDF 문서를 참조하세요.

Landscape 및 여백을 가진 사용자 정의 설정

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.A4,
                Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 }
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("custom.pdf", pdf);
    }
}

IronPDF 구현:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 15;
        renderer.RenderingOptions.MarginRight = 15;
        
        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>");
        pdf.SaveAs("custom.pdf");
    }
}

IronPDF의 RenderingOptionsGlobalSettingsMarginSettings를 통합적이고 유연한 API로 대체합니다. 더 많은 구성 옵션을 보려면 렌더링 옵션 문서를 참조하십시오.

중요한 마이그레이션 노트

네이티브 이진 파일 제거

가장 중요한 정리 단계는 wkhtmltopdf 네이티브 이진 파일들을 제거하는 것입니다. IronPDF에는 네이티브 종속성이 없습니다:

# Delete native binaries
rm libwkhtmltox.* 2>/dev/null
SHELL

싱글톤 필요 없음

DinkToPdf의 문서화된 지침은 SynchronizedConverter를 싱글톤으로 등록하는 것입니다. IronPDF의 ChromePdfRenderer는 DI 수명 주기와 관계없이 스레드 안전합니다.

//DinkToPdf- typically registered as singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));

//IronPDF- any lifetime works
services.AddScoped<ChromePdfRenderer>();
// Or just create inline:
var renderer = new ChromePdfRenderer();
C#

더 풍부한 반환 유형

DinkToPdf는 byte[]를 반환합니다. IronPDF는 조작 기능을 갖춘 PdfDocument를 반환합니다.

//DinkToPdfreturns byte[]
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
return File(pdf, "application/pdf");

//IronPDF returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
return File(pdf.BinaryData, "application/pdf");
C#

전체CSS3지원

DinkToPdf에서 실패하는 최신 레이아웃이 IronPDF에서는 완벽하게 작동합니다:

//DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
var html = "<div style='display: flex;'>...</div>";  // Broken!

//IronPDF- full support (modern Chromium)
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";
var pdf = renderer.RenderHtmlAsPdf(html);  // Works!

마이그레이션 후 점검 목록

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

  • PDF 생성이 올바르게 작동하는지 확인하기 위해 모든 단위 테스트를 수행합니다
  • 멀티 스레드 시나리오를 테스트하세요 (경로 SynchronizedConverter가 호출을 직렬화하며, 부하가 걸릴 경우 네이티브 측에서 충돌하기 쉬웠습니다)
  • PDF 출력 품질 비교(IronPDF의 Chromium이 더 나음)
  • CSS 렌더링 확인(Flexbox/Grid가 이제 작동) -JavaScript실행 테스트(IronPDF에서는 신뢰할 수 있음)
  • wkhtmltopdf 설치 제거를 위한 CI/CD 파이프라인 업데이트
  • 보안 스캔 통과 확인(CVE-2022-35583 플래그 없음)
  • Docker/배포 스크립트에서 네이티브 바이너리 배포 제거

추가 리소스


DinkToPdf에서 IronPDF로의 마이그레이션은 패치되지 않은 wkhtmltopdf 공격 표면(CVE-2022-35583), 직렬 SynchronizedConverter 동시성 모델, 네이티브 바이너리 배포, 그리고 오래된 QtWebKit 렌더링 경로를 폐기합니다. 최신 Chromium 엔진으로의 전환은 전체CSS3지원, 신뢰할 수 있는JavaScript실행, 적극적으로 유지 관리되는 라이브러리를 제공합니다.

참고해 주세요: DinkToPdf 및 wkhtmltopdf는 각 소유자의 등록 상표입니다. 이 사이트는DinkToPdf또는 wkhtmltopdf와 관련이 없으며, 승인 또는 후원을 받지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
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일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.