如何在 C# 中從 GdPicture.NET SDK 轉移到 IronPDF
從GdPicture.NET SDK移植到 IronPDF:完整的 C# 遷移指南。
從GdPicture.NET SDK轉換到IronPDF可為 .NET 開發人員提供專注、簡化的 PDF 生成方法。 本指南提供了一個全面的、循序漸進的遷移路徑,以為當代 .NET 開發設計的現代化 PDF 專用 API 取代複雜的文件影像 SDK 模式。
為什麼要從GdPicture.NET SDK轉移到 IronPDF?
GdPicture.NET SDK的挑戰
GdPicture.NET SDK(現已重新命名為 Nutrient)是一個全面的文件影像 SDK,對於以 PDF 為重點的開發而言,有幾項挑戰:
1.Overkill for PDF-Only Projects:GdPicture.NET SDK 是一套完整的文件影像套件,包括 OCR、Barcode 識別、掃描和影像處理。 如果您只需要 PDF 功能,您就得為您永遠用不上的功能付費。
2.複雜的授權:多種產品層級(GdPicture.NET 14、GdPicture.API、Ultimate、Professional),具有混亂的 SKU 組合和年度訂閱要求。
3.企業級定價:單是 PDF 外掛程式的授權費用為 2,999 美元起,終極版的授權費用為 10,000 美元以上。 對於成長中的團隊而言,每位開發人員的 License 會增加大量的開銷。
4.Steep Learning Curve:API 是圍繞文件影像概念而設計,而非現代的 .NET 模式。 像 LicenseManager.RegisterKEY(),<代碼>GdPictureStatus</代碼枚舉檢查和1-索引頁面等方法,與當代 C# 慣例相比,感覺已經過時。
5.狀態程式碼模式:每個作業都會回傳一個<代碼>GdPictureStatus</代碼枚舉,這個枚舉必須經過檢查 - 不會在出錯時拋出例外,這使得錯誤處理變得冗長且重複。
6.手動資源管理:需要明確的 Dispose() 或 Release() 呼叫。 SDK 並未乾淨地遵循標準的 .NET 處理模式。
7.版本鎖定:命名空間<編碼>GdPicture14</編碼包含版本號,因此主要的版本升級需要在整個程式碼基礎中變更命名空間。
8.Rebranding Confusion:最近重新命名為"Nutrient",造成 gdpicture.com 和 nutrient.io 之間的文件分割,使支援和學習變得複雜。
GdPicture.NET SDK與IronPDF的比較。
| 範疇 | GdPicture.NET SDK | IronPDF |
|---|---|---|
| 重點 | 文件影像套件(PDF 的過度要求) | PDF 專用資料庫 |
| 定價 | $2,999-$10,000+ 企業級 | 具有競爭力,並與業務成正比 |
| API 風格 | 狀態代碼、手動管理 | 例外、IDisposable、現代 .NET |
| 學習曲線 | Steep (影像 SDK 概念) | 簡單 (熟悉 HTML/CSS) |
| HTML 渲染 | 基本、內部引擎 | 最新的 Chromium 與 CSS3/JS |
| 頁面索引 | 1-索引 | 0-索引(標準 .NET Standard) |
| 線程安全 | 需要手動同步 | 線程安全的設計 |
| 名稱空間 | 特定版本 (GdPicture14) | 穩定 (IronPdf) |
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了一個面向未來的基礎,符合現代的 .NET 模式和慣例。
遷移複雜性評估
按功能估計的工作量
| 特點 | 遷移複雜性 | 筆記 |
|---|---|---|
| HTML 至 PDF | 低 | 直接方法對應 |
| URL 至 PDF | 低 | 直接方法對應 |
| 合併 PDF | 低 | 類似的 API 模式 |
| 分割 PDF | 低 | 類似的 API 模式 |
| 水印 | 低 | 不同的方法(基於 HTML) |
| 文字擷取 | 低 | 屬性 vs 方法 |
| 密碼保護 | 語言 | 不同的參數結構 |
| 表格欄位 | 語言 | API 差異 |
| 數位簽名 | 中高級 | 不同的證書處理 |
| OCR | 高的 | IronOCR 是獨立的產品 |
| BarCode 識別 | 不適用 | 不支援 IronPDF |
遷移決策矩陣
| 您的情況 | 建議 |
|---|---|
| 僅限 PDF 作業 | 遷移-大幅簡化並節省成本 |
| 大量使用 OCR | 考慮將 IronOCR 作為配套產品 |
| BarCode/ 掃描需求 | 這些功能請保留 GdPicture.NET SDK,PDF 請使用 IronPDF。 |
| 完整的文件影像 | 評估您是否實際使用所有功能 |
開始之前
先決條件
1..NET 版本:IronPDF 支持 .NET Framework 4.6.2+ 和 .NET Core 2.0+ / .NET 5/6/7/8/9+ 。 2.許可金鑰:從ironpdf.com取得您的IronPDF授權金鑰。 3.備份:為移轉工作建立分支
識別所有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");IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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" }IRON VB CONVERTER ERROR developers@ironsoftware.com步驟 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;IRON VB CONVERTER ERROR developers@ironsoftware.com步驟 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}");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");IRON VB CONVERTER ERROR developers@ironsoftware.com主要差異:
- 無狀態檢查-出錯時會有例外狀況
- 不需要明確的渲染器處理
- 現代流暢的 API
- 基於 Chromium 的渲染,提供更好的 HTML/CSS 支援
完整的 API 參考資料
命名空間對應
| GdPicture.NET SDK | IronPDF |
|---|---|
| <編碼>GdPicture14</編碼 | <編碼>IronPdf</編碼 |
| <編碼>GdPicture14.PDF</編碼 | <編碼>IronPdf</編碼 |
| <編碼>GdPicture14.Imaging</編碼 | 不適用 (不需要) |
核心類映射
| GdPicture.NET SDK | IronPDF | 說明 |
|---|---|---|
| <代碼>GdPicturePDF</代碼 | <編碼>PDF 文件</編碼 | 主要 PDF 文件類別 |
| <代碼>GdPictureDocumentConverter</代碼 | <代碼>ChromePdfRenderer</代碼 | HTML/URL 至 PDF 的轉換 |
| <程式碼>授權管理員</程式碼 | IronPdf.License。 | 授權管理 |
| <代碼>GdPictureStatus</代碼 | 例外情況 | 錯誤處理 |
文件載入方法
| GdPicture.NET SDK | IronPDF | 筆記 |
|---|---|---|
pdf.LoadFromFile(path,loadInMemory)。 | PdfDocument.FromFile(path) | 從檔案載入 |
pdf.LoadFromFile(path,password,loadInMemory)。 | <編碼>PdfDocument.FromFile(路徑, 密碼)</編碼 | 密碼保護 |
converter.LoadFromHTMLString(html) | renderer.RenderHtmlAsPdf(html)。 | HTML 字串 |
converter.LoadFromURL(url) | renderer.RenderUrlAsPdf(url)。 | 網址 |
頁面運作
| GdPicture.NET SDK | IronPDF | 筆記 |
|---|---|---|
| <代碼>pdf.GetPageCount()</代碼 | <編碼>pdf.PageCount</編碼 | 取得頁數 |
| <代碼>pdf.SelectPage(pageNo)</代碼 | <編碼>pdf.Pages[index]</編碼 | 選擇頁面 (1-indexed vs 0-indexed) |
| <代碼>pdf.GetPageWidth()</代碼 | <編碼>pdf.Pages[i].Width</編碼 | 頁面寬度 |
| <代碼>pdf.GetPageHeight()</代碼 | <編碼>pdf.Pages[i].Height</編碼 | 頁面高度 |
合併與分割作業
| GdPicture.NET SDK | IronPDF | 筆記 |
|---|---|---|
| <代碼>pdf1.MergePages(pdf2)</代碼 | PdfDocument.Merge(pdf1,pdf2)。 | Merge PDFs |
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");
}
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 的<代碼>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");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 的靜態 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");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comGdPicture.NET SDK 從基於坐標的文字繪圖轉換到基於 HTML 的水印,大大簡化了程式碼。 IronPdf 的 ApplyWatermark 方法使用 HTML/CSS 定義,省去了手動頁面迭代和坐標計算。 有關其他選項,請參閱完整的 watermarking 文件。
範例 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
);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 的 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
}IRON VB CONVERTER ERROR developers@ironsoftware.com狀態代碼至異常
以標準的 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}");
}IRON VB CONVERTER ERROR developers@ironsoftware.com單位轉換
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;IRON VB CONVERTER ERROR developers@ironsoftware.com換算公式: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;
}IRON VB CONVERTER ERROR developers@ironsoftware.com正確的資源處理方式
// 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 automaticallyIRON VB CONVERTER ERROR developers@ironsoftware.com遷移清單
預遷移
- [在程式碼庫中清查所有GdPicture.NET SDK的使用情況
- [ ] 確定實際使用的功能(PDF vsOCRvs BarCode)
- [ ] 確定是否需要 OCR/條碼功能(考慮 IronOCR/IronBarcode)
- [ ] 檢視目前的授權,並與 IronPdf 定價進行比較
- [ ] 獲得 IronPdf 授權金鑰
- [ ] 在版本控制中建立遷移分支
程式碼遷移
- [ ] 移除GdPicture.NET SDKNuGet 套件:
dotnet 移除套件 GdPicture.NET - [ ] 安裝 IronPdf NuGet 套件:
dotnet add package IronPdf。 - [ ] 更新命名空間匯入 (
GdPicture14→IronPDF) - [ ] 將
LicenseManager.RegisterKEY()替換為IronPdf.License.LicenseKey。 - [將狀態碼檢查轉換為 try-catch 區塊
- [更新頁面索引 (1-indexed → 0-indexed)
- [ ] 將<代碼>GdPicturePDF</代碼替換為
PdfDocument - [ ] 將<代碼>GdPictureDocumentConverter</代碼替換為
ChromePdfRenderer - [ ] 將基於座標的文字轉換為 HTML 戳記
- [ ] 更新單位轉換 (英吋 → 公釐)
測試
- [ ] 單元測試所有 PDF 生成路徑
- [ ] 確認 HTML 呈現品質符合或超過
- [ ] 測試所有安全/加密情境
- [ ] 驗證填表功能
- [ ] 測試合併/分割作業
- [驗證水印外觀
- [ ] 效能基準關鍵路徑
後遷移
- [ ] 移除GdPicture.NET SDK授權檔案/金鑰
- [ ] 更新文件
- [ ] 對團隊進行 IronPdf API 模式的培訓
- [ ] 監控生產中的任何問題
結論
從GdPicture.NET SDK轉換到 IronPDF,當您的重點是 PDF 產生時,就可以省去完整文件影像 SDK 的複雜性。 轉移以乾淨的例外錯誤處理取代冗長的狀態檢查模式,以標準的 0 索引集合取代 1 索引頁面,以直覺的 HTML/CSS 造型取代基於坐標的文字繪圖。
IronPDF 的專注方法可降低授權成本,同時提供基於 Chromium 的現代化 HTML 渲染、線程安全操作,以及不會因版本升級而改變的穩定命名空間。 對於有OCR或條碼需求的團隊,配套產品 IronOCR 和 IronBarcode 可提供這些功能,而無需單一 SDK 的開銷。
探索完整的 IronPDF 文件、教學和 API 參考,加速您的GdPicture.NET SDK移植。






