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에서|

아키텍처 비교

|측면|DinkToPdf|IronPDF| |--------|-----------|---------| |보안|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월|적극적으로 유지보수됨|

기능 비교

|기능|DinkToPdf|IronPDF| |---------|-----------|---------| |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

예상해야 할 주요 변경사항

|변경|DinkToPdf|IronPDF|영향| |--------|-----------|---------|--------| |변환기| SynchronizedConverter(new PdfTools()) | ChromePdfRenderer |보다 간단한 인스턴스화| |문서| HtmlToPdfDocument |직접 메소드 호출|문서 객체 없음| |설정|GlobalSettings + ObjectSettings| RenderingOptions |단일 옵션 객체| |반환 유형| 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 마이그레이션 참조

핵심 클래스 매핑

|DinkToPdf|IronPDF| |-----------|---------| | SynchronizedConverter | ChromePdfRenderer | | BasicConverter | ChromePdfRenderer | | PdfTools |필요 없음| | HtmlToPdfDocument |필요 없음| | GlobalSettings | RenderingOptions | | ObjectSettings | RenderingOptions | | MarginSettings |개별 여백 속성|

GlobalSettings 매핑

|DinkToPdf GlobalSettings|IronPDF 동등| |--------------------------|-------------------| | ColorMode = ColorMode.Color |기본값 (항상 색상)| | Orientation = Orientation.Portrait | PaperOrientation = PdfPaperOrientation.Portrait | | Orientation = Orientation.Landscape | PaperOrientation = PdfPaperOrientation.Landscape | | PaperSize = PaperKind.A4 | PaperSize = PdfPaperSize.A4 | | Margins = new MarginSettings() |개별 여백 속성|

MarginSettings 매핑

|DinkToPdf 여백|IronPDF 동등| |-------------------|-------------------| | Margins.Top = 10 | MarginTop = 10 | | Margins.Bottom = 10 | MarginBottom = 10 | | Margins.Left = 15 | MarginLeft = 15 | | Margins.Right = 15 | MarginRight = 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실행, 적극적으로 유지 관리되는 라이브러리를 제공합니다.

Please note: DinkToPdf 및 wkhtmltopdf는 각 소유자의 등록 상표입니다. 이 사이트는DinkToPdf또는 wkhtmltopdf와 관련이 없으며, 승인 또는 후원을 받지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Related Articles

Key in blue circle

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

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

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

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