跳至頁尾內容
移民指南

如何在 C# 中將 GdPicture.NET SDK 移轉到 IronPDF

從 GdPicture.NET SDK 遷移到 IronPDF 為 .NET 開發人員提供了一種專注、簡化的 PDF 生成方法。 本指南提供了一個全面的、分步的遷移路徑,用專為現代 .NET 開發設計的現代化的、PDF 專用 API 替換了複雜的文檔圖像 SDK 模式。

為什麼要從 GdPicture.NET SDK 遷移到 IronPDF

GdPicture.NET SDK挑戰

GdPicture.NET SDK(現已更名為 Nutrient)是一個功能全面的文檔影像處理 SDK,但其在以 PDF 為中心的開發方面面臨諸多挑戰:

1.對於僅處理 PDF 的專案來說有點過頭了: GdPicture.NET SDK 是一個完整的文件影像處理套件,包括 OCR、條碼識別、掃描和影像處理。 如果您只需要 PDF 功能,那麼您就是在為永遠不會使用的功能付費。

2.複雜的授權:多個產品等級(GdPicture.NET 14、GdPicture.API、Ultimate、Professional),SKU 組合令人困惑,並且有年度訂閱要求。

3.企業定價:僅 PDF 外掛程式的授權費用起價為 2,999 美元,而終極版的價格則高達 10,000 美元以上。 按開發者付費模式會為不斷成長的團隊帶來巨大的額外開銷。

4.學習曲線陡峭:此 API 是圍繞文件圖像概念設計的,而不是現代 .NET 模式。 與當代 C# 約定相比, LicenseManager.RegisterKEY()GdPictureStatus枚舉檢查和 1 索引頁面等方法感覺已經過時了。

5.狀態碼模式:每個操作都會傳回一個GdPictureStatus枚舉,必須檢查-發生錯誤時不會拋出異常,這使得錯誤處理變得冗長而重複。

6.手動資源管理:需要明確Dispose()Release() 。 該 SDK 並未完全遵循標準的 .NET 資源釋放模式。

7.版本鎖定:命名空間GdPicture14包含版本號,因此主要版本升級需要更改整個程式碼庫中的命名空間。

8.品牌重塑帶來的混亂:最近更名為"Nutrient"導致 gdpicture.com 和 nutrient.io 之間的文檔出現碎片化,使支持和學習變得複雜。

GdPicture.NET SDK 與 IronPDF 的比較

方面GdPicture.NET SDKIronPDF
重點文件影像處理套件(對PDF來說功能過剩)PDF專用函式庫
定價企業級:2,999 美元至 10,000 美元以上具競爭力,可隨業務規模擴展
API 風格狀態碼,手動管理異常、IDisposable、現代 .NET
學習曲線陡峭(影像SDK概念)簡單(熟悉HTML/CSS)
HTML渲染基本型內燃機最新版 Chromium 內核,支援 CSS3/JS
頁面索引從 1 開始索引從 0 開始索引(標準 .NET)
螺紋安全需要手動同步螺紋安全設計
命名空間版本特定( GdPicture14穩定( IronPdf

對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了一個面向未來的基礎,與現代 .NET 模式和約定保持一致。


遷移複雜度評估

各功能預計工作量

特徵遷移複雜性筆記
HTML 轉 PDF低的直接方法映射
PDF檔案的URL低的直接方法映射
合併PDF低的類似的 API 模式
拆分PDF低的類似的 API 模式
水印低的不同的方法(基於HTML)
文字擷取低的屬性與方法
密碼保護中等的不同的參數結構
表單字段中等的API差異
數位簽名中高不同的憑證處理方式
OCR高的IronOCR是單獨的產品。
條碼識別不適用IronPDF 不支援此功能

遷移決策矩陣

你的情況推薦
僅限 PDF 操作遷移-大幅簡化流程並節省成本
大量使用 OCR將 IronOCR 視為配套產品
條碼/掃描需求這些功能請保留 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 all GdPicture.NET SDK references in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .

# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
# Find all GdPicture.NET SDK references 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 套件變更

# Remove GdPicture.NET SDK packages
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
# Remove GdPicture.NET SDK packages
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 any GdPicture.NET SDK operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
// Must be called before any GdPicture.NET SDK operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
$vbLabelText   $csharpLabel

(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" }
$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;
$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}");
    }
}
$vbLabelText   $csharpLabel

