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

C#에서 ZetPDF에서 IronPDF로 마이그레이션하는 방법

ZetPDF (zetpdf.com)는 상업적으로 라이선스를 받은 .NET PDF SDK로서 그 API 기능은 PDFsharp과 유사합니다 — PDFsharp 커뮤니티는 폐쇄 포크가 아닌가 의문을 제기했습니다. 벤더는 이를 독점적, 100% 관리 코드 엔진으로 마케팅합니다. ZetPDF는 NuGet을 통해 배포되지 않습니다 — 설치는 https://zetpdf.com/download/ 에서 ZIP 다운로드입니다 — 2021년 이후 공개 릴리스 활동이 없습니다. 가격은 영구적: $299 단일 프로젝트 / $449 다중 / $599 OEM.

이 가이드는 .NET 개발자가 ZetPDF에서 IronPDF로 전환을 평가할 수 있도록 단계별 지침, 코드 비교 및 실용적인 예제와 함께 마이그레이션 경로를 제공합니다.

왜 ZetPDF에서 마이그레이션하는가

ZetPDF의 PDFsharp 유사, 좌표 기반 드로잉 API는 현대 문서 생성 워크플로를 제한하는 구조적 제약을 가지고 있습니다. 팀이 마이그레이션을 고려하는 일반적인 이유:

Coordinate-Based API: ZetPDF는 모든 요소를 정확한 XGraphics 좌표를 통해 위치시킵니다. 수동 배치는 요청 변경 시 유지 보수 작업을 증가시킵니다.

CSS 지원 없음: 스타일링 시스템 없음 — 코드 내에서 요소별로 글꼴과 색상을 관리합니다.

JavaScript 렌더링 불가능: PDF 생성 중 동적 웹 콘텐츠를 렌더링하거나 JavaScript를 실행할 수 없습니다.

네이티브 HTML to PDF 없음: ZetPDF의 문서화된 기능 리스트에 HTML to PDF 또는 URL to PDF 변환기가 포함되어 있지 않습니다; 렌더링은 저수준 XGraphics 그리기만 합니다.

NuGet 없음, 비활성 릴리스: 배포는 https://zetpdf.com/download/에서 벤더 ZIP을 통해 이루어지며, 2021년 이후 공개 릴리스 활동이 없습니다.

수동 페이지 나누기: 페이지 오버플로는 자동 페이지 나눔 대신 수동으로 계산 및 관리해야 합니다.

텍스트 측정 필요: 텍스트 줄바꿈을 위한 수동 계산은 개발 오버헤드를 추가합니다.

근본적인 문제

ZetPDF와 PDFsharp은 모든 요소를 정확한 좌표로 배치하도록 강요합니다:

// ZetPDF:수동positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form
// ZetPDF:수동positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form
' ZetPDF:수동positioning nightmare
graphics.DrawString("Name:", font, brush, New XPoint(50, 100))
graphics.DrawString("John Doe", font, brush, New XPoint(100, 100))
graphics.DrawString("Address:", font, brush, New XPoint(50, 120))
graphics.DrawString("123 Main St", font, brush, New XPoint(100, 120))
' ... hundreds of lines for a simple form
$vbLabelText   $csharpLabel

IronPDF는 HTML/CSS를 사용하여 레이아웃 엔진이 모든 것을 처리합니다:

// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
' IronPDF: Simple HTML
Dim html As String = "
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

IronPDF vs ZetPDF: 기능 비교

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

기능 ZetPDF IronPDF
API 스타일 PDFsharp 모양의 XGraphics 그리기 고급 HTML 렌더링
HTML을 PDF로 변환 문서화된 기능 리스트에 없음 네 (전체 Chromium 지원)
상용 라이선스 예, 영구 ($299 / $449 / $599)
분포 ZIP 다운로드 (NuGet 패키지 없음) NuGet (IronPdf)
마지막 공개 활동 2021년 이후 릴리스 없음 활발하고 빈번한 릴리스
CSS 지원 아니요 전체 CSS3
JavaScript 아니요 전체 ES2024
자동 레이아웃 아니요
자동 페이지 나누기 아니요
테이블 수동 드로잉 HTML
헤더/푸터 수동 HTML/CSS
워터마크 수동 코드 내장형
PDF 병합 1급 헬퍼 없음
PDF 분할 1급 헬퍼 없음
디지털 서명 아니요
PDF/A 아니요

