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

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

PrinceXML에서 IronPDF로 마이그레이션하면 PDF 생성 워크플로가 외부 명령 줄 프로세스에서 고유의 .NET 라이브러리로 변환됩니다. 이 가이드는 프로세스 관리 오버헤드를 제거하고, 배포를 단순화하며, PDF 생성 외에도 광범위한 PDF 조작 기능을 제공하는 완전한 단계별 마이그레이션 경로를 제공합니다.

왜 PrinceXML에서 IronPDF로 마이그레이션해야 하는가

PrinceXML이해하기

PrinceXML은 CSS 페이지드 미디어 사양에 대한 전용 지원을 통해 HTML 콘텐츠를 인쇄 수준의 PDF 문서로 변환하는 데 탁월한 정교한 도구입니다. 이 특수화는 PrinceXML이 상세 인쇄 스타일링이 필요한 출판 또는 법률 문서와 같은 산업에 매우 유용한 특성인 의도된 인쇄 디자인에 대한 높은 충실도로 문서를 렌더링할 수 있게 해줍니다.

그러나 PrinceXML은 .NET 라이브러리가 아니며 별도의 명령줄 도구로 작동하여 순수 .NET 솔루션을 선호하는 환경에서 통합이 복잡해질 수 있습니다. 별도의 서버 프로세스에 의존하기 때문에 추가적인 시스템 리소스 관리가 필요하고 프로젝트 배포의 복잡성이 증가할 수 있습니다.

외부 프로세스 문제

PrinceXML은 .NET 애플리케이션에 심각한 아키텍처적 문제를 일으킬 수 있는 별도의 명령줄 실행 파일로 작동합니다:

  1. 프로세스 관리 부담: 외부 프로세스를 생성, 모니터링 및 종료해야 합니다.

  2. 순수 .NET 통합 없음: stdin/stdout 또는 임시 파일을 통해 통신해야 합니다.

  3. 배포 복잡성: 모든 서버에 Prince 설치가 필요합니다.

  4. 서버당 라이선스: 각 배포마다 별도의 라이선스가 필요합니다 ($495+).

  5. 오류 처리의 어려움: 오류 감지를 위해 텍스트 출력을 구문 분석해야 합니다.

  6. 비동기/대기 없음: 차단 호출 또는 복잡한 비동기 래퍼가 필요합니다.

  7. 경로 종속성: Prince 실행 파일을 PATH 또는 절대 경로에서 찾을 수 있어야 합니다.

PrinceXMLvsIronPDF비교

측면 PrinceXML IronPDF
아키텍처 외부 프로세스 .NET 네이티브 라이브러리
통합 명령줄 직접 API
배포 모든 서버에 설치 단일 NuGet 패키지
오류 처리 텍스트 출력 구문 분석 .NET 예외
비동기 지원 수동 래퍼 네이티브 async/await
PDF 조작 생성 전용 전체 조작 (합병, 분할, 편집)
라이선스 서버당 ($495+) 개발자당
업데이트 수동 재설치 NuGet 업데이트
디버깅 어려움 전체 디버거 지원
디지털 서명 아니요
양식 아니요
Docker 지원 복잡함 간단함
클라우드 기능 어려움 쉬움

IronPDF는 .NET 본래의 기능을 갖춘 대안을 제공하여 단순한 HTML-to-PDF 변환 이상의 고급 PDF 조작 작업(예: 편집, 병합, 디지털 서명 등)을 포함합니다. IronPDF의 API는 단순성과 사용의 용이성을 위해 설계되어 개발자가 최소한의 보일러플레이트 코드로 변환 및 조작을 수행할 수 있도록 합니다.

팀이 2025년 및 2026년 동안 .NET 10 및 C# 14를 채택할 계획이라면, IronPDF의 원활한 배포는 외부 종속성이나 서버 프로세스를 필요로 하지 않으며, 따라서 .NET Framework에의 통합 부담을 덜어줍니다.


시작하기 전에

필수 조건

  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 패키지 변경 사항

# Install IronPDF
dotnet add package IronPdf

# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
# Install IronPDF
dotnet add package IronPdf

# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
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

PrinceXML사용 검색

