迁移指南 从 Foxit PDF SDK 迁移到 IronPdf:(.NET指南) Curtis Chau 已发布:2026年1月11日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从福昕 PDF SDK迁移到IronPDF可以简化您的 .NET PDF 生成工作流程,因为它用现代化的、对开发人员友好的模式取代了复杂的、面向企业的 API。 本指南提供了一个完整的、分步的迁移路径,可以删除不必要的代码,并简化整个代码库中的 PDF 操作。 为什么要从福昕 PDF SDK 迁移到 IronPDF. 福昕 PDF 的挑战 Foxit PDF SDK 是一个功能强大的企业级库,但它也存在相当大的复杂性,可能会减慢开发速度: 1.复杂的许可系统:多种产品、SKU 和许可类型(按开发者、按服务器、OEM 等)使得为您的项目选择合适的选项变得困难。 2.企业定价:定价是为大型组织量身定制的,对于较小的团队或个人开发人员来说可能难以承受。 3.手动安装:福昕 PDF SDK需要手动 DLL 引用或私有 NuGet 源——没有简单的公共 NuGet 包可用。 4.冗长的 API:使用Library.Initialize()进行库初始化、错误代码检查以及显式调用Library.Release()会为每个操作增加大量的样板代码。 5.单独的 HTML 转换插件: HTML 到 PDF 的转换需要额外购买插件——它不包含在基本 SDK 中。 6.复杂配置:设置需要详细的对象配置(例如, HTML2PDFSettingData ),具有多个属性。 C++ 传承: API 模式反映了 C++ 的起源,在现代 C# 应用程序中感觉不太自然。 福昕 PDF 与IronPDF对比 方面 福昕 PDF SDK IronPDF 安装 手动动态链接库/私有源代码 简单的 NuGet 软件包 许可 复杂、以企业为重点 透明,适合各种尺寸 初始化 Library.Initialize(sn,key) 设置一次许可证密钥 错误处理 ErrorCode 枚举 .NET 标准例外情况 HTML 至 PDF 单独购买附加组件 内置 Chromium 引擎 API 风格 C++ 遗产,冗长 现代 .NET 模式 资源清理 手册 Close()/Release() IDisposable/automatic 文档 企业文档门户 公共教程 成本效益分析 从 Foxit PDF 迁移到IronPDF可带来切实的开发优势:通过更简单的 API 降低复杂性,通过直观的方法加快开发速度,兼容现代 .NET,包括 async/await 和 LINQ 支持,采用 HTML 优先方法利用现有的 Web 技能,以及无需单独购买附加组件即可获得所有功能。 当您计划在 2025 年和 2026 年采用 .NET 10 和 C# 14 时,IronPDF 为 PDF 生成提供了一个面向未来的基础。 开始之前 前提条件 .NET 环境:IronPDF支持 .NET Framework 4.6.2+、.NET Core 3.1+ 和 .NET 5/6/7/8/9+。 NuGet 访问权限:确保您可以从 NuGet 安装包。 3.许可证密钥:请从ironpdf.com获取用于生产环境的IronPDF许可证密钥。 备份您的项目 # Create a backup branch git checkout -b pre-ironpdf-migration git add . git commit -m "Backup before福昕 PDF SDKtoIronPDFmigration" # Create a backup branch git checkout -b pre-ironpdf-migration git add . git commit -m "Backup before福昕 PDF SDKtoIronPDFmigration" SHELL 识别所有福昕 PDF 使用情况 # Find all福昕 PDF SDKreferences grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" . # Find Foxit DLL references find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk" # Find all福昕 PDF SDKreferences grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" . # Find Foxit DLL references find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk" SHELL 文档当前功能 在迁移之前,编目: 您使用的福昕 PDF 功能(HTML 转换、注释、表单、安全性) 许可证密钥位置和初始化代码 自定义配置和设置 使用 ErrorCode 枚举的错误处理模式 快速启动迁移 步骤 1:更新 NuGet 软件包 #福昕 PDF SDKtypically requires manual removal of DLL references # Check your .csproj for Foxit references and remove them # Install IronPDF dotnet add package IronPdf #福昕 PDF SDKtypically requires manual removal of DLL references # Check your .csproj for Foxit references and remove them # Install IronPDF dotnet add package IronPdf SHELL 如果您在 .csproj 中有福昕 PDF 引用,请手动将其删除: <Reference Include="fsdk_dotnet"> <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath> </Reference> <Reference Include="fsdk_dotnet"> <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath> </Reference> XML 步骤 2:更新命名空间 // Before (Foxit PDF) using foxit; using foxit.common; using foxit.common.fxcrt; using foxit.pdf; using foxit.pdf.annots; using foxit.addon.conversion; // After (IronPDF) using IronPdf; using IronPdf.Rendering; using IronPdf.Editing; // Before (Foxit PDF) using foxit; using foxit.common; using foxit.common.fxcrt; using foxit.pdf; using foxit.pdf.annots; using foxit.addon.conversion; // After (IronPDF) using IronPdf; using IronPdf.Rendering; using IronPdf.Editing; $vbLabelText $csharpLabel 第 3 步:初始化 IronPDF. 此次福昕 PDF 迁移中最重要的改进之一是消除了复杂的初始化和清理模式: // Before (Foxit PDF) string sn = "YOUR_SERIAL_NUMBER"; string key = "YOUR_LICENSE_KEY"; ErrorCode error_code = Library.Initialize(sn, key); if (error_code != ErrorCode.e_ErrSuccess) { throw new Exception("Failed to initialize Foxit PDF SDK"); } // ... your code ... Library.Release(); // Don't forget this! // After (IronPDF) IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; // That's it! No Release() needed // Before (Foxit PDF) string sn = "YOUR_SERIAL_NUMBER"; string key = "YOUR_LICENSE_KEY"; ErrorCode error_code = Library.Initialize(sn, key); if (error_code != ErrorCode.e_ErrSuccess) { throw new Exception("Failed to initialize Foxit PDF SDK"); } // ... your code ... Library.Release(); // Don't forget this! // After (IronPDF) IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; // That's it! No Release() needed $vbLabelText $csharpLabel 步骤 4:基本转换模式 // Before (Foxit PDF) Library.Initialize(sn, key); HTML2PDFSettingData settings = new HTML2PDFSettingData(); settings.page_width = 612.0f; settings.page_height = 792.0f; using (HTML2PDF html2pdf = new HTML2PDF(settings)) { html2pdf.Convert(htmlContent, "output.pdf"); } Library.Release(); // After (IronPDF) var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); // Before (Foxit PDF) Library.Initialize(sn, key); HTML2PDFSettingData settings = new HTML2PDFSettingData(); settings.page_width = 612.0f; settings.page_height = 792.0f; using (HTML2PDF html2pdf = new HTML2PDF(settings)) { html2pdf.Convert(htmlContent, "output.pdf"); } Library.Release(); // After (IronPDF) var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); $vbLabelText $csharpLabel 完整的 API 参考 命名空间映射 福昕 PDF 命名空间 IronPdf 同等产品 备注 foxit IronPdf 主命名空间 foxit.common IronPdf 常见类型 foxit.common.fxcrt 不适用 低级(不需要) foxit.pdf IronPdf PDF 文档操作 foxit.pdf.annots IronPdf.编辑 注释 foxit.addon.conversion IronPdf.Rendering HTML/ 图片转换 核心类映射 福昕 PDF SDK 类 IronPdf 同等产品 备注 库 不适用 IronPdf 自动管理 PDFDoc PDF 文档 主要文件类型 PDF 页 PdfDocument.Pages[i] 页面访问 HTML2PDF ChromePdfRenderer HTML 转换 文本页面 pdf.ExtractTextFromPage(i) 文本提取 水印 TextStamper</code> /ImageStamper` Watermarks 安全性 安全设置 PDF 安全 表格 pdf.Form 表格字段 元数据 pdf.MetaData 文档元数据 PDFDoc 方法 福昕 PDFDoc IronPDF PDFDocument 备注 new PDFDoc(path) PdfDocument.FromFile(路径) 从文件加载 doc.LoadW(password) PdfDocument.FromFile(路径, 密码) 密码保护 doc.GetPageCount() pdf.PageCount 页数属性 doc.GetPage(index) pdf.Pages[index] 按索引获取页面 doc.SaveAs(路径, 标志) pdf.SaveAs(路径) 保存文档 doc.Close() pdf.Dispose() 或 using 语句 清理 doc.InsertDocument() PdfDocument.Merge() 合并文档 HTML2PDF/转换 福昕 HTML2PDF IronPdf 同等产品 备注 new HTML2PDFSettingData() new ChromePdfRenderer() 创建呈现器 settings.page_width RenderingOptions.PaperSize 标准尺寸 settings.page_height RenderingOptions.SetCustomPaperSize() 定制尺寸 html2pdf.Convert(html, 路径) renderer.RenderHtmlAsPdf(html) HTML 字符串 html2pdf.ConvertFromURL(url, path) renderer.RenderUrlAsPdf(url) URL 转换。 水印设置 福昕水印 IronPdf 同等产品 备注 new Watermark(doc、文本、字体、大小、颜色) new TextStamper() 文本水印 WatermarkSettings.position VerticalAlignment</code> + <code>HorizontalAlignment 职位 WatermarkSettings.rotation 旋转 旋转角度 WatermarkSettings.opacity 容量 0-100 百分比 watermark.InsertToAllPages() pdf.ApplyStamp(stamper) 适用于所有 代码示例 示例 1:HTML 到 PDF 的转换 之前(福昕 PDF SDK): // NuGet: Install-Package Foxit.SDK using Foxit.SDK; using Foxit.SDK.Common; using Foxit.SDK.PDFConversion; using System; class Program { static void Main() { Library.Initialize("sn", "key"); HTML2PDFSettingData settingData = new HTML2PDFSettingData(); settingData.page_width = 612.0f; settingData.page_height = 792.0f; settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage; using (HTML2PDF html2pdf = new HTML2PDF(settingData)) { html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf"); } Library.Release(); } } // NuGet: Install-Package Foxit.SDK using Foxit.SDK; using Foxit.SDK.Common; using Foxit.SDK.PDFConversion; using System; class Program { static void Main() { Library.Initialize("sn", "key"); HTML2PDFSettingData settingData = new HTML2PDFSettingData(); settingData.page_width = 612.0f; settingData.page_height = 792.0f; settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage; using (HTML2PDF html2pdf = new HTML2PDF(settingData)) { html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf"); } Library.Release(); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>"); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>"); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel IronPDF 方法将 15 行以上的配置代码减少到仅 4 行。 没有库初始化,没有显式清理,没有复杂的设置对象。 有关更多 HTML 渲染选项,请参阅 HTML to PDF 文档。 示例 2:URL 到 PDF 的转换 之前(福昕 PDF SDK): // NuGet: Install-Package Foxit.SDK using Foxit.SDK; using Foxit.SDK.Common; using Foxit.SDK.PDFConversion; using System; class Program { static void Main() { Library.Initialize("sn", "key"); HTML2PDFSettingData settingData = new HTML2PDFSettingData(); settingData.page_width = 612.0f; settingData.page_height = 792.0f; settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage; using (HTML2PDF html2pdf = new HTML2PDF(settingData)) { html2pdf.ConvertFromURL("https://www.example.com", "output.pdf"); } Library.Release(); } } // NuGet: Install-Package Foxit.SDK using Foxit.SDK; using Foxit.SDK.Common; using Foxit.SDK.PDFConversion; using System; class Program { static void Main() { Library.Initialize("sn", "key"); HTML2PDFSettingData settingData = new HTML2PDFSettingData(); settingData.page_width = 612.0f; settingData.page_height = 792.0f; settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage; using (HTML2PDF html2pdf = new HTML2PDF(settingData)) { html2pdf.ConvertFromURL("https://www.example.com", "output.pdf"); } Library.Release(); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel IronPDF 内置的 Chromium 引擎可自动处理 JavaScript 执行、CSS 渲染和动态内容。 了解有关 URL 至 PDF 转换的更多信息。 示例 3:添加水印 之前(福昕 PDF SDK): // NuGet: Install-Package Foxit.SDK using Foxit.SDK; using Foxit.SDK.Common; using Foxit.SDK.PDFDoc; using System; class Program { static void Main() { Library.Initialize("sn", "key"); using (PDFDoc doc = new PDFDoc("input.pdf")) { doc.Load(""); Watermark watermark = new Watermark(doc, "Confidential", new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF); WatermarkSettings settings = new WatermarkSettings(); settings.flags = Watermark.e_WatermarkFlagASPageContents; settings.position = Watermark.Position.e_PosCenter; settings.rotation = -45.0f; settings.opacity = 0.5f; watermark.SetSettings(settings); watermark.InsertToAllPages(); doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal); } Library.Release(); } } // NuGet: Install-Package Foxit.SDK using Foxit.SDK; using Foxit.SDK.Common; using Foxit.SDK.PDFDoc; using System; class Program { static void Main() { Library.Initialize("sn", "key"); using (PDFDoc doc = new PDFDoc("input.pdf")) { doc.Load(""); Watermark watermark = new Watermark(doc, "Confidential", new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF); WatermarkSettings settings = new WatermarkSettings(); settings.flags = Watermark.e_WatermarkFlagASPageContents; settings.position = Watermark.Position.e_PosCenter; settings.rotation = -45.0f; settings.opacity = 0.5f; watermark.SetSettings(settings); watermark.InsertToAllPages(); doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal); } Library.Release(); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Editing; using System; class Program { static void Main() { var pdf = PdfDocument.FromFile("input.pdf"); pdf.ApplyWatermark(new TextStamper() { Text = "Confidential", FontSize = 48, Opacity = 50, Rotation = -45, VerticalAlignment = VerticalAlignment.Middle, HorizontalAlignment = HorizontalAlignment.Center }); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Editing; using System; class Program { static void Main() { var pdf = PdfDocument.FromFile("input.pdf"); pdf.ApplyWatermark(new TextStamper() { Text = "Confidential", FontSize = 48, Opacity = 50, Rotation = -45, VerticalAlignment = VerticalAlignment.Middle, HorizontalAlignment = HorizontalAlignment.Center }); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel IronPDF 的 TextStamper 提供基于属性的直观配置,而不是单独的设置对象和手动页面迭代。 有关其他选项,请参阅完整的 watermarking 文档。 示例 4:URL 转 PDF,带页眉和页脚 之前(福昕 PDF SDK): using foxit; using foxit.addon.conversion; class Program { static void Main() { Library.Initialize("sn", "key"); try { HTML2PDFSettingData settings = new HTML2PDFSettingData(); settings.page_width = 595.0f; // A4 settings.page_height = 842.0f; settings.page_margin_top = 100.0f; settings.page_margin_bottom = 100.0f; //福昕 PDF SDKhas limited header/footer support // Often requires post-processing or additional code using (HTML2PDF html2pdf = new HTML2PDF(settings)) { html2pdf.ConvertFromURL("https://www.example.com", "webpage.pdf"); } } finally { Library.Release(); } } } using foxit; using foxit.addon.conversion; class Program { static void Main() { Library.Initialize("sn", "key"); try { HTML2PDFSettingData settings = new HTML2PDFSettingData(); settings.page_width = 595.0f; // A4 settings.page_height = 842.0f; settings.page_margin_top = 100.0f; settings.page_margin_bottom = 100.0f; //福昕 PDF SDKhas limited header/footer support // Often requires post-processing or additional code using (HTML2PDF html2pdf = new HTML2PDF(settings)) { html2pdf.ConvertFromURL("https://www.example.com", "webpage.pdf"); } } finally { Library.Release(); } } } $vbLabelText $csharpLabel After (IronPDF): using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.WaitFor.RenderDelay(3000); // Wait for JS // Built-in header/footer support renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>", DrawDividerLine = true }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>", DrawDividerLine = true }; var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.WaitFor.RenderDelay(3000); // Wait for JS // Built-in header/footer support renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>", DrawDividerLine = true }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>", DrawDividerLine = true }; var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel IronPdf 提供本地页眉和页脚支持,具有 HTML 风格和动态页码占位符。 示例 5:PDF 安全性和加密 之前(福昕 PDF SDK): using foxit; using foxit.pdf; class Program { static void Main() { Library.Initialize("sn", "key"); try { using (PDFDoc doc = new PDFDoc("input.pdf")) { doc.LoadW(""); StdSecurityHandler securityHandler = new StdSecurityHandler(); securityHandler.Initialize( StdSecurityHandler.EncryptAlgorithm.e_CipherAES, "user_password", "owner_password", PDFDoc.Permission.e_PermPrint | PDFDoc.Permission.e_PermModify, 128); doc.SetSecurityHandler(securityHandler); doc.SaveAs("encrypted.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal); } } finally { Library.Release(); } } } using foxit; using foxit.pdf; class Program { static void Main() { Library.Initialize("sn", "key"); try { using (PDFDoc doc = new PDFDoc("input.pdf")) { doc.LoadW(""); StdSecurityHandler securityHandler = new StdSecurityHandler(); securityHandler.Initialize( StdSecurityHandler.EncryptAlgorithm.e_CipherAES, "user_password", "owner_password", PDFDoc.Permission.e_PermPrint | PDFDoc.Permission.e_PermModify, 128); doc.SetSecurityHandler(securityHandler); doc.SaveAs("encrypted.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal); } } finally { Library.Release(); } } } $vbLabelText $csharpLabel After (IronPDF): using IronPdf; class Program { static void Main() { var pdf = PdfDocument.FromFile("input.pdf"); // Set passwords pdf.SecuritySettings.OwnerPassword = "owner_password"; pdf.SecuritySettings.UserPassword = "user_password"; // Set permissions pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.EditAll; pdf.SecuritySettings.AllowUserCopyPasteContent = true; pdf.SecuritySettings.AllowUserAnnotations = true; pdf.SaveAs("encrypted.pdf"); } } using IronPdf; class Program { static void Main() { var pdf = PdfDocument.FromFile("input.pdf"); // Set passwords pdf.SecuritySettings.OwnerPassword = "owner_password"; pdf.SecuritySettings.UserPassword = "user_password"; // Set permissions pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.EditAll; pdf.SecuritySettings.AllowUserCopyPasteContent = true; pdf.SecuritySettings.AllowUserAnnotations = true; pdf.SaveAs("encrypted.pdf"); } } $vbLabelText $csharpLabel 性能考虑 重用 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 单元转换助手 Foxit PDF SDK 使用点; IronPdf 使用毫米。 在迁移过程中使用此辅助工具: public static class UnitConverter { public static double PointsToMm(double points) => points * 0.352778; public static double MmToPoints(double mm) => mm / 0.352778; public static double InchesToMm(double inches) => inches * 25.4; } // Usage: Convert Foxit's 72 points (1 inch) toIronPDFmillimeters renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm public static class UnitConverter { public static double PointsToMm(double points) => points * 0.352778; public static double MmToPoints(double mm) => mm / 0.352778; public static double InchesToMm(double inches) => inches * 25.4; } // Usage: Convert Foxit's 72 points (1 inch) toIronPDFmillimeters renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm $vbLabelText $csharpLabel 正确的资源处置 // GOOD - Using statement for automatic cleanup using (var pdf = PdfDocument.FromFile("large.pdf")) { string text = pdf.ExtractAllText(); } // pdf is disposed automatically // GOOD - Using statement for automatic cleanup using (var pdf = PdfDocument.FromFile("large.pdf")) { string text = pdf.ExtractAllText(); } // pdf is disposed automatically $vbLabelText $csharpLabel 故障排除 问题 1:Library.Initialize() 未找到 问题:IronPDF中不存在Library.Initialize() 。 解决方案:IronPDF使用了一种更简单的初始化模式: // Foxit PDF Library.Initialize(sn, key); //IronPDF- just set license key once at startup IronPdf.License.LicenseKey = "YOUR-KEY"; // Foxit PDF Library.Initialize(sn, key); //IronPDF- just set license key once at startup IronPdf.License.LicenseKey = "YOUR-KEY"; $vbLabelText $csharpLabel 问题 2:错误代码处理 问题:代码检查ErrorCode.e_ErrSuccess ,但IronPDF没有这个属性。 解决方案:使用标准的.NET异常处理: // Foxit PDF ErrorCode err = doc.LoadW(""); if (err != ErrorCode.e_ErrSuccess) { /* handle error */ } // IronPDF try { var pdf = PdfDocument.FromFile("input.pdf"); } catch (IOException ex) { Console.WriteLine($"Failed to load PDF: {ex.Message}"); } // Foxit PDF ErrorCode err = doc.LoadW(""); if (err != ErrorCode.e_ErrSuccess) { /* handle error */ } // IronPDF try { var pdf = PdfDocument.FromFile("input.pdf"); } catch (IOException ex) { Console.WriteLine($"Failed to load PDF: {ex.Message}"); } $vbLabelText $csharpLabel 问题 3:PDFDoc.Close() 未找到 问题:IronPDF中不存在doc.Close()方法。 解决方法:使用Dispose()或using语句: // Foxit PDF doc.Close(); // IronPDF pdf.Dispose(); // or better: wrap in using statement // Foxit PDF doc.Close(); // IronPDF pdf.Dispose(); // or better: wrap in using statement $vbLabelText $csharpLabel 迁移清单 迁移前 清点所有已使用的福昕 PDF SDK功能 文档许可证密钥位置 注意所有Library.Initialize()和Library.Release()调用 列出自定义设置(页面大小、边距等) 使用 ErrorCode 识别错误处理模式 将项目备份到版本控制系统 获取IronPDF许可证密钥 软件包迁移 从 .csproj 文件中移除福昕 PDF SDKDLL 引用 删除所有私有 NuGet 源配置 安装 IronPdf NuGet 包: dotnet add package IronPdf 更新命名空间导入 在启动时设置IronPDF许可证密钥 代码迁移 移除Library.Initialize()和Library.Release()调用 将ErrorCode检查替换为 try/catch 语句。 将PDFDoc替换为PdfDocument 将HTML2PDF替换为ChromePdfRenderer 将页面访问权限从GetPage(i)更新为Pages[i] 将SaveAs(path, flags)替换为SaveAs(path) 将Close()替换为Dispose()或 using 语句 更新水印代码,使用TextStamper 将单位从点转换为毫米 测试 验证 HTML 转 PDF 输出是否符合预期 测试 PDF 加载和文本提取 验证合并功能 检查水印外观 测试安全/加密功能 验证表单字段操作 性能测试 后迁移 删除福昕 PDF SDKDLL 文件 删除与 Foxit 相关的配置文件 更新文档 清理未使用的辅助代码 迁移。 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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 从 ActivePDF 迁移到 IronPDF:(.NET指南)如何从 fo.net 迁移到 IronPDF ...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多