빠른 시작: ZetPDF에서 IronPDF로의 마이그레이션

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

1단계:ZetPDF참조를IronPDF NuGet 패키지로 교체

ZetPDF는 NuGet에 없습니다https://zetpdf.com/download/에서 ZIP으로 제공되며, ZetPDF.dll을 프로젝트에 추가하여 참조합니다. 마이그레이션 후, 해당 DLL 참조를 삭제하고 NuGet에서 IronPDF를 설치하세요:

# Remove the ZetPDF.dll reference from your csproj manually, then:
dotnet add package IronPdf
# Remove the ZetPDF.dll reference from your csproj manually, then:
dotnet add package IronPdf
SHELL

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

ZetPDF 네임스페이스를IronPDF네임스페이스로 교체하세요:

// Before (ZetPDF)
using ZetPDF;
using ZetPDF.Drawing;
using ZetPDF.Fonts;

// After (IronPDF)
using IronPdf;
// Before (ZetPDF)
using ZetPDF;
using ZetPDF.Drawing;
using ZetPDF.Fonts;

// After (IronPDF)
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

단계 3: 라이선스 초기화

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

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

코드 마이그레이션 예제

HTML을 PDF로 변환

ZetPDF의 발표된 기능 리스트에는 네이티브 HTML to PDF 또는 URL to PDF 변환기가 포함되어 있지 않습니다 — 문서화된 표면에는 PDF 보기/출력, 주석, AES256 암호화, 양식 필드 및 텍스트 추출만 다룹니다. 아래의 유사 래퍼는ZetPDF위에 HTML to PDF 진입점을 스터브하는 방식에 대한 설명입니다; 실제로 작업은 외부 HTML 렌더러나 저수준 XGraphics 그리기로 돌아갑니다.

ZetPDF 접근법 (설명용 — 네이티브 HTML to PDF 없음):

//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 아니요 native HtmlToPdfConverter exists inZetPDF— illustrative call only.
        var converter = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 아니요 native HtmlToPdfConverter exists inZetPDF— illustrative call only.
        var converter = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
Imports ZetPDF
Imports System

