迁移指南 如何用 C# 从 wkhtmltopdf 迁移到 IronPDF Curtis Chau 已发布:2026年2月1日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 wkhtmltopdf 一直是使用 Qt WebKit 将 HTML 文档转换为 PDF 的广泛工具。 尽管该项目因其命令行功能和免费许可而深受开发人员的欢迎,但它现在存在的严重安全风险已不容忽视。 该库已于 2016-2017 年正式废弃,一个 CRITICAL 严重性漏洞(CVE-2022-35583)仍永久未打补丁。 本指南提供了从wkhtmltopdf到IronPDF的完整迁移路径,为需要从应用程序中消除这种安全风险的专业 .NET 开发人员提供了分步指导、代码比较和实用示例。 关键安全警告:CVE-2022-35583 wkhtmltopdf 包含一个永远无法修复的重要安全漏洞: 问题 严重性 现状 CVE-2022-35583 关键 (9.8/10) UNPATCHED 未完成 SSRF 漏洞 基础设施接管风险 UNPATCHED 未完成 最近更新 2016-2017 已放弃。 WebKit 版本 2015 年(Qt WebKit) 已关闭 CSS 网格支持 无 破译 Flexbox 支持 部分翻译 破译 ES6+JavaScript 无 破译 SSRF 攻击如何工作 服务器端请求伪造漏洞允许攻击者访问内部服务、窃取凭证、扫描您的内部网络并通过伪造的 HTML 外泄敏感数据: <iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe> <img src="http://internal-database:5432/admin"/> <iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe> <img src="http://internal-database:5432/admin"/> HTML 当wkhtmltopdf渲染 HTML 时,它会绕过防火墙和安全控制,从服务器的网络上下文中获取这些 URL。 受影响的封装库 wkhtmltopdf 的所有 .NET 封装程序都会继承这些漏洞: 封装库 现状 安全风险 DinkToPdf 放弃 ⚠️ CRITICAL Rotativa 放弃 ⚠️ CRITICAL TuesPechkin 放弃 ⚠️ CRITICAL WkHtmlToPdf-DotNet 放弃 ⚠️ CRITICAL NReco.PdfGenerator 使用 wkhtmltopdf ⚠️ CRITICAL 如果您使用这些库中的任何一个,您就有可能受到 CVE-2022-35583 的攻击。 IronPDF与 wkhtmltopdf:功能对比 了解架构差异有助于技术决策者评估迁移投资: 特征 wkhtmltopdf IronPDF 许可 LGPLv3 (免费) 商业翻译 渲染引擎 Qt WebKit (2015) 当前的 Chromium 引擎 安全漏洞 CVE-2022-35583,主要未修补问题 无已知 CVE 主动维护 已放弃,自 2017 年以来未进行有意义的更新 定期发布,积极维护 支持现代网络标准 有限(flexbox 已损坏,无 CSS 网格) 全面支持 集成与支持 仅限于社区论坛 广泛的文档和专门的支持 CSS 网格 ❌ 不支持 ✅ 全面支持 Flexbox ⚠️ Broken ✅ 全面支持 ES6+JavaScript ❌ 不支持 ✅ 全面支持 同步/等待 ❌ 不支持 ✅ 全面支持 PDF 操作 ❌ 不支持 ✅ 全面支持 数字签名 ❌ 不支持 ✅ 全面支持 PDF/A合规性 ❌ 不支持 ✅ 全面支持 快速入门:wkhtmltopdf 到IronPDF的迁移 迁移工作可以通过以下基本步骤立即开始。 步骤 1:删除wkhtmltopdf软件包和二进制文件 删除所有wkhtmltopdf封装包: # Removewkhtmltopdfwrapper (whichever you're using) dotnet remove package WkHtmlToPdf-DotNet dotnet remove package DinkToPdf dotnet remove package TuesPechkin dotnet remove package Rotativa dotnet remove package Rotativa.AspNetCore dotnet remove package NReco.PdfGenerator # Removewkhtmltopdfbinary from your deployment # Delete wkhtmltopdf.exe, wkhtmltox.dll, etc. # Removewkhtmltopdfwrapper (whichever you're using) dotnet remove package WkHtmlToPdf-DotNet dotnet remove package DinkToPdf dotnet remove package TuesPechkin dotnet remove package Rotativa dotnet remove package Rotativa.AspNetCore dotnet remove package NReco.PdfGenerator # Removewkhtmltopdfbinary from your deployment # Delete wkhtmltopdf.exe, wkhtmltox.dll, etc. SHELL 步骤2:安装IronPDF # AddIronPDF(secure, modern alternative) dotnet add package IronPdf # AddIronPDF(secure, modern alternative) dotnet add package IronPdf SHELL 步骤 3:更新命名空间 用 IronPdf 命名空间替换wkhtmltopdf命名空间: // Before (wkhtmltopdf) using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; // After (IronPDF) using IronPdf; // Before (wkhtmltopdf) using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; // After (IronPDF) using IronPdf; $vbLabelText $csharpLabel 步骤 4:初始化许可证 在应用程序启动时添加许可证初始化: IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 代码迁移示例 将HTML转换为PDF 最基本的操作揭示了这些 .NET PDF 方法之间的复杂性差异。 wkhtmltopdf 方法: // NuGet: Install-Package WkHtmlToPdf-DotNet using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; using System.IO; class Program { static void Main() { var converter = new SynchronizedConverter(new PdfTools()); var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, 定位= Orientation.Portrait, PaperSize = PaperKind.A4 }, Objects = { new ObjectSettings() { HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>" } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("output.pdf", pdf); } } // NuGet: Install-Package WkHtmlToPdf-DotNet using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; using System.IO; class Program { static void Main() { var converter = new SynchronizedConverter(new PdfTools()); var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, 定位= Orientation.Portrait, PaperSize = PaperKind.A4 }, Objects = { new ObjectSettings() { HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>" } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel IronPdf 方法: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>"); 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("<h1>Hello World</h1><p>This is a PDF from HTML.</p>"); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel wkhtmltopdf 要求使用 PdfTools 创建一个同步转换器,使用 GlobalSettings 和 Objects 构建一个HtmlToPdfDocument,设置诸如 ColorMode, Orientation 和 PaperSize 等属性,调用 converter.Convert() 来转换 PDF 文件。Convert()以获取原始字节,并使用 File.WriteAllBytes() 手动写入文件。 IronPDF 完全消除了这一仪式--创建一个 ChromePdfRenderer, 调用 RenderHtmlAsPdf(), 并使用内置的 SaveAs() 方法。 有关 HTML 转 PDF 的高级应用场景,请参阅 HTML 转 PDF 指南。 将 URL 转换为 PDF URL 到 PDF 的转换显示出类似的复杂性模式。 wkhtmltopdf 方法: // NuGet: Install-Package WkHtmlToPdf-DotNet using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; using System.IO; class Program { static void Main() { var converter = new SynchronizedConverter(new PdfTools()); var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, 定位= Orientation.Portrait, PaperSize = PaperKind.A4 }, Objects = { new ObjectSettings() { Page = "https://www.example.com" } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("webpage.pdf", pdf); } } // NuGet: Install-Package WkHtmlToPdf-DotNet using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; using System.IO; class Program { static void Main() { var converter = new SynchronizedConverter(new PdfTools()); var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, 定位= Orientation.Portrait, PaperSize = PaperKind.A4 }, Objects = { new ObjectSettings() { Page = "https://www.example.com" } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("webpage.pdf", pdf); } } $vbLabelText $csharpLabel 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("webpage.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("webpage.pdf"); } } $vbLabelText $csharpLabel wkhtmltopdf 使用 ObjectSettings 中的 Page 属性指定 URL,需要相同的文档构建模式。IronPDF提供了专门的 RenderUrlAsPdf() 方法,可以清晰地表达意图。 请浏览 URL to PDF 文档,了解身份验证和自定义页眉选项。 自定义设置:带有页面配置的 HTML 文件 配置方向、页边距和纸张大小需要采用不同的方法。 wkhtmltopdf 方法: // NuGet: Install-Package WkHtmlToPdf-DotNet using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; using System.IO; class Program { static void Main() { var converter = new SynchronizedConverter(new PdfTools()); var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, 定位= Orientation.Landscape, PaperSize = PaperKind.A4, Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 } }, Objects = { new ObjectSettings() { Page = "input.html", WebSettings = { DefaultEncoding = "utf-8" } } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("custom-output.pdf", pdf); } } // NuGet: Install-Package WkHtmlToPdf-DotNet using WkHtmlToPdfDotNet; using WkHtmlToPdfDotNet.Contracts; using System.IO; class Program { static void Main() { var converter = new SynchronizedConverter(new PdfTools()); var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, 定位= Orientation.Landscape, PaperSize = PaperKind.A4, Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 } }, Objects = { new ObjectSettings() { Page = "input.html", WebSettings = { DefaultEncoding = "utf-8" } } } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("custom-output.pdf", pdf); } } $vbLabelText $csharpLabel IronPdf 方法: // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; renderer.RenderingOptions.MarginTop = 10; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.MarginLeft = 10; renderer.RenderingOptions.MarginRight = 10; renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; var pdf = renderer.RenderHtmlFileAsPdf("input.html"); pdf.SaveAs("custom-output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; renderer.RenderingOptions.MarginTop = 10; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.MarginLeft = 10; renderer.RenderingOptions.MarginRight = 10; renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; var pdf = renderer.RenderHtmlFileAsPdf("input.html"); pdf.SaveAs("custom-output.pdf"); } } $vbLabelText $csharpLabel wkhtmltopdf 将设置嵌套在 GlobalSettings 和 Objects 中,其中 MarginSettings 是一个单独的对象。IronPDF提供直接的渲染选项属性,其名称清晰明了,如 PaperOrientation, MarginTop 和 PaperSize. wkhtmltopdfAPI 到IronPDF映射参考 这种映射通过显示直接的 API 对应关系来加速迁移: CLI 到 IronPdf 的映射 wkhtmltopdf CLI 选项 IronPdf 同等产品 备注 wkhtmltopdf input.html output.pdf renderer.RenderHtmlFileAsPdf() 文件到 PDF wkhtmltopdf URL output.pdf renderer.RenderUrlAsPdf() URL 至 PDF --页面大小 A4 RenderingOptions.PaperSize = PdfPaperSize.A4 纸张大小 --页面大小 Letter</code>|<code>RenderingOptions.PaperSize = PdfPaperSize.Letter 美国信函 --面向景观 RenderingOptions.PaperOrientation = Landscape 定位 --margin-top 10mm``|RenderingOptions.MarginTop = 10` 边距(毫米 --margin-bottom 10mm RenderingOptions.MarginBottom = 10 --边距左 10 毫米 RenderingOptions.MarginLeft = 10 --右边距 10 毫米 RenderingOptions.MarginRight = 10 --header-html header.html RenderingOptions.HtmlHeader HTML 标题 --footer-center "[page]" {page} 占位符 页码 --footer-center"[toPage]" {total-pages} 占位符 总页数 --enable-javascript 默认已启用 JavaScript --javascript--延迟 500 RenderingOptions.WaitFor.RenderDelay = 500 JS 延误 --dpi 300 RenderingOptions.Dpi=300 DPI 设置 --grayscale RenderingOptions.GrayScale = true<br 灰度 C# Wrapper API 映射 wkhtmltopdf 封装程序 IronPDF 备注 同步转换器 ChromePdfRenderer 主呈现器 HtmlToPdfDocument 渲染选项 配置 GlobalSettings.Out pdf.SaveAs() 输出文件 GlobalSettings.PaperSize RenderingOptions.PaperSize 纸张大小 GlobalSettings.Orientation RenderingOptions.PaperOrientation 定位 GlobalSettings.Margins RenderingOptions.Margin* 个别页边距 对象设置.页面 RenderHtmlFileAsPdf() 文件输入 ObjectSettings.HtmlContent RenderHtmlAsPdf() HTML 字符串 converter.Convert(doc) renderer.RenderHtmlAsPdf() 生成 PDF 占位符语法迁移 wkhtmltopdf 占位符 IronPdf 占位符 [页面] {page} [toPage] {总页数} [日期] {日期} [时间] {时间} [标题] {html-title} [url] {url} 常见迁移问题和解决方案 问题 1:页眉/页脚占位符语法 wkhtmltopdf: 使用方括号语法,如[页面]和[toPage]。 解决方案:更新IronPDF的大括号占位符: // Before (wkhtmltopdf) FooterSettings = { Left = "Page [page] of [toPage]" } // After (IronPDF) renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>", MaxHeight = 25 }; // Before (wkhtmltopdf) FooterSettings = { Left = "Page [page] of [toPage]" } // After (IronPDF) renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>", MaxHeight = 25 }; $vbLabelText $csharpLabel 问题 2:JavaScript 延迟配置 wkhtmltopdf:使用 JavascriptDelay 属性,可靠性有限。 解决方案: IronPdf 提供多种选择: renderer.RenderingOptions.EnableJavaScript = true; // Option 1: Fixed delay renderer.RenderingOptions.WaitFor.RenderDelay(500); // Option 2: Wait for specific element (more reliable) renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded"); // Option 3: Wait forJavaScriptcondition renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true"); renderer.RenderingOptions.EnableJavaScript = true; // Option 1: Fixed delay renderer.RenderingOptions.WaitFor.RenderDelay(500); // Option 2: Wait for specific element (more reliable) renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded"); // Option 3: Wait forJavaScriptcondition renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true"); $vbLabelText $csharpLabel 问题 3:现代 CSS 无法渲染 症状: CSS 网格和 Flexbox 布局在wkhtmltopdf中呈现不正确。 解决方案:IronPDF的 Chromium 引擎可正确处理现代 CSS: // This CSS now works with IronPDF var html = @" <style> .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } .flex { display: flex; justify-content: space-between; align-items: center; } </style> <div class='grid'> <div>Column 1</div> <div>Column 2</div> <div>Column 3</div> </div>"; var pdf = renderer.RenderHtmlAsPdf(html); // This CSS now works with IronPDF var html = @" <style> .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } .flex { display: flex; justify-content: space-between; align-items: center; } </style> <div class='grid'> <div>Column 1</div> <div>Column 2</div> <div>Column 3</div> </div>"; var pdf = renderer.RenderHtmlAsPdf(html); $vbLabelText $csharpLabel 第 4 期:同步与异步渲染 wkhtmltopdf:封装器是同步和阻塞线程。 解决方案:IronPDF支持异步渲染: public async Task<byte[]> GeneratePdfAsync(string html) { var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync(html); return pdf.BinaryData; } public async Task<byte[]> GeneratePdfAsync(string html) { var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync(html); return pdf.BinaryData; } $vbLabelText $csharpLabel wkhtmltopdf迁移清单 迁移前任务 审核您的代码库,确定所有wkhtmltopdf的使用情况: # Find allwkhtmltopdfreferences grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" . grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" . # Find allwkhtmltopdfreferences grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" . grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" . SHELL 查找并记录wkhtmltopdf二进制文件,以便删除。 文档当前设置(纸张大小、页边距、页眉/页脚)。 代码更新任务 1.删除所有wkhtmltopdf封装 NuGet 软件包 2.删除wkhtmltopdf二进制文件(wkhtmltopdf.exe、wkhtmltox.dll) 3.安装 IronPdf NuGet 软件包 4.将名称空间导入从 WkHtmlToPdfDotNet 更新为 IronPdf 5.将同步转换器替换为 ChromePdfRenderer 6.将HtmlToPdfDocument模式转换为直接呈现方法 7.更新 GlobalSettings 配置为 RenderingOptions 8.将边距配置从 MarginSettings 转换为单个属性 9.更新占位符语法([page] → {page},[toPage]→ {total-pages}) 10.在启动时添加 IronPdf 许可证初始化功能 迁移后测试 迁移后,验证这些方面: PDF 输出的可视化比较(应通过现代 CSS 支持加以改进) 验证现代 CSS 渲染(CSS 栅格和 Flexbox 现在可以使用) 测试JavaScript较多的页面 安全扫描以确认没有wkhtmltopdf二进制文件残留 性能比较负载测试 安全验证 # Scan for any remainingwkhtmltopdfartifacts find /var/www/ -name "*wkhtmlto*" 2>/dev/null find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null docker images | grep wkhtmltopdf # Check if any process is still using it ps aux | grep wkhtmltopdf # Scan for any remainingwkhtmltopdfartifacts find /var/www/ -name "*wkhtmlto*" 2>/dev/null find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null docker images | grep wkhtmltopdf # Check if any process is still using it ps aux | grep wkhtmltopdf SHELL 迁移到IronPDF的主要优势 从wkhtmltopdf迁移到IronPDF有几个关键优势: 安全性: CVE-2022-35583 和所有wkhtmltopdf漏洞均已消除。IronPDF没有已知的 CVE,并定期接受安全更新。 现代渲染引擎:IronPDF使用最新的 Chromium 引擎,确保完全支持 CSS3、CSS Grid、Flexbox 和 ES6+ JavaScript。 正确呈现现代框架。 简化 API:直接渲染方法取代文档构造模式。 内置的 SaveAs() 方法无需手动处理字节。 扩展功能: PDF 操作、数字签名、PDF/A 合规性、水印和合并/拆分操作是wkhtmltopdf无法提供的内置功能。 积极开发:随着 .NET 10 和 C# 14 的普及,IronPDF 将持续更新,确保与当前和未来的 .NET 版本兼容。 异步支持:通过原生 async/await 支持,防止高负载 Web 应用程序中的线程阻塞。 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# 从 XFINIUM.PDF 迁移到 IronPDF如何用 C# 从 Winnovative 迁移...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多