C#에서 iText에서 IronPDF로 마이그레이션하는 방법
IronPDF로 마이그레이션은 .NET PDF 워크플로우를 프로그램적 API에서 Paragraph, Table, Cell 객체의 수동 생성이 필요한 방식에서 전체 CSS3 및JavaScript지원을 갖춘 현대적인 HTML 우선 접근 방식으로 변환합니다. 이 가이드는 AGPL 라이선스 문제를 제거하고 전문 .NET 개발자들을 위한 별도의 pdfHTML 애드온의 필요성을 없애는 포괄적이고 단계별 이주 경로를 제공합니다.
iText에서 IronPDF로의 이주 이유
AGPL 라이선스 함정
iText는 많은 개발 팀이 너무 늦게 발견하는 것으로, 상용 애플리케이션에는 심각한 법적 및 비즈니스 위험을 제공합니다:
-
AGPL 바이럴 라이선스: 웹 애플리케이션에서 iText를 사용하면 AGPL은 전체 애플리케이션의 오픈 소스를 요구합니다—단지 PDF 코드가 아니라, 전체 코드베이스가 필요합니다. 이는 대부분의 상용 소프트웨어에 시작하기 어려운 조건입니다.
-
영구 라이선스 없음: iText는 영구 라이선싱을 제거하여 총 소유 비용을 증가시키는 연례 구독 갱신을 강요합니다.
-
pdfHTML 애드온 비용:HTML-to-PDF기능은 기본 라이선스 위에 추가 비용으로 별도로 판매되는 pdfHTML 애드온이 필요합니다.
-
복잡한 라이선스 감사: Enterprise 배포는 프로젝트를 지연시키고 법적 노출을 만들 수 있는 라이선스 복잡성과 감사 위험에 직면합니다.
-
프로그램 전용 API: iText는
Paragraph,Table,Cell객체를 사용한 수동 저수준 PDF 생성이 필요하며, 이는 복잡한 레이아웃에 대해 번거롭고 오류가 발생하기 쉽습니다. - 제한된 현대 웹 렌더링: pdfHTML을 사용하더라도 복잡한 CSS 및JavaScript내용은 상당한 추가 노력을 필요로 합니다.
iText vsIronPDF비교
| 기능 | iText 7 / iTextSharp | IronPDF |
|---|---|---|
| 라이선스 | AGPL (바이러스성) 또는 고가의 구독 | 상업적, 영구적 옵션 |
| HTML-to-PDF | 별도의 pdfHTML 애드온 | 내장 Chromium 렌더러 |
| CSS 지원 | 기본 CSS | 완전한 CSS3, Flexbox, Grid |
| JavaScript | 없음 | 전체 실행 |
| API 패러다임 | 프로그래매틱 (단락, 표, 셀) | HTML 우선, CSS 포함 |
| 학습 곡선 | 가파름 (PDF 좌표계) | 웹 개발자 친화적 |
| 오픈 소스 위험 | 웹 앱을 오픈 소스 해야 함 | 바이러스성 요구 사항 없음 |
| 가격 모델 | 구독만 가능 | 영구적 또는 구독 |
2025년 및 2026년을 통해 .NET 10 및 C# 14 채택을 계획하는 팀에게 IronPDF는 팀이 이미 보유한 웹 개발 기술을 활용하는 HTML 우선 접근 방식으로 미래에 대비할 수 있는 기반을 제공합니다.
마이그레이션 복잡성 평가
기능별 예상 노력
| 기능 | 마이그레이션 복잡성 |
|---|---|
| HTML to PDF | 매우 낮음 |
| PDF 병합 | 낮음 |
| 텍스트 및 이미지 | 낮음 |
| 표 | 중간 |
| 헤더/푸터 | 중간 |
| 보안/암호화 | 낮음 |
패러다임 전환
이 iText 마이그레이션의 근본적인 변화는 프로그래매틱 PDF 구성에서 HTML 우선 렌더링으로 입니다:
iText: PdfWriter → PdfDocument → Document → Add(Paragraph) → Add(Table)
IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(htmlString) → SaveAs()
이 패러다임의 전환은 해방적입니다: iText의 객체 모델을 배우는 대신, 웹 개발자가 이미 보유한 HTML 및 CSS 기술을 사용합니다.
시작하기 전에
필수 조건
- .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
- IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요
NuGet 패키지 변경 사항
# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp
# Install IronPDF
dotnet add package IronPdf
# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp
# 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"
iText 사용 식별
# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
완전한 API 참조
클래스 매핑
| iText 7 클래스 | iTextSharp 클래스 | IronPDF 동등 |
|---|---|---|
PdfWriter |
PdfWriter |
ChromePdfRenderer |
PdfDocument |
Document |
PdfDocument |
Document |
Document |
ChromePdfRenderer.RenderHtmlAsPdf() |
Paragraph |
Paragraph |
HTML <p>, <h1>, 등을 사용 |
Table |
PdfPTable |
HTML <table> |
Cell |
PdfPCell |
HTML <td>, <th> |
Image |
Image |
HTML <img> |
PdfReader |
PdfReader |
PdfDocument.FromFile() |
PdfMerger |
해당 없음 | PdfDocument.Merge() |
네임스페이스 매핑
| iText 7 네임스페이스 | IronPDF 동등 |
|---|---|
iText.Kernel.Pdf |
IronPdf |
iText.Layout |
IronPdf |
iText.Layout.Element |
HTML 요소 사용 |
iText.Html2Pdf |
IronPdf (내장) |
iText.IO.Image |
HTML <img> 를 사용 |
iText.Kernel.Utils |
IronPdf |
코드 마이그레이션 예제
예제 1: HTML에서 PDF로 변환
이전 (iText 7):
// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;
class Program
{
static void Main()
{
string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
string outputPath = "output.pdf";
using (FileStream fs = new FileStream(outputPath, FileMode.Create))
{
HtmlConverter.ConvertToPdf(html, fs);
}
}
}
// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;
class Program
{
static void Main()
{
string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
string outputPath = "output.pdf";
using (FileStream fs = new FileStream(outputPath, FileMode.Create))
{
HtmlConverter.ConvertToPdf(html, fs);
}
}
}
Imports iText.Html2pdf
Imports System.IO
Class Program
Shared Sub Main()
Dim html As String = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
Dim outputPath As String = "output.pdf"
Using fs As FileStream = New FileStream(outputPath, FileMode.Create)
HtmlConverter.ConvertToPdf(html, fs)
End Using
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
iText 접근 방식은 별도의 iText.Html2pdf 패키지(pdfHTML 애드온, 별도 판매)를 필요로 하며, FileStream을 생성하고 모든 것을 using 문장으로 랩핑하여 적절한 처분을 보장합니다. HtmlConverter.ConvertToPdf() 메서드는 직접 스트림에 씁니다.
IronPDF의 접근 방식은 더 깔끔합니다: ChromePdfRenderer을 생성하고, HTML 문자열과 함께 RenderHtmlAsPdf()을 호출하며, 결과 PdfDocument에서 SaveAs()을 호출합니다. 별도의 패키지나 스트림 관리가 필요 없으며, Chromium 렌더링 엔진은 우수한 CSS3 및JavaScript지원을 제공합니다. HTML to PDF 문서에서 추가 렌더링 옵션을 참조하십시오.
예제 2: 여러 PDF 병합
이전 (iText 7):
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;
class Program
{
static void Main()
{
string outputPath = "merged.pdf";
string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdfDoc = new PdfDocument(writer))
{
PdfMerger merger = new PdfMerger(pdfDoc);
foreach (string file in inputFiles)
{
using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
{
merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
}
}
}
}
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;
class Program
{
static void Main()
{
string outputPath = "merged.pdf";
string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdfDoc = new PdfDocument(writer))
{
PdfMerger merger = new PdfMerger(pdfDoc);
foreach (string file in inputFiles)
{
using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
{
merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
}
}
}
}
}
Imports iText.Kernel.Pdf
Imports iText.Kernel.Utils
Imports System.IO
Class Program
Shared Sub Main()
Dim outputPath As String = "merged.pdf"
Dim inputFiles As String() = {"document1.pdf", "document2.pdf", "document3.pdf"}
Using writer As New PdfWriter(outputPath)
Using pdfDoc As New PdfDocument(writer)
Dim merger As New PdfMerger(pdfDoc)
For Each file As String In inputFiles
Using sourcePdf As New PdfDocument(New PdfReader(file))
merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages())
End Using
Next
End Using
End Using
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfDocuments = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf"),
PdfDocument.FromFile("document3.pdf")
};
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfDocuments = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf"),
PdfDocument.FromFile("document3.pdf")
};
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim pdfDocuments As New List(Of PdfDocument) From {
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf"),
PdfDocument.FromFile("document3.pdf")
}
Dim merged = PdfDocument.Merge(pdfDocuments)
merged.SaveAs("merged.pdf")
End Sub
End Class
iText 병합 작업은 상당한 보일러플레이트가 필요합니다: 출력을 위해 PdfWriter을 생성하고 PdfDocument으로 래핑하며, PdfMerger을 생성한 후에 각 PdfDocument 및 PdfReader에 대해 중첩된 using 문장으로 소스 파일을 반복합니다. 또한 페이지 범위를 merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages())로 지정해야 합니다.
IronPDF는 이 과정을 세 가지 단계로 줄입니다: 문서를 PdfDocument.FromFile()로 로드하고, 목록과 함께 정적 PdfDocument.Merge() 메서드를 호출하며, 저장합니다. 전체 병합 작업이 읽기 쉽고 유지 관리 가능합니다. PDF 병합 및 분할에 대해 더 알아보세요.
예제 3: 텍스트 및 이미지를 포함한 PDF 생성
이전 (iText 7):
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;
class Program
{
static void Main()
{
string outputPath = "document.pdf";
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdf = new PdfDocument(writer))
using (Document document = new Document(pdf))
{
document.Add(new Paragraph("Sample PDF Document"));
document.Add(new Paragraph("This document contains text and an image."));
Image img = new Image(ImageDataFactory.Create("image.jpg"));
img.SetWidth(200);
document.Add(img);
}
}
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;
class Program
{
static void Main()
{
string outputPath = "document.pdf";
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdf = new PdfDocument(writer))
using (Document document = new Document(pdf))
{
document.Add(new Paragraph("Sample PDF Document"));
document.Add(new Paragraph("This document contains text and an image."));
Image img = new Image(ImageDataFactory.Create("image.jpg"));
img.SetWidth(200);
document.Add(img);
}
}
}
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.IO.Image
Class Program
Shared Sub Main()
Dim outputPath As String = "document.pdf"
Using writer As New PdfWriter(outputPath),
pdf As New PdfDocument(writer),
document As New Document(pdf)
document.Add(New Paragraph("Sample PDF Document"))
document.Add(New Paragraph("This document contains text and an image."))
Dim img As New Image(ImageDataFactory.Create("image.jpg"))
img.SetWidth(200)
document.Add(img)
End Using
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Sample PDF Document</h1>
<p>This document contains text and an image.</p>
<img src='image.jpg' width='200' />";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Sample PDF Document</h1>
<p>This document contains text and an image.</p>
<img src='image.jpg' width='200' />";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "
<h1>Sample PDF Document</h1>
<p>This document contains text and an image.</p>
<img src='image.jpg' width='200' />"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End Class
이 예제는 패러다임 변화를 가장 명확하게 보여줍니다. iText는 다음이 필요합니다:
- 삼중 중첩
using문장 (PdfWriter,PdfDocument,Document) - 각 텍스트 요소에 대해
Paragraph객체를new Paragraph()와 함께 생성 - 이미지를 로드하기 위해
ImageDataFactory.Create()사용 Image객체를 생성하고SetWidth()을 개별적으로 호출- 각 요소에 대해
document.Add()호출
IronPDF는 표준 HTML을 사용합니다: 표제에는 <h1>, 문단에는 <p>, 그리고 이미지에는 width 속성과 함께 <img>. 웹 개발자는 즉시 기존 기술을 활용할 수 있으며, 디자이너는 이미 알고 있는 CSS로 문서를 디자인할 수 있습니다.
중요한 마이그레이션 노트
패러다임 전환: 프로그래밍 방식에서 HTML 우선으로
이 iText 마이그레이션에서 가장 큰 변화는 개념적입니다. iText는 프로그래밍 방식으로 PDF를 빌드합니다:
// iText approach
document.Add(new Paragraph("Title")
.SetTextAlignment(TextAlignment.CENTER)
.SetFontSize(24)
.SetBold());
var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
// iText approach
document.Add(new Paragraph("Title")
.SetTextAlignment(TextAlignment.CENTER)
.SetFontSize(24)
.SetBold());
var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
' iText approach
document.Add(New Paragraph("Title") _
.SetTextAlignment(TextAlignment.CENTER) _
.SetFontSize(24) _
.SetBold())
Dim table = New Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth()
table.AddHeaderCell(New Cell().Add(New Paragraph("ID")))
table.AddHeaderCell(New Cell().Add(New Paragraph("Name")))
' ... many more lines
IronPDF는 HTML과 CSS를 사용합니다:
//IronPDFapproach
string html = @"
<style>
h1 { text-align: center; font-size: 24px; font-weight: bold; }
table { width: 100%; border-collapse: collapse; }
th { background-color: #4CAF50; color: white; padding: 8px; }
</style>
<h1>Title</h1>
<table>
<tr><th>ID</th><th>Name</th></tr>
</table>";
var pdf = renderer.RenderHtmlAsPdf(html);
//IronPDFapproach
string html = @"
<style>
h1 { text-align: center; font-size: 24px; font-weight: bold; }
table { width: 100%; border-collapse: collapse; }
th { background-color: #4CAF50; color: white; padding: 8px; }
</style>
<h1>Title</h1>
<table>
<tr><th>ID</th><th>Name</th></tr>
</table>";
var pdf = renderer.RenderHtmlAsPdf(html);
'IronPDFapproach
Dim html As String = "
<style>
h1 { text-align: center; font-size: 24px; font-weight: bold; }
table { width: 100%; border-collapse: collapse; }
th { background-color: #4CAF50; color: white; padding: 8px; }
</style>
<h1>Title</h1>
<table>
<tr><th>ID</th><th>Name</th></tr>
</table>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
AGPL 라이선스 제거됨
iText의 AGPL 라이선스는 전체 웹 애플리케이션을 공개 소스로 만들거나 비싼 상용 라이선스를 구매하도록 요구합니다. IronPDF의 상용 라이선스는 독점 소프트웨어에 바이럴 라이선스 요구 사항 없이 배포할 수 있게 합니다.
pdfHTML 추가 기능이 필요하지 않음
iText는HTML-to-PDF변환을 위해 별도의 pdfHTML 추가 기능이 필요하며, 이는 추가 비용으로 판매됩니다. IronPDF는 기본 패키지에 완전한 Chromium 기반 HTML 렌더링을 포함하고 있습니다.
메서드 교체 패턴
| iText 패턴 | IronPDF 교체 |
|---|---|
SetTextAlignment(TextAlignment.CENTER) |
CSS text-align: center |
SetFontSize(24) |
CSS font-size: 24px |
SetBold() |
CSS font-weight: bold |
new Table(3) |
HTML <table> |
AddHeaderCell(new Cell().Add(new Paragraph())) |
HTML <th> |
AddCell(new Cell().Add(new Paragraph())) |
HTML <td> |
문제 해결
문제 1: PdfWriter/문서 패턴
문제: 코드는 PdfWriter → PdfDocument → Document 중첩 패턴을 사용합니다.
해결책: ChromePdfRenderer로 교체:
// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))
// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))
// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(outputPath)
문제 2: HtmlConverter를 찾을 수 없음
문제: 코드는 iText.Html2pdf.HtmlConverter을 사용하며 이는 pdfHTML 애드온이 필요합니다.
해결책: IronPDF의 내장 HTML 렌더링을 사용하세요:
// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);
//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);
//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
' iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream)
' IronPDF(built-in)
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(outputPath)
문제 3: PdfMerger 복잡성
문제: iText의 PdfMerger는 중첩된 리더 및 페이지 범위 지정이 필요합니다.
해결책: IronPDF의 정적 병합 메서드를 사용하세요:
// iText merger pattern (delete this)
// using (PdfDocument pdfDoc = new PdfDocument(writer))
// {
// PdfMerger merger = new PdfMerger(pdfDoc);
// foreach (string file in inputFiles)
// {
// using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
// {
// merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
// }
// }
// }
//IronPDF(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
// iText merger pattern (delete this)
// using (PdfDocument pdfDoc = new PdfDocument(writer))
// {
// PdfMerger merger = new PdfMerger(pdfDoc);
// foreach (string file in inputFiles)
// {
// using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
// {
// merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
// }
// }
// }
//IronPDF(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
Imports System.Collections.Generic
' iText merger pattern (delete this)
' Using pdfDoc As New PdfDocument(writer)
' Dim merger As New PdfMerger(pdfDoc)
' For Each file As String In inputFiles
' Using sourcePdf As New PdfDocument(New PdfReader(file))
' merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages())
' End Using
' Next
' End Using
' IronPDF(simple)
Dim merged = PdfDocument.Merge(pdfDocuments)
merged.SaveAs("merged.pdf")
마이그레이션 체크리스트
사전 마이그레이션
- 코드베이스에서 모든 iText API 호출을 인벤토리화
- 프로그래젝트 PDF 생성 패턴 식별 (문단, 테이블, 셀)
- HtmlConverter 사용 문서화 (pdfHTML 애드온)
- AGPL 준수 위험 평가 -IronPDF라이센스 키를 받으세요
코드 마이그레이션
- iText NuGet 패키지 제거:
dotnet remove package itext7 - IronPdf NuGet Install-Package:
dotnet add package IronPdf - 네임스페이스 가져오기 업데이트 (
using iText.*→using IronPdf) Document패턴을ChromePdfRenderer로 교체Cell을 HTML 요소로 변환HtmlConverter.ConvertToPdf()을RenderHtmlAsPdf()로 교체- 병합 작업을
PdfDocument.Merge()로 업데이트 - 시작 시 라이선스 키 초기화 추가
테스트
- 모든 PDF 생성 경로 테스트
- 시각적 출력이 기대와 일치하는지 확인
- 복잡한 HTML/CSS 콘텐츠로 테스트
- 성능 벤치마크
마이그레이션 이후
- iText 라이선스 파일 및 참조 제거
- 문서 업데이트
- iText 구독 취소 (해당되는 경우)
- 레거시 iText 코드 아카이브