# Find Prince process calls
grep -r "prince" --include="*.cs" .
grep -r "Process.Start" --include="*.cs" . | grep -i prince
grep -r "@page" --include="*.css" .
grep -r "prince-" --include="*.css" .
# Find Prince process calls
grep -r "prince" --include="*.cs" .
grep -r "Process.Start" --include="*.cs" . | grep -i prince
grep -r "@page" --include="*.css" .
grep -r "prince-" --include="*.css" .
SHELL

완전한 API 참조

네임스페이스 변경

// Before: PrinceXML
using PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;

// After: IronPDF
using IronPdf;
// Before: PrinceXML
using PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;

// After: IronPDF
using IronPdf;
' Before: PrinceXML
Imports PrinceXMLWrapper
Imports System.Diagnostics
Imports System.IO

' After: IronPDF
Imports IronPdf
$vbLabelText   $csharpLabel

명령줄에서 메소드 매핑

Prince 명령 IronPDF 동등
prince input.html -o output.pdf renderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf")
prince --style=custom.css input.html HTML에 CSS를 포함하거나 RenderingOptions 사용
prince --javascript renderer.RenderingOptions.EnableJavaScript = true
prince --no-javascript renderer.RenderingOptions.EnableJavaScript = false
prince --page-size=Letter renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
prince --page-margin=1in renderer.RenderingOptions.MarginTop = 72 (72 포인트 = 1인치)
prince --encrypt pdf.SecuritySettings.OwnerPassword = "..."
prince --user-password=pw pdf.SecuritySettings.UserPassword = "pw"
prince --disallow-print pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
prince --disallow-copy pdf.SecuritySettings.AllowUserCopyPasteContent = false
prince --baseurl=http://... renderer.RenderingOptions.BaseUrl = new Uri("http://...")
prince --media=print renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
prince --media=screen renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen

CSS @page에서 RenderingOptions 매핑

CSS @page 속성 IronPDF 동등
size: A4 PaperSize = PdfPaperSize.A4
size: Letter PaperSize = PdfPaperSize.Letter
size:A4landscape PaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape
margin: 2cm MarginTop/Bottom/Left/Right = 56
margin-top: 1in MarginTop = 72
@top-center { content: "..." } 중앙에 정렬된 div와 함께 HtmlHeader
@bottom-right { content: counter(page) } {page} 자리표시자와 함께 HtmlFooter

페이지 크기 변환

크기 포인트 밀리미터
레터 612 x 792 216 x 279
A4 595 x 842 210 x 297
리걸 612 x 1008 216 x 356
1 인치 72 25.4
1 cm 28.35 10

코드 마이그레이션 예제

예제 1: HTML 파일에서 PDF로 변환