Class Program
    Shared Sub Main()
        ' 아니요 native HtmlToPdfConverter exists inZetPDF— illustrative call only.
        Dim converter As New HtmlToPdfConverter()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
        converter.ConvertHtmlToPdf(htmlContent, "output.pdf")
        Console.WriteLine("PDF created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 접근법:

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim renderer As New ChromePdfRenderer()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
        Console.WriteLine("PDF created successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF는 ChromePdfRenderer과 함께 RenderHtmlAsPdf()을 제공합니다. 이는 PdfDocument 개체를 반환하며, 이를 파일에 저장하거나 이진 데이터를 검색하거나 저장 전에 추가 작업을 수행할 수 있습니다.

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

URL을 PDF로 변환

ZetPDF에는 네이티브 URL to PDF 변환기가 없습니다; HTML/URL 렌더링은 문서화된 기능 리스트에 포함되어 있지 않습니다. 실용적 마이그레이션 경로는 ZetPDF를 외부 HTML 렌더러와 쌍으로 사용하거나 IronPDF와 같은 Chromium 기반 라이브러리로 이동하는 것이 일반적입니다.

ZetPDF 접근법 (설명용 — 네이티브 URL to PDF 없음):

//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 아니요 native ConvertUrlToPdf exists inZetPDF— illustrative call only.
        var converter = new HtmlToPdfConverter();
        var url = "https://www.example.com";
        converter.ConvertUrlToPdf(url, "webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        // 아니요 native ConvertUrlToPdf exists inZetPDF— illustrative call only.
        var converter = new HtmlToPdfConverter();
        var url = "https://www.example.com";
        converter.ConvertUrlToPdf(url, "webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
Imports ZetPDF
Imports System

Class Program
    Shared Sub Main()
        ' 아니요 native ConvertUrlToPdf exists inZetPDF— illustrative call only.
        Dim converter As New HtmlToPdfConverter()
        Dim url As String = "https://www.example.com"
        converter.ConvertUrlToPdf(url, "webpage.pdf")
        Console.WriteLine("PDF from URL created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 접근법:

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim renderer As New ChromePdfRenderer()
        Dim url As String = "https://www.example.com"
        Dim pdf = renderer.RenderUrlAsPdf(url)
        pdf.SaveAs("webpage.pdf")
        Console.WriteLine("PDF from URL created successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF의 RenderUrlAsPdf()ChromePdfRenderer에서 웹 페이지 캡처를 위해 전체 Chromium 렌더링 엔진을 활용하며 JavaScript 실행 및 최신 CSS를 포함합니다.

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

여러 PDF 병합

ZetPDF는 한 줄 PdfMerger.MergeFiles() helper를 제공하지 않습니다. 병합은 PDFsharp(이를 ZetPDF가 닮았습니다)과 동일한 패턴을 따릅니다: 각 입력을 PdfReader로 열고, 그런 다음 페이지를 출력 PdfDocument에 루프하고 Save()합니다. 아래의 설명적인 래퍼는IronPDF표면을 비교하기 위해 ZetPDF의 실제 코드를 무시합니다; 실제ZetPDF코드에서는 수동 루프를 작성합니다.

ZetPDF 접근법 (설명용 — 내장 PdfMerger 없음):

//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        //ZetPDFhas no built-in PdfMerger — illustrative call only.
        var merger = new PdfMerger();
        var files = new List<string> { "document1.pdf", "document2.pdf" };
        merger.MergeFiles(files, "merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
//ZetPDFis NOT on NuGet — install via SDK ZIP from https://zetpdf.com/download/
using ZetPDF;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        //ZetPDFhas no built-in PdfMerger — illustrative call only.
        var merger = new PdfMerger();
        var files = new List<string> { "document1.pdf", "document2.pdf" };
        merger.MergeFiles(files, "merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
Imports ZetPDF
Imports System
Imports System.Collections.Generic

Module Program
    Sub Main()
        ' ZetPDFhas no built-in PdfMerger — illustrative call only.
        Dim merger As New PdfMerger()
        Dim files As New List(Of String) From {"document1.pdf", "document2.pdf"}
        merger.MergeFiles(files, "merged.pdf")
        Console.WriteLine("PDFs merged successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF 접근법:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim pdfs As New List(Of PdfDocument) From {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        }
        Dim merged As PdfDocument = PdfDocument.Merge(pdfs)
        merged.SaveAs("merged.pdf")
        Console.WriteLine("PDFs merged successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF는 문서를 PdfDocument 개체로 로드하여 PdfDocument.FromFile()를 사용해, 그런 다음 정적 PdfDocument.Merge() 메서드로 병합합니다. 객체 지향적 접근 방식은 병합된 문서에 대해 추가 작업을 수행한 후 저장할 수 있도록 합니다.

추가 병합 옵션을 위해 PDF 병합 문서를 탐색하십시오.

좌표 기반 드로잉 vs HTML

기존ZetPDF코드를 사용하여 좌표 기반 그래픽을 사용하는 개발자에게 있어, 마이그레이션 경로는 드로잉 명령을 HTML/CSS로 변환하는 것을 포함합니다.

ZetPDF 좌표 기반 접근 방식:

using ZetPDF;
using ZetPDF.Drawing;

var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);

var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);

graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
    new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
    new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
    new XPoint(50, 100));

document.Save("report.pdf");
using ZetPDF;
using ZetPDF.Drawing;

var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);

var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);

graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
    new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
    new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
    new XPoint(50, 100));

document.Save("report.pdf");
Imports ZetPDF
Imports ZetPDF.Drawing

Dim document As New PdfDocument()
Dim page = document.AddPage()
page.Width = XUnit.FromMillimeter(210)
page.Height = XUnit.FromMillimeter(297)

Dim graphics = XGraphics.FromPdfPage(page)
Dim titleFont As New XFont("Arial", 24, XFontStyle.Bold)
Dim bodyFont As New XFont("Arial", 12)

graphics.DrawString("Company Report", titleFont, XBrushes.Navy, New XPoint(50, 50))
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black, New XPoint(50, 80))
graphics.DrawString("Generated: " & DateTime.Now.ToString(), bodyFont, XBrushes.Gray, New XPoint(50, 100))

document.Save("report.pdf")
$vbLabelText   $csharpLabel

IronPDF HTML 접근 방식:

using IronPdf;

var html = $@"
<html>
<head>
    <style>
        body {{font-family: Arial, sans-serif; padding: 50px;}}
        h1 {{color: navy;}}
        .date {{color: gray;}}
    </style>
</head>
<body>
    <h1>Company Report</h1>
    <p>This is the introduction paragraph.</p>
    <p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
using IronPdf;

var html = $@"
<html>
<head>
    <style>
        body {{font-family: Arial, sans-serif; padding: 50px;}}
        h1 {{color: navy;}}
        .date {{color: gray;}}
    </style>
</head>
<body>
    <h1>Company Report</h1>
    <p>This is the introduction paragraph.</p>
    <p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
Imports IronPdf

Dim html As String = $"
<html>
<head>
    <style>
        body {{font-family: Arial, sans-serif; padding: 50px;}}
        h1 {{color: navy;}}
        .date {{color: gray;}}
    </style>
</head>
<body>
    <h1>Company Report</h1>
    <p>This is the introduction paragraph.</p>
    <p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

ZetPDF 접근 방식은 폰트 객체를 생성하고, 정확한 픽셀 위치를 계산하며, 그래픽 컨텍스트를 수동으로 관리해야 합니다.IronPDF접근 방식은 웹 개발자가 이미 아는 표준 HTML과 CSS를 사용하며, 폰트, 색상, 레이아웃은 익숙한 CSS 속성으로 처리됩니다.

ZetPDFAPI에서 IronPDF로의 매핑 참조

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

ZetPDF IronPDF
new PdfDocument() new ChromePdfRenderer()
document.AddPage() 자동
XGraphics.FromPdfPage(page) N/A (HTML/CSS 대신)
graphics.DrawString() HTML 텍스트 요소
graphics.DrawImage() 태그
graphics.DrawLine() CSS 테두리 /
graphics.DrawRectangle() CSS border + div
new XFont() CSS font-family
XBrushes.Black CSS color
document.Save() pdf.SaveAs()
PdfReader.Open() PdfDocument.FromFile()
(no native HTML-to-PDF) ChromePdfRenderer.RenderHtmlAsPdf()
(no native URL-to-PDF) ChromePdfRenderer.RenderUrlAsPdf()
(manual page-copy loop) PdfDocument.Merge()

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

문제 1: 좌표 기반 레이아웃

ZetPDF: 모든 것이 수동으로 위치를 조정해야 하는 정확한 X, Y 좌표가 필요합니다.

해결책: HTML/CSS흐름 레이아웃을 사용하세요. 필요할 때 절대 위치를 위해 CSS를 사용하세요:

.positioned-element {
    position: absolute;
    top: 100px;
    left: 50px;
}

문제 2: 폰트 객체 관리

ZetPDF: 각 글꼴 변형을 위한 XFont 객체 생성.

해결책: CSS 폰트 패밀리를 사용하세요—폰트는 자동으로 처리됩니다:

<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
HTML

문제 3: 색상 처리

ZetPDF: XBrushes 및 색상 객체를 사용하십시오.

해결책: 표준 CSS 색상을 사용하세요:

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }

문제 4: 수동 페이지 나누기

ZetPDF: Y 위치를 추적하고 콘텐츠가 넘칠 때 새 페이지를 수동으로 생성합니다.

해결책: IronPDF가 자동 페이지 나누기를 처리합니다. 명시적인 제어를 위해 CSS를 사용하세요:

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }

문제 5: 테이블 생성

ZetPDF: 사각형, 선, 텍스트 위치를 수동으로 그려야 합니다.

해결책: CSS 스타일을 사용한 표준 HTML 테이블 사용:

<table style="border-collapse: collapse; width: 100%;">
    <tr>
        <th style="border: 1px solid black; padding: 8px;">Header</th>
    </tr>
    <tr>
        <td style="border: 1px solid black; padding: 8px;">Data</td>
    </tr>
</table>
<table style="border-collapse: collapse; width: 100%;">
    <tr>
        <th style="border: 1px solid black; padding: 8px;">Header</th>
    </tr>
    <tr>
        <td style="border: 1px solid black; padding: 8px;">Data</td>
    </tr>
</table>
HTML

ZetPDF마이그레이션 체크리스트

이동 전 작업

ZetPDF 사용 전체를 식별하기 위해 코드베이스 감사:

grep -r "using ZetPDF" --include="*.cs" .
grep -r "XGraphics\|XFont\|XBrushes\|PdfReader" --include="*.cs" .
grep -r "using ZetPDF" --include="*.cs" .
grep -r "XGraphics\|XFont\|XBrushes\|PdfReader" --include="*.cs" .
SHELL

HTML로 변환이 필요한 좌표 기반 드로잉 코드를 문서화하세요. 폰트 및 색상 사용 패턴을 기록하세요. 레이아웃 구조를 HTML로 매핑하세요.

코드 업데이트 작업

  1. .csproj에서 수동 ZetPDF.dll 참조 제거 2.IronPDF NuGet Install-Package (dotnet add package IronPdf)
  2. 네임스페이스 임포트를 ZetPDF에서 IronPdf로 업데이트 4.ZetPDF주위의 자체 제작 HTML-to-PDF 래퍼를 ChromePdfRenderer.RenderHtmlAsPdf()으로 대체
  3. URL-to-PDF 래퍼를 ChromePdfRenderer.RenderUrlAsPdf()로 대체
  4. 수동 페이지 복사 병합 루프를 PdfDocument.Merge()으로 대체
  5. DrawString() 호출을 HTML 텍스트 요소로 변환
  6. XFont을 CSS font-family으로 변환
  7. XBrushes을 CSS 색상으로 대체
  8. 시작 시IronPDF라이선스 초기화 추가 (IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";)

마이그레이션 후 테스트

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

  • 시각적 출력을 비교하여 외관이 일치하거나 개선되었는지 확인하십시오.
  • 글꼴이 CSS 스타일링으로 기대한 대로 렌더링되는지 확인하십시오.
  • 자동 페이지 나누기와 함께 페이지가 올바르게 분리되는지 테스트하십시오.
  • 이미지가 올바르게 배치되고 표시되는지 확인하십시오.
  • PDF 병합 작업이 올바른 출력을 생성하는지 테스트하십시오.
  • 새로운 구현에서 모든 기존 기능이 작동하는지 확인하십시오.

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

ZetPDF에서 IronPDF로 전환하는 것은 여러 중요한 이점을 제공합니다:

최신 Chromium 렌더링 엔진: IronPDF는 HTML-to-PDF 변환을 위해 Chromium을 사용하여 전체 CSS3 및 ES2024 JavaScript 지원을 보장합니다. 최신 프레임워크와 반응형 디자인이 올바르게 렌더링됩니다.

HTML 기반 컨텐츠 생성: 웹 개발자는 기존의 HTML 및 CSS 기술을 활용할 수 있습니다. 좌표 기반의 그리기 API를 배우거나 글꼴 객체를 관리할 필요가 없습니다.

자동 레이아웃 및 페이지 나누기: 텍스트 줄 바꿈, 페이지 나누기 및 흐름 레이아웃이 자동으로 이루어집니다. 요소 위치의 수동 계산이 필요하지 않습니다.

간소화된 API: 일반 작업을 위한 단일 메소드 호출. PdfDocument.Merge()은 복잡한 파일 경로 처리 패턴을 대체합니다.

활발한 개발: IronPDF의 정기적인 릴리스 주기는 라이브러리를 최신 .NET 버전과 신속히 동기화 시킵니다, 반면 ZetPDF는 2021년 이후 공개 릴리스 활동이 없습니다.

포괄적인 기능 세트: ZetPDF가 문서화한 표면에 부재한 내장된 워터마킹, 디지털 서명, PDF/A 준수 및 고급 PDF 조작 기능.

참고해 주세요PDFSharp와 ZetPDF는 해당 소유자의 등록 상표입니다. 이 사이트는ZetPDF또는 empira Software GmbH와 관련이 없으며, 지지받거나 후원받지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

Curtis Chau
기술 문서 작성자

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

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

아이언 서포트 팀

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