跳至页脚内容
迁移指南

如何在 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 美元以上。 按开发人员发放 License 会给不断壮大的团队增加大量开销。

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与IronPDFfor .NET 对比

方面 GdPicture.NET SDK IronPDF
翻译重点 文档成像套件(PDF 过犹不及) PDF 专用库
定价 2,999 美元-10,000 美元以上企业级 具有竞争力,与业务相匹配
API 风格 状态代码、人工管理 异常、IDisposable、现代 .NET
学习曲线 Steep(图像 SDK 概念) 简单(熟悉 HTML/CSS)
HTML 渲染 基本的内部引擎 带有 CSS3/JS 的最新 Chromium
页面索引 1-索引 0 索引(标准 .NET Standard)
线程安全 需要手动同步 线程安全设计
名称空间 特定版本 (GdPicture14) 稳定 (IronPdf)

对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了一个面向未来的基础,与现代 .NET 模式和惯例保持一致。


迁移复杂性评估

按功能估算的工作量

特征 迁移复杂性 备注
HTML 至 PDF 直接方法映射
URL 至 PDF 直接方法映射
合并 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 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");
$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" }
$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

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

关键差异:

  • 无状态检查-错误时出现例外情况
  • 无需对呈现器进行明确处理
  • 现代流畅的 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 的转换
LicenseManager IronPdf.License 许可证管理
GdPictureStatus 例外情况 错误处理

文档加载方法

GdPicture.NET SDK IronPDF 备注
pdf.LoadFromFile(path,loadInMemory) PdfDocument.FromFile(路径) 从文件加载
pdf.LoadFromFile(路径,密码,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-索引对比 0-索引)
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(...)</code>循环|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

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

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

换算公式:毫米 = 英寸 × 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 SDKNuGet 包: 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许可证文件/密钥
  • 更新文档
  • 培训团队掌握IronPDFAPI 模式
  • 监控生产过程,发现任何问题

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。