跳過到頁腳內容
遷移指南

如何在 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 SDKIronPDF
重點文件影像套件(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" .
SHELL

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
SHELL

快速啟動遷移

步驟 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.com
$vbLabelText   $csharpLabel

After (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
$vbLabelText   $csharpLabel

步驟 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
$vbLabelText   $csharpLabel

步驟 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.com
$vbLabelText   $csharpLabel

After (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
$vbLabelText   $csharpLabel

主要差異:

  • 無狀態檢查-出錯時會有例外狀況
  • 不需要明確的渲染器處理
  • 現代流暢的 API
  • 基於 Chromium 的渲染,提供更好的 HTML/CSS 支援

完整的 API 參考資料

命名空間對應

GdPicture.NET SDKIronPDF
<編碼>GdPicture14</編碼<編碼>IronPdf</編碼
<編碼>GdPicture14.PDF</編碼<編碼>IronPdf</編碼
<編碼>GdPicture14.Imaging</編碼不適用 (不需要)

核心類映射

GdPicture.NET SDKIronPDF說明
<代碼>GdPicturePDF</代碼<編碼>PDF 文件</編碼主要 PDF 文件類別
<代碼>GdPictureDocumentConverter</代碼<代碼>ChromePdfRenderer</代碼HTML/URL 至 PDF 的轉換
<程式碼>授權管理員</程式碼IronPdf.License授權管理
<代碼>GdPictureStatus</代碼例外情況錯誤處理

文件載入方法

GdPicture.NET SDKIronPDF筆記
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 SDKIronPDF筆記
<代碼>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 SDKIronPDF筆記
<代碼>pdf1.MergePages(pdf2)</代碼PdfDocument.Merge(pdf1,pdf2)Merge PDFs
pdf.ExtractPages(start, end)<代碼>pdf.CopyPages(indices)</代碼摘錄頁面

水印作業

GdPicture.NET SDKIronPDF筆記
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.com
$vbLabelText   $csharpLabel

After (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.com
$vbLabelText   $csharpLabel

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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (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.com
$vbLabelText   $csharpLabel

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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (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.com
$vbLabelText   $csharpLabel

GdPicture.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.com
$vbLabelText   $csharpLabel

After (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.com
$vbLabelText   $csharpLabel

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
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

狀態代碼至異常

以標準的 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
$vbLabelText   $csharpLabel

單位轉換

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
$vbLabelText   $csharpLabel

換算公式: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
$vbLabelText   $csharpLabel

正確的資源處理方式

// 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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

遷移清單

預遷移

  • [在程式碼庫中清查所有GdPicture.NET SDK的使用情況
  • [ ] 確定實際使用的功能(PDF vsOCRvs BarCode)
  • [ ] 確定是否需要 OCR/條碼功能(考慮 IronOCR/IronBarcode)
  • [ ] 檢視目前的授權,並與 IronPdf 定價進行比較
  • [ ] 獲得 IronPdf 授權金鑰
  • [ ] 在版本控制中建立遷移分支

程式碼遷移

  • [ ] 移除GdPicture.NET SDKNuGet 套件:dotnet 移除套件 GdPicture.NET
  • [ ] 安裝 IronPdf NuGet 套件:dotnet add package IronPdf
  • [ ] 更新命名空間匯入 (GdPicture14IronPDF)
  • [ ] 將 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移植。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。