C#에서 MigraDoc에서 IronPDF로 마이그레이션하는 방법
MigraDoc에서 IronPDF로 마이그레이션하면 .NET PDF 워크플로우가 수작업으로 요소를 하나씩 구축해야 하는 장황한 프로그래밍 문서 모델에서 기존 웹 개발 기술을 활용하는 최신 HTML/CSS기반 접근 방식으로 전환됩니다. 이 가이드는 전문 .NET 개발자를 위해 MigraDoc의 독점적 문서 객체 모델의 가파른 학습 곡선을 제거하는 포괄적이며 단계별 마이그레이션 경로를 제공합니다.
왜 MigraDoc에서 IronPDF로 마이그레이션해야 하는가?
MigraDoc의 문제점
MigraDoc는 프로그래밍적 PDF 생성에 강력하지만, 현대 개발 워크플로우에 영향을 미치는 기본적인 제약이 있습니다:
-
HTML 지원 없음: MigraDoc는 HTML을 직접 지원하지 않습니다. 문서 요소를
Document,Section,Paragraph,Table객체를 사용하여 수동으로 구성해야 하며, 기존 HTML/CSS디자인을 사용할 수 없습니다. -
독점적 문서 모델: MigraDoc는
AddSection(),AddParagraph(),AddTable(),AddRow(),AddCell()같은 개념을 포함한 독특한 문서 모델을 학습해야 합니다. 이 가파른 학습 곡선은 웹 개발 배경이 있는 개발자에게 특히 어렵습니다. -
제한적인 스타일링 옵션: MigraDoc는 강력한 문서 구조 관리 기능을 제공하지만, 그 스타일링 기능은 현대 웹 도구에 비해 부족합니다.
Format.Font.Size,Format.Font.Bold,Format.Alignment와 같은 속성은 전체 CSS3에 비해 제한적입니다. -
장황한 코드: 간단한 레이아웃을 만들기 위해서도 수십 줄의 코드가 필요합니다. 기본 테이블에 머리글을 추가하려면 15-20 줄의MigraDoc코드가 필요할 수 있습니다.
-
JavaScript 지원 없음: MigraDoc는 동적 콘텐츠를 렌더링하거나 JavaScript를 실행할 수 없어 현대적인 차트와 상호작용 요소의 옵션을 제한합니다.
- 기본 차트: MigraDoc의 차트 기능은 Chart.js나 D3와 같은 현대적인JavaScript차트 라이브러리에 비해 제한적입니다.
MigraDocvsIronPDF비교
| 기능 | MigraDoc | IronPDF |
|---|---|---|
| 콘텐츠 정의 | 프로그래밍 방식 (문서/섹션/단락) | HTML/CSS |
| 학습 곡선 | 어려움 (독점 DOM) | 쉬움 (웹 기술) |
| 스타일링 | 제한된 속성 | 전체 CSS3 |
| JavaScript | 없음 | 전체 Chromium 실행 |
| 표 | 수동 열/행 정의 | HTML <table>과 CSS |
| 차트 | 기본적인MigraDoc차트 | 모든JavaScript차트 라이브러리 |
| 이미지 | 수동 크기 조정/위치 설정 | 표준 HTML <img> |
| 반응형 레이아웃 | 지원되지 않음 | 플렉스박스, 그리드 |
| 라이선스 | 오픈 소스 (MIT) | 상업적 |
.NET 10 및 C# 14를 2025년 및 2026년까지 채택할 계획인 팀에게 IronPDF는 독점 문서 모델을 배우는 대신 친숙한 HTML/CSS기술을 사용할 수 있는 미래 대비 기반을 제공합니다.
마이그레이션 복잡성 평가
기능별 예상 노력
| 기능 | 마이그레이션 복잡성 |
|---|---|
| 간단한 텍스트 | 매우 낮음 |
| 표 | 낮음 |
| 헤더/푸터 | 낮음 |
| 스타일 | 중간 |
| 이미지 | 낮음 |
| 차트 | 중간 |
패러다임 전환
이MigraDoc마이그레이션의 기본적인 변화는 프로그래밍 문서 구축에서 HTML 우선 렌더링으로 전환하는 것입니다:
MigraDoc: 문서 → AddSection() → AddParagraph() → PdfDocumentRenderer → Save()
IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(html) → SaveAs()
이 패러다임 변화는 CSS를 통해 무제한 스타일링 기능을 제공하면서 코드 복잡성을 획기적으로 감소시킵니다.
시작하기 전에
필수 조건
- .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
- IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요
NuGet 패키지 변경 사항
# RemoveMigraDocpackages
dotnet remove package PdfSharp-MigraDoc
dotnet remove package PdfSharp-MigraDoc-GDI
dotnet remove package PDFsharp.MigraDoc.Standard
# Install IronPDF
dotnet add package IronPdf
# RemoveMigraDocpackages
dotnet remove package PdfSharp-MigraDoc
dotnet remove package PdfSharp-MigraDoc-GDI
dotnet remove package PDFsharp.MigraDoc.Standard
# Install IronPDF
dotnet add package IronPdf
라이선스 구성
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
MigraDoc사용 식별하기
# Find allMigraDocreferences
grep -r "using MigraDoc\|PdfDocumentRenderer\|AddSection\|AddParagraph" --include="*.cs" .
grep -r "AddTable\|AddRow\|AddColumn\|AddCell\|AddImage" --include="*.cs" .
# Find allMigraDocreferences
grep -r "using MigraDoc\|PdfDocumentRenderer\|AddSection\|AddParagraph" --include="*.cs" .
grep -r "AddTable\|AddRow\|AddColumn\|AddCell\|AddImage" --include="*.cs" .
완전한 API 참조
클래스 매핑
| MigraDoc 클래스 | IronPDF 동등 |
|---|---|
Document |
ChromePdfRenderer |
Section |
HTML <body> 또는 <div> |
Paragraph |
HTML <p>, <h1> 등 |
FormattedText |
HTML <span>, <strong> 등 |
Table |
HTML <table> |
Row |
HTML <tr> |
Column |
HTML <col> 또는 CSS |
Cell |
HTML <td>, <th> |
PdfDocumentRenderer |
ChromePdfRenderer |
메서드 매핑
| MigraDoc 메서드 | IronPDF 동등 |
|---|---|
document.AddSection() |
HTML 구조 |
section.AddParagraph(text) |
<p>text</p> |
section.AddTable() |
<table> |
table.AddColumn(width) |
CSS width 속성 |
table.AddRow() |
<tr> |
row.Cells[n].AddParagraph() |
<td>content</td> |
renderer.RenderDocument() |
RenderHtmlAsPdf(html) |
pdfDocument.Save(path) |
pdf.SaveAs(path) |
플레이스홀더 매핑 (헤더/푸터)
| MigraDoc 메서드 | IronPDF 플레이스홀더 |
|---|---|
AddPageField() |
{page} |
AddNumPagesField() |
{total-pages} |
AddDateField() |
{date} |
코드 마이그레이션 예제
예제 1: 기본 HTML을 PDF로 (근본적인 차이점)
이전 (MigraDoc):
// NuGet: Install-Package PdfSharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using System.Diagnostics;
class Program
{
static void Main()
{
//MigraDocdoesn't support HTML directly
// Must manually create document structure
Document document = new Document();
Section section = document.AddSection();
Paragraph paragraph = section.AddParagraph();
paragraph.AddFormattedText("Hello World", TextFormat.Bold);
paragraph.Format.Font.Size = 16;
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");
}
}
// NuGet: Install-Package PdfSharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using System.Diagnostics;
class Program
{
static void Main()
{
//MigraDocdoesn't support HTML directly
// Must manually create document structure
Document document = new Document();
Section section = document.AddSection();
Paragraph paragraph = section.AddParagraph();
paragraph.AddFormattedText("Hello World", TextFormat.Bold);
paragraph.Format.Font.Size = 16;
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");
}
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.Rendering
Imports System.Diagnostics
Class Program
Shared Sub Main()
' MigraDoc doesn't support HTML directly
' Must manually create document structure
Dim document As New Document()
Dim section As Section = document.AddSection()
Dim paragraph As Paragraph = section.AddParagraph()
paragraph.AddFormattedText("Hello World", TextFormat.Bold)
paragraph.Format.Font.Size = 16
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("output.pdf")
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
End Sub
End Class
이 예제는 MigraDoc과IronPDF사이의 근본적인 차이점을 보여줍니다. MigraDoc는 Document를 생성하고, Section를 추가하고, Paragraph를 추가하고, AddFormattedText()와 TextFormat.Bold를 사용하며, Format.Font.Size를 설정하고, PdfDocumentRenderer를 생성하고, 문서를 할당하고, RenderDocument()를 호출한 다음 최종적으로 저장해야 합니다. 이는 여러 객체로 10줄 이상의 코드가 필요합니다.
IronPDF는 같은 결과를 3줄로 달성합니다: 렌더러 생성, HTML 렌더링, 저장. HTML <h1> 태그는 자연스럽게 굵고 큰 제목 스타일을 제공합니다. HTML to PDF 문서에서 추가 렌더링 옵션을 참조하십시오.
예제 2: 테이블 생성
이전 (MigraDoc):
// NuGet: Install-Package PdfSharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.Rendering;
class Program
{
static void Main()
{
Document document = new Document();
Section section = document.AddSection();
Table table = section.AddTable();
table.Borders.Width = 0.75;
Column column1 = table.AddColumn("3cm");
Column column2 = table.AddColumn("3cm");
Row row1 = table.AddRow();
row1.Cells[0].AddParagraph("Name");
row1.Cells[1].AddParagraph("Age");
Row row2 = table.AddRow();
row2.Cells[0].AddParagraph("John");
row2.Cells[1].AddParagraph("30");
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("table.pdf");
}
}
// NuGet: Install-Package PdfSharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.Rendering;
class Program
{
static void Main()
{
Document document = new Document();
Section section = document.AddSection();
Table table = section.AddTable();
table.Borders.Width = 0.75;
Column column1 = table.AddColumn("3cm");
Column column2 = table.AddColumn("3cm");
Row row1 = table.AddRow();
row1.Cells[0].AddParagraph("Name");
row1.Cells[1].AddParagraph("Age");
Row row2 = table.AddRow();
row2.Cells[0].AddParagraph("John");
row2.Cells[1].AddParagraph("30");
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("table.pdf");
}
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.DocumentObjectModel.Tables
Imports MigraDoc.Rendering
Class Program
Shared Sub Main()
Dim document As New Document()
Dim section As Section = document.AddSection()
Dim table As Table = section.AddTable()
table.Borders.Width = 0.75
Dim column1 As Column = table.AddColumn("3cm")
Dim column2 As Column = table.AddColumn("3cm")
Dim row1 As Row = table.AddRow()
row1.Cells(0).AddParagraph("Name")
row1.Cells(1).AddParagraph("Age")
Dim row2 As Row = table.AddRow()
row2.Cells(0).AddParagraph("John")
row2.Cells(1).AddParagraph("30")
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("table.pdf")
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlTable = @"
<table border='1'>
<tr><th>Name</th><th>Age</th></tr>
<tr><td>John</td><td>30</td></tr>
</table>";
var pdf = renderer.RenderHtmlAsPdf(htmlTable);
pdf.SaveAs("table.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlTable = @"
<table border='1'>
<tr><th>Name</th><th>Age</th></tr>
<tr><td>John</td><td>30</td></tr>
</table>";
var pdf = renderer.RenderHtmlAsPdf(htmlTable);
pdf.SaveAs("table.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlTable As String = "
<table border='1'>
<tr><th>Name</th><th>Age</th></tr>
<tr><td>John</td><td>30</td></tr>
</table>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlTable)
pdf.SaveAs("table.pdf")
End Sub
End Class
MigraDoc 테이블 생성을 위해서는 Table, Column, Row, Cell 계층 구조를 이해해야 합니다. AddColumn()으로 명시적으로 열을 추가하고, AddRow()으로 행을 생성하고, Cells[n]을 통해 인덱스로 셀에 접근하며, AddParagraph()으로 내용을 추가해야 합니다. 테두리는 table.Borders.Width을 통해 설정됩니다.
IronPDF는 모든 웹 개발자가 아는 표준 HTML 테이블 구문을 사용합니다. border='1' 속성은 테두리를 제공하며, <th> 요소는 헤더 셀을 생성하고 <td> 요소는 데이터 셀을 생성합니다. CSS는 더 발전된 스타일링을 위해 추가될 수 있으며, 지브라 스트라이핑, 호버 효과 또는 반응형 레이아웃 등을 포함할 수 있습니다. PDF에서 테이블 생성에 대해 자세히 알아보세요.
예제 3: 페이지 번호가 있는 헤더와 푸터
이전 (MigraDoc):
// NuGet: Install-Package PdfSharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
class Program
{
static void Main()
{
Document document = new Document();
Section section = document.AddSection();
// Add header
Paragraph headerPara = section.Headers.Primary.AddParagraph();
headerPara.AddText("Document Header");
headerPara.Format.Font.Size = 12;
headerPara.Format.Alignment = ParagraphAlignment.Center;
// Add footer
Paragraph footerPara = section.Footers.Primary.AddParagraph();
footerPara.AddText("Page ");
footerPara.AddPageField();
footerPara.Format.Alignment = ParagraphAlignment.Center;
// Add content
section.AddParagraph("Main content of the document");
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("header-footer.pdf");
}
}
// NuGet: Install-Package PdfSharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
class Program
{
static void Main()
{
Document document = new Document();
Section section = document.AddSection();
// Add header
Paragraph headerPara = section.Headers.Primary.AddParagraph();
headerPara.AddText("Document Header");
headerPara.Format.Font.Size = 12;
headerPara.Format.Alignment = ParagraphAlignment.Center;
// Add footer
Paragraph footerPara = section.Footers.Primary.AddParagraph();
footerPara.AddText("Page ");
footerPara.AddPageField();
footerPara.Format.Alignment = ParagraphAlignment.Center;
// Add content
section.AddParagraph("Main content of the document");
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("header-footer.pdf");
}
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.Rendering
Class Program
Shared Sub Main()
Dim document As New Document()
Dim section As Section = document.AddSection()
' Add header
Dim headerPara As Paragraph = section.Headers.Primary.AddParagraph()
headerPara.AddText("Document Header")
headerPara.Format.Font.Size = 12
headerPara.Format.Alignment = ParagraphAlignment.Center
' Add footer
Dim footerPara As Paragraph = section.Footers.Primary.AddParagraph()
footerPara.AddText("Page ")
footerPara.AddPageField()
footerPara.Format.Alignment = ParagraphAlignment.Center
' Add content
section.AddParagraph("Main content of the document")
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("header-footer.pdf")
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>");
pdf.AddTextHeader("Document Header");
pdf.AddTextFooter("Page {page}");
pdf.SaveAs("header-footer.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>");
pdf.AddTextHeader("Document Header");
pdf.AddTextFooter("Page {page}");
pdf.SaveAs("header-footer.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>")
pdf.AddTextHeader("Document Header")
pdf.AddTextFooter("Page {page}")
pdf.SaveAs("header-footer.pdf")
End Sub
End Class
MigraDoc 헤더 및 푸터는 section.Headers.Primary 및 section.Footers.Primary에 접근하여 단락을 생성하고, AddText()을 사용하여 텍스트를 추가하며, AddPageField()과 같은 특별한 방법을 사용하여 동적 콘텐츠를 만들어야 합니다. 정렬은 Format.Alignment을 설정해야 합니다.
IronPDF는 PdfDocument 객체에 대한 간단한 AddTextHeader() 및 AddTextFooter() 메서드를 제공합니다. {page} 자리표시자는 자동으로 현재 페이지 번호를 삽입합니다. 더 복잡한 헤더의 경우 전체 HTML/CSS지원과 함께 HtmlHeaderFooter을 사용할 수 있습니다. 고급 옵션에 대해서는 헤더와 푸터 문서를 참조하세요.
중요한 마이그레이션 노트
페이지 번호 플레이스홀더 문법
헤더와 푸터에 가장 중요한 변화는 플레이스홀더 문법입니다:
//MigraDocfield methods:
footerPara.AddPageField(); // Current page
footerPara.AddNumPagesField(); // Total pages
//IronPDFplaceholders:
"Page {page} of {total-pages}"
//MigraDocfield methods:
footerPara.AddPageField(); // Current page
footerPara.AddNumPagesField(); // Total pages
//IronPDFplaceholders:
"Page {page} of {total-pages}"
' MigraDoc field methods:
footerPara.AddPageField() ' Current page
footerPara.AddNumPagesField() ' Total pages
' IronPDF placeholders:
"Page {page} of {total-pages}"
형식 속성을 CSS로
MigraDoc의 Format 속성은 CSS에 매핑됩니다:
// MigraDoc:
paragraph.Format.Font.Size = 16;
paragraph.Format.Font.Bold = true;
paragraph.Format.Alignment = ParagraphAlignment.Center;
//IronPDF(CSS):
<p style="font-size: 16pt; font-weight: bold; text-align: center;">
// MigraDoc:
paragraph.Format.Font.Size = 16;
paragraph.Format.Font.Bold = true;
paragraph.Format.Alignment = ParagraphAlignment.Center;
//IronPDF(CSS):
<p style="font-size: 16pt; font-weight: bold; text-align: center;">
' MigraDoc:
paragraph.Format.Font.Size = 16
paragraph.Format.Font.Bold = True
paragraph.Format.Alignment = ParagraphAlignment.Center
' IronPDF(CSS):
'<p style="font-size: 16pt; font-weight: bold; text-align: center;">
단위 변환
MigraDoc은 다양한 단위를 사용합니다;IronPDF여백은 밀리미터 단위를 사용합니다:
- "1cm" = 10mm
- "1in" = 25.4mm
- "72pt" = 25.4mm
// MigraDoc:
table.AddColumn("3cm");
//IronPDF(CSS):
<th style="width: 3cm;">
// MigraDoc:
table.AddColumn("3cm");
//IronPDF(CSS):
<th style="width: 3cm;">
' MigraDoc:
table.AddColumn("3cm")
' IronPDF(CSS):
<th style="width: 3cm;">
렌더링 패턴 변경
전체 렌더링 패턴이 변경됩니다:
//MigraDocpattern (DELETE):
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");
//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
//MigraDocpattern (DELETE):
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");
//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
' MigraDocpattern (DELETE):
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("output.pdf")
' IronPDFpattern:
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
문제 해결
문제 1: 문서/섹션을 찾을 수 없음
문제: IronPDF에는 Document 및 Section 클래스가 존재하지 않습니다.
해결 방법: HTML 구조로 교체하세요:
// MigraDoc
Document document = new Document();
Section section = document.AddSection();
// IronPDF
string html = "<html><body>...</body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
// MigraDoc
Document document = new Document();
Section section = document.AddSection();
// IronPDF
string html = "<html><body>...</body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
Imports MigraDoc.DocumentObjectModel
Imports IronPdf
Dim document As New Document()
Dim section As Section = document.AddSection()
Dim html As String = "<html><body>...</body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
문제 2: AddParagraph를 찾을 수 없음
문제: AddParagraph() 메서드는 존재하지 않습니다.
해결 방법: HTML 요소를 사용하세요:
// MigraDoc
section.AddParagraph("Hello World");
// IronPDF
"<p>Hello World</p>"
// MigraDoc
section.AddParagraph("Hello World");
// IronPDF
"<p>Hello World</p>"
문제 3: PdfDocumentRenderer를 찾을 수 없음
문제: PdfDocumentRenderer 클래스는 존재하지 않습니다.
해결책: ChromePdfRenderer을 사용하세요:
// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
// IronPDF
var renderer = new ChromePdfRenderer();
// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
// IronPDF
var renderer = new ChromePdfRenderer();
' MigraDoc
Dim pdfRenderer As New PdfDocumentRenderer()
' IronPDF
Dim renderer As New ChromePdfRenderer()
문제 4: AddPageField가 작동하지 않음
문제: AddPageField() 메서드는 존재하지 않습니다.
해결 방법:IronPDF플레이스홀더 문법을 사용하세요:
// MigraDoc
footerPara.AddPageField();
// IronPDF
pdf.AddTextFooter("Page {page}");
// MigraDoc
footerPara.AddPageField();
// IronPDF
pdf.AddTextFooter("Page {page}");
' MigraDoc
footerPara.AddPageField()
' IronPDF
pdf.AddTextFooter("Page {page}")
마이그레이션 체크리스트
사전 마이그레이션
- 모든MigraDoc
using문을 식별하세요 - 문서 테이블 구조(열, 행, 스타일링)를 문서화하세요
- 헤더/푸터 콘텐츠 및 페이지 필드 사용을 기록하세요
document.Styles로 정의된 사용자 스타일 목록을 생성하세요 -IronPDF라이센스 키를 받으세요
패키지 변경 사항
PdfSharp-MigraDoc패키지를 제거하세요PdfSharp-MigraDoc-GDI패키지를 제거하세요IronPdfNuGet Install-Package:dotnet add package IronPdf- 네임스페이스 가져오기 업데이트
코드 변경 사항
- 시작 시 라이선스 키 구성 추가
Section을 HTML 구조로 교체하세요AddParagraph()을 HTML<p>요소로 변환하세요Cell을HTML<table>구조로 변환하세요AddPageField()을{page}자리표시자로 교체하세요AddNumPagesField()을{total-pages}자리표시자로 교체하세요Format속성을 CSS 스타일로 변환하세요PdfDocumentRenderer을ChromePdfRenderer로 교체하세요
테스트
- 기존과 새로운 PDF 간의 시각적 출력을 비교하세요
- 페이지 나누기가 올바르게 작동하는지 확인하세요
- 헤더/푸터 렌더링 및 페이지 번호를 확인하세요
- 테이블 형식 및 테두리를 검증하세요
- 복잡한 다중 페이지 문서로 테스트하세요
마이그레이션 이후
-MigraDoc관련 문서 제거
- 팀 교육 자료 업데이트
- 새 HTML 템플릿 위치 문서화

