迁移指南 如何在 C# 中从 GdPicture.NET SDK 迁移到 IronPDF Curtis Chau 已发布:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从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 完整的文档成像 评估您是否实际使用了所有功能 开始之前 前提条件 .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 更新命名空间导入(GdPicture14→IronPdf) 将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 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何用 C# 从 GemBox PDF 迁移到 IronPDF如何用 C# 从 FastReport 迁移...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多