C#에서 GdPicture.NET SDK에서 IronPDF로 마이그레이션하는 방법
GdPicture.NET SDK에서 IronPDF로의 마이그레이션은 .NET 개발자에게 PDF 생성에 집중된 간결한 접근 방식을 제공합니다. 이 가이드는 복잡한 문서 이미징 SDK 패턴을 현대적인 .NET 개발을 위한 PDF 전용 API로 교체하는 포괄적이고 단계적인 마이그레이션 경로를 제공합니다.
GdPicture.NET SDK에서 IronPDF로 마이그레이션해야 하는 이유
GdPicture.NET SDK의 문제점
현재 Nutrient로 브랜드 변경된 GdPicture.NET SDK는 PDF 중심의 개발에 여러 도전 과제들이 있는 포괄적인 문서 이미징 SDK입니다:
-
PDF 전용 프로젝트에 과도함: GdPicture.NET SDK는 OCR, 바코드 인식, 스캔 및 이미지 처리를 포함하는 완전한 문서 이미징 Suite입니다. PDF 기능만 필요하다면 절대 사용하지 않을 기능에 비용을 지불하는 것입니다.
-
복잡한 라이선스: 여러 제품 계층(GdPicture.NET 14, GdPicture.API, Ultimate, Professional)과 혼란스러운 SKU 조합 및 연간 구독 요구 사항.
-
기업 가격 정책: PDF 플러그인만으로도 라이선스 비용이 $2,999부터 시작하며, Ultimate 에디션은 $10,000 이상으로 증가할 수 있습니다. 개발자별 라이선스는 성장하는 팀에 상당한 오버헤드를 추가합니다.
-
학습 곡선의 높음: API는 현대적인 .NET 패턴이 아닌 문서 이미징 개념을 중심으로 설계되었습니다. 메서드
LicenseManager.RegisterKEY(),GdPictureStatus열거형 확인, 1-인덱스 페이지는 현대 C# 관례와 비교할 때 구식으로 느껴집니다. -
상태 코드 패턴: 모든 작업은 확인해야 하는
GdPictureStatus열거형을 반환하며, 오류 시 예외가 발생하지 않아 오류 처리가 장황하고 반복적입니다. -
수동 자원 관리: 명시적인
Dispose()또는Release()호출이 필요합니다. SDK는 표준 .NET 폐기 패턴을 깨끗하게 따르지 않습니다. -
버전 잠금: 네임스페이스
GdPicture14는 버전 번호를 포함하고 있어 주요 버전 업그레이드 시 전체 코드베이스에서 네임스페이스 변경이 필요합니다. - 브랜드 변경 혼란: 최근 'Nutrient'로의 브랜드 변경은 gdpicture.com과 nutrient.io 간의 문서 분열을 일으켜 지원 및 학습을 복잡하게 만듭니다.
GdPicture.NET SDK와IronPDF비교
| 측면 | GdPicture.NET SDK | IronPDF |
|---|---|---|
| 초점 | 문서 이미지 처리 제품군 (PDF에는 과잉임) | PDF 전용 라이브러리 |
| 가격 | $2,999-$10,000+ Enterprise 계층 | 경쟁적이며 비즈니스와 함께 확장 |
| API 스타일 | 상태 코드, 수동 관리 | 예외 처리, IDisposable, 현대 .NET |
| 학습 곡선 | 가파른 (이미징 SDK 개념) | 간단한 (HTML/CSS 친숙) |
| HTML 렌더링 | 기본, 내부 엔진 | 최신 Chromium과 CSS3/JS |
| 페이지 인덱싱 | 1-인덱스 | 0-인덱스 (표준 .NET) |
| 스레드 안전성 | 수동 동기화 필요 | 설계상 스레드 안전 |
| 네임스페이스 | 버전별 (GdPicture14) |
안정적 (IronPdf) |
2025년과 2026년까지 .NET 10과 C# 14 채택을 계획하는 팀에게 IronPDF는 현대적인 .NET 패턴과 관습에 맞춰 긴 미래를 보장하는 기반을 제공합니다.
마이그레이션 복잡성 평가
기능별 예상 노력
| 기능 | 마이그레이션 복잡성 |
|---|---|
| HTML to PDF | 낮음 |
| URL을 PDF로 변환 | 낮음 |
| PDF 병합 | 낮음 |
| PDF 분할 | 낮음 |
| 워터마크 | 낮음 |
| 텍스트 추출 | 낮음 |
| 비밀번호 보호 | 중간 |
| 양식 필드 | 중간 |
| 디지털 서명 | 중고 |
| OCR | 높음 |
| 바코드 인식 | 해당 없음 |
마이그레이션 의사결정 매트릭스
| 귀하의 상황 | 권장 사항 |
|---|---|
| PDF 전용 작업 | 마이그레이션—상당한 단순화와 비용 절감 |
| OCR 사용이 많음 | IronOCR를 보조 제품으로 고려하십시오 |
| 바코드/스캐닝 필요 | 해당 기능에서는 GdPicture.NET SDK를 유지하고, PDF 용도로는 IronPDF를 사용하십시오. |
| 전체 문서 이미징 | 실제로 모든 기능을 사용하는지 평가하십시오 |
시작하기 전에
필수 조건
- .NET 버전: IronPDF는 .NET Framework 4.6.2+ 및 .NET Core 2.0+ / .NET 5/6/7/8/9+를 지원합니다.
- 라이선스 키: ironpdf.com에서IronPDF라이선스 키를 얻으세요.
- 백업: 마이그레이션 작업을 위한 분기를 생성하세요.
모든GdPicture.NET SDK사용 식별
# Find allGdPicture.NET SDKreferences in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .
# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
# Find allGdPicture.NET SDKreferences in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .
# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
NuGet 패키지 변경 사항
# RemoveGdPicture.NET SDKpackages
dotnet remove package GdPicture.NET.14
dotnet remove package GdPicture.NET.14.API
dotnet remove package GdPicture
dotnet remove package GdPicture.API
# Install IronPDF
dotnet add package IronPdf
# RemoveGdPicture.NET SDKpackages
dotnet remove package GdPicture.NET.14
dotnet remove package GdPicture.NET.14.API
dotnet remove package GdPicture
dotnet remove package GdPicture.API
# Install IronPDF
dotnet add package IronPdf
빠른 시작 마이그레이션
1단계: 라이선스 구성 업데이트
이전 (GdPicture.NET SDK):
// Must be called before anyGdPicture.NET SDKoperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
// Must be called before anyGdPicture.NET SDKoperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
' Must be called before any GdPicture.NET SDK operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY")
이후 (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
' Or in appsettings.json:
' { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
2단계: 네임스페이스 가져오기 업데이트
// Before (GdPicture.NET SDK)
using GdPicture14;
// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (GdPicture.NET SDK)
using GdPicture14;
// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
3단계: 기본 변환 패턴
GdPicture.NET SDK 마이그레이션에서 가장 중요한 변화는 자세한 상태 확인 패턴을 제거하는 것입니다:
이전 (GdPicture.NET SDK):
using GdPicture14;
LicenseManager.RegisterKEY("LICENSE-KEY");
using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
GdPictureStatus status = converter.LoadFromHTMLString("<h1>Hello World</h1>");
if (status == GdPictureStatus.OK)
{
status = converter.SaveAsPDF("output.pdf");
if (status != GdPictureStatus.OK)
{
Console.WriteLine($"Error: {status}");
}
}
else
{
Console.WriteLine($"Load error: {status}");
}
}
using GdPicture14;
LicenseManager.RegisterKEY("LICENSE-KEY");
using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
GdPictureStatus status = converter.LoadFromHTMLString("<h1>Hello World</h1>");
if (status == GdPictureStatus.OK)
{
status = converter.SaveAsPDF("output.pdf");
if (status != GdPictureStatus.OK)
{
Console.WriteLine($"Error: {status}");
}
}
else
{
Console.WriteLine($"Load error: {status}");
}
}
Imports GdPicture14
LicenseManager.RegisterKEY("LICENSE-KEY")
Using converter As New GdPictureDocumentConverter()
Dim status As GdPictureStatus = converter.LoadFromHTMLString("<h1>Hello World</h1>")
If status = GdPictureStatus.OK Then
status = converter.SaveAsPDF("output.pdf")
If status <> GdPictureStatus.OK Then
Console.WriteLine($"Error: {status}")
End If
Else
Console.WriteLine($"Load error: {status}")
End If
End Using
이후 (IronPDF):
using IronPdf;
IronPdf.License.LicenseKey = "LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
using IronPdf;
IronPdf.License.LicenseKey = "LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
Imports IronPdf
IronPdf.License.LicenseKey = "LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
주요 차이점:
- 오류 시 예외 처리—상태 확인 필요 없음
- 렌더러에 대한 명시적 해제 필요 없음
- 최신 유창한 API
- 향상된 HTML/CSS 지원을 위한 Chromium 기반 렌더링
완전한 API 참조
네임스페이스 매핑
| GdPicture.NET SDK | IronPDF |
|---|---|
GdPicture14 |
IronPdf |
GdPicture14.PDF |
IronPdf |
GdPicture14.Imaging |
해당 없음 (필요 없음) |
핵심 클래스 매핑
| GdPicture.NET SDK | IronPDF | 설명 |
|---|---|---|
GdPicturePDF |
PdfDocument |
주요 PDF 문서 클래스 |
GdPictureDocumentConverter |
ChromePdfRenderer |
HTML/URL을 PDF로 변환 |
LicenseManager |
IronPdf.License |
라이선스 관리 |
GdPictureStatus |
예외 | 오류 처리 |
문서 로딩 메소드
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf.LoadFromFile(path, loadInMemory) |
PdfDocument.FromFile(path) |
pdf.LoadFromFile(path, password, loadInMemory) |
PdfDocument.FromFile(path, password) |
converter.LoadFromHTMLString(html) |
renderer.RenderHtmlAsPdf(html) |
converter.LoadFromURL(url) |
renderer.RenderUrlAsPdf(url) |
페이지 작업
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf.GetPageCount() |
pdf.PageCount |
pdf.SelectPage(pageNo) |
pdf.Pages[index] |
pdf.GetPageWidth() |
pdf.Pages[i].Width |
pdf.GetPageHeight() |
pdf.Pages[i].Height |
병합 및 분할 작업
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf1.MergePages(pdf2) |
PdfDocument.Merge(pdf1, pdf2) |
pdf.ExtractPages(start, end) |
pdf.CopyPages(indices) |
워터마크 작업
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf.DrawText(...) 루프 |
pdf.ApplyWatermark(html) |
pdf.SetTextColor(color) |
CSS 스타일링 |
pdf.SetTextSize(size) |
CSS 스타일링 |
코드 마이그레이션 예제
예제 1: HTML에서 PDF로 변환
이전 (GdPicture.NET SDK):
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
class Program
{
static void Main()
{
using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
GdPictureStatus status = converter.LoadFromHTMLString(htmlContent);
if (status == GdPictureStatus.OK)
{
converter.SaveAsPDF("output.pdf");
}
}
}
}
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
class Program
{
static void Main()
{
using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
GdPictureStatus status = converter.LoadFromHTMLString(htmlContent);
if (status == GdPictureStatus.OK)
{
converter.SaveAsPDF("output.pdf");
}
}
}
}
Imports GdPicture14
Imports System
Class Program
Shared Sub Main()
Using converter As New GdPictureDocumentConverter()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim status As GdPictureStatus = converter.LoadFromHTMLString(htmlContent)
If status = GdPictureStatus.OK Then
converter.SaveAsPDF("output.pdf")
End If
End Using
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF의 ChromePdfRenderer는 현대적인 Chromium 엔진을 사용하여 정확한 HTML/CSS 렌더링을 제공하며, 상태 코드 확인이 필요 없습니다. 더 많은 HTML 렌더링 옵션을 보려면 HTML to PDF 문서를 참조하십시오.
예제 2: 여러 PDF 병합
이전 (GdPicture.NET SDK):
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
class Program
{
static void Main()
{
using (GdPicturePDF pdf1 = new GdPicturePDF())
using (GdPicturePDF pdf2 = new GdPicturePDF())
{
pdf1.LoadFromFile("document1.pdf", false);
pdf2.LoadFromFile("document2.pdf", false);
pdf1.MergePages(pdf2);
pdf1.SaveToFile("merged.pdf");
}
}
}
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
class Program
{
static void Main()
{
using (GdPicturePDF pdf1 = new GdPicturePDF())
using (GdPicturePDF pdf2 = new GdPicturePDF())
{
pdf1.LoadFromFile("document1.pdf", false);
pdf2.LoadFromFile("document2.pdf", false);
pdf1.MergePages(pdf2);
pdf1.SaveToFile("merged.pdf");
}
}
}
Imports GdPicture14
Imports System
Class Program
Shared Sub Main()
Using pdf1 As New GdPicturePDF(), pdf2 As New GdPicturePDF()
pdf1.LoadFromFile("document1.pdf", False)
pdf2.LoadFromFile("document2.pdf", False)
pdf1.MergePages(pdf2)
pdf1.SaveToFile("merged.pdf")
End Using
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
merged.SaveAs("merged.pdf")
End Sub
End Class
IronPDF의 정적 Merge 메서드는 여러 문서의 결합을 쉽게 할 수 있게 해 주는 문서 목록을 받아 단일 작업으로 여러 PDF를 결합할 수 있습니다. PDF 병합 및 분할에 대해 더 알아보세요.
예제 3: 모든 페이지에 워터마크 추가
이전 (GdPicture.NET SDK):
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
using System.Drawing;
class Program
{
static void Main()
{
using (GdPicturePDF pdf = new GdPicturePDF())
{
pdf.LoadFromFile("input.pdf", false);
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
pdf.SelectPage(i);
pdf.SetTextColor(Color.Red);
pdf.SetTextSize(48);
pdf.DrawText("CONFIDENTIAL", 200, 400);
}
pdf.SaveToFile("watermarked.pdf");
}
}
}
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
using System.Drawing;
class Program
{
static void Main()
{
using (GdPicturePDF pdf = new GdPicturePDF())
{
pdf.LoadFromFile("input.pdf", false);
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
pdf.SelectPage(i);
pdf.SetTextColor(Color.Red);
pdf.SetTextSize(48);
pdf.DrawText("CONFIDENTIAL", 200, 400);
}
pdf.SaveToFile("watermarked.pdf");
}
}
}
Imports GdPicture14
Imports System
Imports System.Drawing
Module Program
Sub Main()
Using pdf As New GdPicturePDF()
pdf.LoadFromFile("input.pdf", False)
For i As Integer = 1 To pdf.GetPageCount()
pdf.SelectPage(i)
pdf.SetTextColor(Color.Red)
pdf.SetTextSize(48)
pdf.DrawText("CONFIDENTIAL", 200, 400)
Next
pdf.SaveToFile("watermarked.pdf")
End Using
End Sub
End Module
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
GdPicture.NET SDK 마이그레이션의 랜더링 기반 텍스트 그리기에서 HTML 기반 워터마킹으로의 전환은 코드를 크게 단순화합니다. IronPDF의 ApplyWatermark 메서드는 HTML/CSS 스타일링을 사용하여 수동 페이지 반복 및 좌표 계산의 필요성을 제거합니다. 추가 옵션을 보려면 전체 워터마킹 문서를 참조하십시오.
예제 4: 암호 보호 및 보안
이전 (GdPicture.NET SDK):
using GdPicture14;
class Program
{
static void Main()
{
LicenseManager.RegisterKEY("LICENSE-KEY");
using (GdPicturePDF pdf = new GdPicturePDF())
{
GdPictureStatus status = pdf.LoadFromFile("document.pdf", false);
if (status != GdPictureStatus.OK) return;
// Save with encryption - many boolean parameters
status = pdf.SaveToFile(
"protected.pdf",
PdfEncryption.PdfEncryption256BitAES,
"user123", // User password
"owner456", // Owner password
true, // Can print
false, // Cannot copy
false, // Cannot modify
false, // Cannot add notes
true, // Can fill forms
false, // Cannot extract
false, // Cannot assemble
true // Can print high quality
);
}
}
}
using GdPicture14;
class Program
{
static void Main()
{
LicenseManager.RegisterKEY("LICENSE-KEY");
using (GdPicturePDF pdf = new GdPicturePDF())
{
GdPictureStatus status = pdf.LoadFromFile("document.pdf", false);
if (status != GdPictureStatus.OK) return;
// Save with encryption - many boolean parameters
status = pdf.SaveToFile(
"protected.pdf",
PdfEncryption.PdfEncryption256BitAES,
"user123", // User password
"owner456", // Owner password
true, // Can print
false, // Cannot copy
false, // Cannot modify
false, // Cannot add notes
true, // Can fill forms
false, // Cannot extract
false, // Cannot assemble
true // Can print high quality
);
}
}
}
Imports GdPicture14
Class Program
Shared Sub Main()
LicenseManager.RegisterKEY("LICENSE-KEY")
Using pdf As New GdPicturePDF()
Dim status As GdPictureStatus = pdf.LoadFromFile("document.pdf", False)
If status <> GdPictureStatus.OK Then Return
' Save with encryption - many boolean parameters
status = pdf.SaveToFile(
"protected.pdf",
PdfEncryption.PdfEncryption256BitAES,
"user123", ' User password
"owner456", ' Owner password
True, ' Can print
False, ' Cannot copy
False, ' Cannot modify
False, ' Cannot add notes
True, ' Can fill forms
False, ' Cannot extract
False, ' Cannot assemble
True ' Can print high quality
)
End Using
End Sub
End Class
이후 (IronPDF):
using IronPdf;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
// Configure security settings with clear property names
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.UserPassword = "user123";
// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
pdf.SaveAs("protected.pdf");
}
}
using IronPdf;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
// Configure security settings with clear property names
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.UserPassword = "user123";
// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
pdf.SaveAs("protected.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
' Configure security settings with clear property names
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.UserPassword = "user123"
' Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserFormData = True
pdf.SaveAs("protected.pdf")
End Sub
End Class
IronPDF의 SecuritySettings 프로퍼티는 위치 기반의 부울 매개변수 대신 이름이 있는 자체 문서화 프로퍼티를 제공합니다.
중요한 마이그레이션 노트
페이지 인덱싱 변환
이GdPicture.NET SDK마이그레이션에서 가장 중요한 변화 중 하나는 페이지 인덱싱의 차이입니다:
// GdPicture.NET SDK:1-인덱스pages
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
pdf.SelectPage(i);
// process page
}
// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < pdf.PageCount; i++)
{
var page = pdf.Pages[i];
// process page
}
// GdPicture.NET SDK:1-인덱스pages
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
pdf.SelectPage(i);
// process page
}
// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < pdf.PageCount; i++)
{
var page = pdf.Pages[i];
// process page
}
' GdPicture.NET SDK: 1-indexed pages
For i As Integer = 1 To pdf.GetPageCount()
pdf.SelectPage(i)
' process page
Next
' IronPDF: 0-indexed pages (standard .NET)
For i As Integer = 0 To pdf.PageCount - 1
Dim page = pdf.Pages(i)
' process page
Next
상태 코드에서 예외로
상세한 상태 확인을 표준 try-catch로 교체:
// GdPicture.NET SDK
GdPictureStatus status = converter.LoadFromHTMLString(html);
if (status != GdPictureStatus.OK)
{
Console.WriteLine($"Error: {status}");
return;
}
// IronPDF
try
{
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
// GdPicture.NET SDK
GdPictureStatus status = converter.LoadFromHTMLString(html);
if (status != GdPictureStatus.OK)
{
Console.WriteLine($"Error: {status}");
return;
}
// IronPDF
try
{
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
' GdPicture.NET SDK
Dim status As GdPictureStatus = converter.LoadFromHTMLString(html)
If status <> GdPictureStatus.OK Then
Console.WriteLine($"Error: {status}")
Return
End If
' IronPDF
Try
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
단위 변환
GdPicture.NET SDK는 여백에 대해 인치를 사용합니다; IronPDF는 밀리미터를 사용합니다:
// GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5f, 0.5f, 0.5f, 0.5f);
// IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;
// GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5f, 0.5f, 0.5f, 0.5f);
// IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;
' GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5F, 0.5F, 0.5F, 0.5F)
' IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7
renderer.RenderingOptions.MarginBottom = 12.7
renderer.RenderingOptions.MarginLeft = 12.7
renderer.RenderingOptions.MarginRight = 12.7
변환 공식: millimeters = inches × 25.4
스레드 안전성
GdPicture.NET SDK는 동시 작업을 위해 수동 동기화가 필요합니다. IronPDF의 ChromePdfRenderer은 설계상 스레드 안전성을 갖추고 있어 멀티 스레드 PDF 생성이 간소화됩니다.
성능 고려 사항
ChromePdfRenderer 재사용
최적의 성능을 위해 렌더러 인스턴스를 재사용하세요:
// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();
public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}
// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
var renderer = new ChromePdfRenderer(); // Wasteful
return renderer.RenderHtmlAsPdf(html).BinaryData;
}
// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();
public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}
// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
var renderer = new ChromePdfRenderer(); // Wasteful
return renderer.RenderHtmlAsPdf(html).BinaryData;
}
Imports System
Public Class PdfService
Private Shared ReadOnly _renderer As New ChromePdfRenderer()
Public Function Generate(html As String) As Byte()
Return _renderer.RenderHtmlAsPdf(html).BinaryData
End Function
' BAD - Creates new instance each time
Public Function GenerateBad(html As String) As Byte()
Dim renderer As New ChromePdfRenderer() ' Wasteful
Return renderer.RenderHtmlAsPdf(html).BinaryData
End Function
End Class
적절한 리소스 폐기
// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
string text = pdf.ExtractAllText();
} // pdf is disposed automatically
// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
string text = pdf.ExtractAllText();
} // pdf is disposed automatically
Imports PdfDocument
' Use Using blocks for automatic cleanup
Using pdf = PdfDocument.FromFile("large.pdf")
Dim text As String = pdf.ExtractAllText()
End Using ' pdf is disposed automatically
마이그레이션 체크리스트
사전 마이그레이션
- 코드베이스에서 모든GdPicture.NET SDK사용을 인벤토리화
- 실제로 사용되는 기능 식별 (PDF 대OCR대 바코드)
- OCR/바코드 기능이 필요한지 여부 결정 (IronOCR/IronBarcode 고려)
- 현재 라이선스를 검토하고IronPDF가격과 비교 -IronPDF라이센스 키를 받으세요
- 버전 컨트롤에 마이그레이션 분기를 생성
코드 마이그레이션
-GdPicture.NET SDKNuGet 패키지 제거: dotnet remove package GdPicture.NET
- IronPdf NuGet Install-Package:
dotnet add package IronPdf - 네임스페이스 가져오기 업데이트 (
GdPicture14→IronPdf) LicenseManager.RegisterKEY()를IronPdf.License.LicenseKey로 대체- 상태 코드 확인을 try-catch 블록으로 변환
- 페이지 인덱싱 업데이트 (1-기준 → 0-기준)
GdPicturePDF를PdfDocument로 대체GdPictureDocumentConverter를ChromePdfRenderer로 대체- 좌표 기반 텍스트를 HTML 스탬핑으로 변환
- 단위 변환 업데이트 (인치 → 밀리미터)
테스트
- 모든 PDF 생성 경로에 대한 단위 테스트
- HTML 렌더링 품질이 일치하거나 뛰어난지 확인
- 모든 보안/암호화 시나리오 테스트
- 양식 채우기 기능 확인
- 병합/나누기 작업 테스트
- 워터마크 표시 여부 확인
- 중요 경로 성능 벤치마크
마이그레이션 이후
-GdPicture.NET SDK라이센스 파일/키 제거
- 문서 업데이트 -IronPDFAPI 패턴에 대한 팀 교육
- 생산에서 문제 여부 모니터