(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");
$vbLabelText   $csharpLabel

主要區別:

  • 不進行狀態檢查-錯誤除外 渲染器無需明確釋放資源
  • 現代流暢 API
  • 基於 Chium 的渲染,以提供更好的 HTML/CSS 支援

完整 API 參考

命名空間映射

GdPicture.NET SDKIronPDF
GdPicture14IronPdf
GdPicture14.PDFIronPdf
GdPicture14.Imaging不適用(無需填寫)

核心類別映射

GdPicture.NET SDKIronPDF描述
GdPicturePDFPdfDocument主 PDF 文件類
GdPictureDocumentConverterChromePdfRendererHTML/URL 轉 PDF
LicenseManagerIronPdf.License許可證管理
GdPictureStatus例外情況錯誤處理

文檔載入方法

GdPicture.NET SDKIronPDF筆記
pdf.LoadFromFile(path, loadInMemory)PdfDocument.FromFile(path)從檔案載入
pdf.LoadFromFile(path, password, loadInMemory)PdfDocument.FromFile(path, password)密碼保護
converter.LoadFromHTMLString(html)renderer.RenderHtmlAsPdf(html)HTML字串
converter.LoadFromURL(url)renderer.RenderUrlAsPdf(url)URL

頁面操作

GdPicture.NET SDKIronPDF筆記
pdf.GetPageCount()pdf.PageCount取得頁數
pdf.SelectPage(pageNo)pdf.Pages[index]選擇頁面(索引為 1 的頁面與索引為 0 的頁面)
pdf.GetPageWidth()pdf.Pages[i].Width頁面寬度
pdf.GetPageHeight()pdf.Pages[i].Height頁面高度

合併和拆分操作

GdPicture.NET SDKIronPDF筆記
pdf1.MergePages(pdf2)PdfDocument.Merge(pdf1, pdf2)合併PDF
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");
            }
        }
    }
}
$vbLabelText   $csharpLabel

(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");
    }
}
$vbLabelText   $csharpLabel

IronPDF 的ChromePdfRenderer使用現代 Chromium 引擎進行精確的 HTML/CSS 渲染,無需進行狀態碼檢查。 如需更多 HTML 渲染選項,請參閱HTML 轉 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");
        }
    }
}
$vbLabelText   $csharpLabel

(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");
    }
}
$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");
        }
    }
}
$vbLabelText   $csharpLabel

(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");
    }
}
$vbLabelText   $csharpLabel

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
            );
        }
    }
}
$vbLabelText   $csharpLabel

(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");
    }
}
$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
}
$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}");
}
$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;
$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;
}
$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
$vbLabelText   $csharpLabel

遷移清單

遷移前

  • 清點程式碼庫中所有 GdPicture.NET SDK 的使用情況
  • 確定實際使用的功能(PDF、OCR、條碼)
  • 決定是否需要 OCR/條碼功能(考慮使用 IronOCR/IronBarcode)
  • 查看您目前的許可協議,並與 IronPDF 的定價進行比較。
  • 取得 IronPDF 許可證密鑰
  • 在版本控制系統中建立遷移分支

程式碼遷移

  • 移除 GdPicture.NET SDK NuGet 套件: dotnet remove package GdPicture.NET 安裝 IronPdf NuGet 套件: dotnet add package IronPdf
  • 更新命名空間導入( GdPicture14IronPdf
  • LicenseManager.RegisterKEY()替換為IronPdf.License.LicenseKey 將狀態碼檢查轉換為 try-catch 區塊
  • 更新頁面索引(索引為 1 → 索引為 0)
  • GdPicturePDF替換為PdfDocument
  • GdPictureDocumentConverter替換為ChromePdfRenderer
  • 將基於座標的文字轉換為 HTML 戳記
  • 更新單位換算(英吋→毫米)

測試

  • 對所有 PDF 生成路徑進行單元測試
  • 驗證 HTML 渲染品質是否達到或超過預期
  • 測試所有安全性/加密場景
  • 驗證表單填寫功能
  • 測試合併/拆分操作
  • 驗證水印外觀
  • 效能基準關鍵路徑

移民後

  • 刪除 GdPicture.NET SDK 授權檔案/金鑰
  • 更新文檔
  • 訓練團隊掌握 IronPDF API 模式
  • 監控生產過程,發現任何問題

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。