이전 (PrinceXML):

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

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.Convert("input.html", "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.Convert("input.html", "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
Imports PrinceXMLWrapper
Imports System

Module Program
    Sub Main()
        Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
        prince.Convert("input.html", "output.pdf")
        Console.WriteLine("PDF created successfully")
    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.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
        pdf.SaveAs("output.pdf")
        Console.WriteLine("PDF created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예제는 근본적인 아키텍처 차이를 보여줍니다. PrinceXML은 실행 파일의 전체 경로 ("C:\\Program Files\\Prince\\engine\\bin\\prince.exe")로 Prince 객체를 인스턴스화한 다음, 입력 및 출력 경로를 사용하여 Convert()을 호출해야 합니다.

IronPDF는 경로 종속성을 완전히 제거합니다: ChromePdfRenderer을 생성하고 HTML 파일 경로와 함께 RenderHtmlFileAsPdf()을 호출한 다음, 결과를 기록하기 위해 SaveAs()을 사용하세요. 실행 파일 경로 없음, 프로세스 관리 없음, 경로 종속성 없음. HTML에서 PDF로의 문서에서 포괄적인 예제를 참조하세요.

예제 2: 옵션을 사용한 URL에서 PDF로 변환

이전 (PrinceXML):

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

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.SetJavaScript(true);
        prince.SetEncrypt(true);
        prince.SetPDFTitle("Website Export");
        prince.Convert("https://example.com", "webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.SetJavaScript(true);
        prince.SetEncrypt(true);
        prince.SetPDFTitle("Website Export");
        prince.Convert("https://example.com", "webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}
Imports PrinceXMLWrapper
Imports System

Class Program
    Shared Sub Main()
        Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
        prince.SetJavaScript(True)
        prince.SetEncrypt(True)
        prince.SetPDFTitle("Website Export")
        prince.Convert("https://example.com", "webpage.pdf")
        Console.WriteLine("URL converted to PDF")
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.PdfTitle = "Website Export";

        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.Encrypt("password");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.PdfTitle = "Website Export";

        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.Encrypt("password");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        renderer.RenderingOptions.EnableJavaScript = True
        renderer.RenderingOptions.PdfTitle = "Website Export"

        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.Encrypt("password")
        pdf.SaveAs("webpage.pdf")
        Console.WriteLine("URL converted to PDF")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예제는PrinceXML옵션이IronPDF속성에 매핑되는 방법을 보여줍니다. PrinceXML은 변환 전에 setter 메소드(SetJavaScript(), SetEncrypt(), SetPDFTitle())를 사용합니다. IronPDF는 RenderingOptions 속성을 사전 렌더링 설정에 사용하고, 후속 렌더링 메소드들은 PdfDocument 객체의 Encrypt()와 같은 메소드를 사용합니다.

주요 매핑:

  • prince.SetJavaScript(true)renderer.RenderingOptions.EnableJavaScript = true
  • prince.SetPDFTitle("...")renderer.RenderingOptions.PdfTitle = "..."
  • prince.SetEncrypt(true)pdf.Encrypt("password") (IronPDF는 비밀번호를 요구합니다)

더 많은 정보를 보려면 튜토리얼을 참조하세요.

예제 3: HTML 문자열을 PDF로 변환

이전 (PrinceXML):

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

class Program
{
    static void Main()
    {
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";
        File.WriteAllText("temp.html", html);

        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.Convert("temp.html", "styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";
        File.WriteAllText("temp.html", html);

        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.Convert("temp.html", "styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}
Imports PrinceXMLWrapper
Imports System
Imports System.IO

Module Program
    Sub Main()
        Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
        File.WriteAllText("temp.html", html)

        Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
        prince.Convert("temp.html", "styled-output.pdf")
        Console.WriteLine("Styled PDF created")
    End Sub
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"

        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("styled-output.pdf")
        Console.WriteLine("Styled PDF created")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예는 중요한 차이를 강조합니다: PrinceXML은 파일 입력이 필요하므로 변환 전에 임시 파일(File.WriteAllText("temp.html", html))을 생성해야 합니다. IronPDF의 RenderHtmlAsPdf()은 HTML 문자열을 직접 수용합니다 - 임시 파일 없음, 정리 코드 없음, 디스크 I/O 오버헤드 없음.


CSS 페이징 미디어 마이그레이션

PrinceXML의 CSS 페이징 미디어 지원은 강력하지만, 다른 곳에서는 작동하지 않는 Prince 전용 CSS로 공급업체 종속성을 야기합니다:

PrinceXML CSS:

@page {
    size: A4;
    margin: 2cm;
    @top-center {
        content: "Document Title";
    }
    @bottom-right {
        content: counter(page);
    }
}

/* Prince-specific extensions */
prince-pdf-page-label: "Chapter " counter(chapter);
prince-pdf-destination: attr(id);

IronPDF C# (동등한 기능):

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 56;    // ~2cm
renderer.RenderingOptions.MarginBottom = 56;
renderer.RenderingOptions.MarginLeft = 56;
renderer.RenderingOptions.MarginRight = 56;

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
    MaxHeight = 40
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 56;    // ~2cm
renderer.RenderingOptions.MarginBottom = 56;
renderer.RenderingOptions.MarginLeft = 56;
renderer.RenderingOptions.MarginRight = 56;

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
    MaxHeight = 40
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 56    ' ~2cm
renderer.RenderingOptions.MarginBottom = 56
renderer.RenderingOptions.MarginLeft = 56
renderer.RenderingOptions.MarginRight = 56

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
    .MaxHeight = 40
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
    .MaxHeight = 25
}
$vbLabelText   $csharpLabel

일반적인 CSS 마이그레이션 문제

문제 1: CSS @page가 작동하지 않음

IronPDF는 Chromium을 사용하며, 이 Chromium은 제한된 @page 지원을 가집니다. CSS 규칙을 RenderingOptions로 변환하십시오.

문제 2: 페이지 여백 상자 누락

CSS 마진 상자(@top-center, @bottom-right)는 Prince에 특화되어 있습니다. 대신 HtmlFooter을 사용하세요.

문제 3: string-set/content 작동하지 않음

string-set CSS 속성은 Prince에 특화되어 있습니다. <title> 태그에서 {html-title} 자리표시자를 사용하세요:

<title>Chapter 1: Introduction</title>
<title>Chapter 1: Introduction</title>
HTML
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};
$vbLabelText   $csharpLabel

문제 4: counter(pages) 잘못됨

CSS 카운터 대신 IronPDF의 {total-pages} 자리표시자를 사용하세요.


성능 비교

작업 PrinceXML IronPDF
간단한 HTML ~400ms ~300ms
복잡한 CSS ~600ms ~400ms
JavaScript 페이지 제한적 ~500ms
대용량 문서 ~1500ms ~1000ms
동시(10) ~4000ms ~1500ms
시작 비용 ~200ms ~50ms

이동 후 새로운 기능

IronPDF로 마이그레이션 후, PrinceXML이 제공할 수 없는 기능을 얻을 수 있습니다:

PDF 병합

var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_book.pdf")
$vbLabelText   $csharpLabel

워터마크

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

디지털 서명

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim signature = New PdfSignature("certificate.pfx", "password")
pdf.Sign(signature)
$vbLabelText   $csharpLabel

양식 채우기

var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.GetFieldByName("Name").Value = "John Doe"
pdf.SaveAs("filled_form.pdf")
$vbLabelText   $csharpLabel

기능 비교 요약

기능 PrinceXML IronPDF
네이티브 .NET 아니요
외부 프로세스 필요함 아니요
비동기 지원 수동 래핑 네이티브 async/await
CSS 분할 미디어 지원됨 RenderingOptions 통해
CSS 그리드
플렉스박스
JavaScript 제한적 전체 ES2024
생성
병합 아니요
분할 아니요
편집 아니요
워터마크 CSS 전용 HTML/CSS + API
디지털 서명 아니요
PDF/A
암호화
양식 아니요
NuGet 패키지 아니요
서버 설치 필요함 아니요

마이그레이션 체크리스트

사전 마이그레이션

  • 모든 Prince 명령줄 호출을 식별합니다
  • 사용된 CSS @page 규칙을 문서화합니다
  • Prince에 특화된 CSS 속성 목록 (prince-*, string-set)
  • 어떤 PrinceJavaScript함수든지 메모합니다
  • 사용된 PDF 기능을 식별합니다 (암호화, 메타데이터)
  • ironpdf.com에서IronPDF라이선스 키 획득

코드 변경 사항

  • PrinceXMLWrapper NuGet 패키지 제거
  • IronPdf NuGet Install-Package
  • 네임스페이스 가져오기 업데이트
  • Prince 인스턴스화를 ChromePdfRenderer으로 대체
  • prince.Convert()RenderHtmlFileAsPdf() 또는 RenderHtmlAsPdf()으로 대체
  • setter 메소드를 RenderingOptions 속성으로 변환
  • @page CSS를 RenderingOptions으로 마이그레이션
  • 마진 상자를 HtmlFooter으로 대체
  • CSS 카운터를 {total-pages} 자리표시자로 변환
  • HTML 문자열의 임시 파일 처리를 제거합니다
  • 애플리케이션 시작 시 라이선스 초기화 추가

마이그레이션 이후

  • HTML 파일 변환을 테스트합니다
  • HTML 문자열 변환을 테스트합니다
  • URL 변환을 테스트합니다
  • 페이지 크기 일치를 확인합니다
  • 여백 일치를 확인합니다
  • 머리글과 바닥글을 테스트합니다
  • 페이지 번호를 확인합니다
  • 암호화/보안을 테스트합니다
  • 서버에서 Prince 설치를 제거합니다
  • 배포 스크립트 업데이트

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

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

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

아이언 서포트 팀

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