迁移指南 如何用 C# 从 Playwright 迁移到 IronPDF Curtis Chau 已发布:2026年2月1日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从编剧for .NET 迁移到IronPDF可将您的 PDF 生成工作流程从以测试为中心的浏览器自动化工具转变为专门构建的 PDF 库。 本指南提供了一个完整的、循序渐进的迁移路径,消除了复杂的异步模式、浏览器生命周期管理和 400MB 以上的浏览器下载,同时提供了更好的性能和专业的 PDF 功能。 为什么要从编剧迁移到 IronPDF. 了解编剧for .NET. Playwright for .NET 是微软浏览器自动化工具系列的一部分; 该翻译的结构围绕着在 Chromium、Firefox 和 WebKit 上提供全面的测试功能。 该库采用 "测试优先 "的设计,这意味着其主要关注点是涉及基于浏览器的测试场景。 虽然编剧支持生成 PDF,但该功能更多的是辅助功能,并不提供专用 PDF 工具中的细粒度配置。 Playwright for .NET 主要是一个浏览器自动化和测试框架,PDF 生成是其次要功能。 与 PuppeteerSharp 一样,Playwright 也使用浏览器的打印-PDF 功能生成 PDF,相当于点击 Ctrl+P。这将生成针对纸张优化的打印就绪输出,与屏幕渲染不同。 测试框架问题 Playwright 设计用于端到端测试,而非文档生成。 在将其用于 PDF 时,这会产生一些基本问题: 1.首次使用前需要下载 400MB+ 浏览器。编剧的默认配置需要下载多个浏览器,这对于资源紧张的环境来说可能是一个考虑因素。 2.复杂的异步模式与浏览器上下文和页面管理。 开发人员必须熟悉浏览器上下文和页面管理,以及正确的处理方法。 3.测试优先架构未针对文档生成进行优化。 4.打印到 PDF 的限制相当于 Ctrl+P 浏览器打印。 布局可以回流,默认情况下可以省略背景,输出为分页打印。 5.不支持 PDF/A 或 PDF/UA,以符合可访问性要求。编剧无法生成符合 PDF/A(存档)或 PDF/UA(可访问性)标准的文档。 对于 508 条款、欧盟可访问性指令或长期存档要求,您需要一个专用的 PDF 库。 6.资源繁重的操作需要完整的浏览器实例。 编剧与IronPDF性能对比 指标 编剧 IronPDF 主要目的 浏览器测试 生成 PDF 浏览器下载 400MB+ (Chromium、Firefox、WebKit) 内置优化引擎 首次渲染(冷启动) 4.5 秒钟 2.8 秒钟 后续渲染 3.8-4.1 秒 0.8-1.2 秒 每次转换的内存 280-420MB 80-120MB API 复杂性 异步浏览器/上下文/页面生命周期 同步单行本 初始化 playwright install + CreateAsync + LaunchAsync new ChromePdfRenderer() PDF/A支持 不可用 全面支持 PDF/UA 辅助功能 不可用 全面支持 数字签名 不可用 全面支持 PDF 编辑 不可用 合并、拆分、盖章、编辑 专业支持 社区 有服务水平协议的商业翻译 IronPDF 以 PDF 生成为重点。 与以测试为中心的编剧不同,IronPDF 提供了各种以文档为中心的 API 功能。 它依赖于单个优化的 Chromium 实例,有利于提高效率并提供同步和异步操作。 这将为需要 PDF 功能的开发人员提供更简单的思维模型和工作流程。 对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了一种专用的 PDF 解决方案,它可以消除浏览器自动化开销,同时提供更好的性能和专业文档功能。 开始之前 前提条件 .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 访问权限:能够安装 NuGet 包 IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。 NuGet 软件包变更 # Remove Playwright dotnet remove package Microsoft.Playwright # Remove browser binaries (reclaim ~400MB disk space) # Delete the .playwright folder in your project or user directory # Add IronPDF dotnet add package IronPdf # Remove Playwright dotnet remove package Microsoft.Playwright # Remove browser binaries (reclaim ~400MB disk space) # Delete the .playwright folder in your project or user directory # Add IronPDF dotnet add package IronPdf SHELL IronPDF无需安装playwright--渲染引擎已自动捆绑。 许可配置 // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 完整的 API 参考 命名空间变更 // Before: Playwright using Microsoft.Playwright; using System.Threading.Tasks; // After: IronPDF using IronPdf; using IronPdf.Rendering; // Before: Playwright using Microsoft.Playwright; using System.Threading.Tasks; // After: IronPDF using IronPdf; using IronPdf.Rendering; $vbLabelText $csharpLabel 核心 API 映射 Playwright API IronPdf API 备注 Playwright.CreateAsync() new ChromePdfRenderer() 无需异步 playwright.Chromium.LaunchAsync() 不需要 无浏览器管理 browser.NewPageAsync() 不需要 无页面上下文 page.GotoAsync(url) renderer.RenderUrlAsPdf(url) 直接呈现 URL page.SetContentAsync(html)</code> +page.PdfAsync()|renderer.RenderHtmlAsPdf(html)` 单一方法 page.CloseAsync() 不需要 自动清理 browser.CloseAsync() 不需要 自动清理 PagePdfOptions.格式 RenderingOptions.PaperSize 纸张大小 PagePdfOptions.Margin RenderingOptions.MarginTop/Bottom/Left/Right 个别页边距 PagePdfOptions.DisplayHeaderFooter RenderingOptions.TextHeader</code>/<code>TextFooter 页眉/页脚 PagePdfOptions.HeaderTemplate RenderingOptions.HtmlHeader HTML 标题 PagePdfOptions.FooterTemplate RenderingOptions.HtmlFooter HTML 页脚 <span class="pageNumber">代码 {page} 页码占位符 代码迁移示例 示例 1:HTML 字符串到 PDF 的转换 之前(编剧): // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); string html = "<h1>Hello World</h1><p>This is a test PDF.</p>"; await page.SetContentAsync(html); await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" }); await browser.CloseAsync(); } } // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); string html = "<h1>Hello World</h1><p>This is a test PDF.</p>"; await page.SetContentAsync(html); await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" }); await browser.CloseAsync(); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); string html = "<h1>Hello World</h1><p>This is a test PDF.</p>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); string html = "<h1>Hello World</h1><p>This is a test PDF.</p>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel 本例展示了基本的架构差异。编剧需要五个异步操作:Playwright.CreateAsync()、Chromium.LaunchAsync()、NewPageAsync()、SetContentAsync()和PdfAsync(),Plus 使用 CloseAsync() 进行显式浏览器清理。 IronPDF 消除了所有这些复杂性:创建一个 ChromePdfRenderer ,调用 RenderHtmlAsPdf() 和 SaveAs() 。 无异步模式、无浏览器生命周期、无清理代码。IronPDF的方法提供了更简洁的语法和与现代 .NET 应用程序更好的集成。 请参阅 HTML 转 PDF 文档,了解全面的示例。 示例 2:URL 到 PDF 的转换 之前(编剧): // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); await page.GotoAsync("https://www.example.com"); await page.PdfAsync(new PagePdfOptions { Path = "webpage.pdf", Format = "A4" }); await browser.CloseAsync(); } } // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); await page.GotoAsync("https://www.example.com"); await page.PdfAsync(new PagePdfOptions { Path = "webpage.pdf", Format = "A4" }); await browser.CloseAsync(); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel Playwright 使用 GotoAsync() 导航到 URL,然后使用 PdfAsync() 。IronPDF提供了一个 RenderUrlAsPdf() 方法,可在一次调用中处理导航和 PDF 生成。 请注意,Playwright 需要在 PagePdfOptions 中指定 Format ,而IronPDF使用RenderingOptions.PaperSize进行纸张大小配置。 在我们的教程中了解更多信息。 示例 3:带边距的自定义页面大小 之前(编剧): // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main() { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>"); await page.PdfAsync(new PagePdfOptions { Path = "custom.pdf", Format = "Letter", Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" } }); } } // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main() { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>"); await page.PdfAsync(new PagePdfOptions { Path = "custom.pdf", Format = "Letter", Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" } }); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter; renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginLeft = 12; renderer.RenderingOptions.MarginRight = 12; var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>"); pdf.SaveAs("custom.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter; renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginLeft = 12; renderer.RenderingOptions.MarginRight = 12; var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>"); pdf.SaveAs("custom.pdf"); } } $vbLabelText $csharpLabel Playwright 使用基于字符串的页边距值("1in", "0.5in"),而IronPDF使用数字毫米值。 换算为:1 英寸 = 25.4 毫米,因此 "1 英寸" 变为25,"0.5 英寸" 约为12。编剧的 Format = "Letter" 映射到IronPDF的 PaperSize = PdfPaperSize.Letter。 示例 4:页眉、页脚和自定义设置 之前(编剧): // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>"; await page.SetContentAsync(html); await page.PdfAsync(new PagePdfOptions { Path = "custom.pdf", Format = "A4", Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" }, DisplayHeaderFooter = true, HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>", FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>" }); await browser.CloseAsync(); } } // NuGet: Install-Package Microsoft.Playwright using Microsoft.Playwright; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>"; await page.SetContentAsync(html); await page.PdfAsync(new PagePdfOptions { Path = "custom.pdf", Format = "A4", Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" }, DisplayHeaderFooter = true, HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>", FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>" }); await browser.CloseAsync(); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.MarginTop = 10; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.MarginLeft = 10; renderer.RenderingOptions.MarginRight = 10; renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.TextHeader.CenterText = "Header"; renderer.RenderingOptions.TextFooter.CenterText = "Page {page}"; string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("custom.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.MarginTop = 10; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.MarginLeft = 10; renderer.RenderingOptions.MarginRight = 10; renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.TextHeader.CenterText = "Header"; renderer.RenderingOptions.TextFooter.CenterText = "Page {page}"; string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("custom.pdf"); } } $vbLabelText $csharpLabel 该示例显示了页眉/页脚占位符语法上的差异。编剧使用基于 HTML 类的占位符(<span class="pageNumber"></span>),而IronPDF使用大括号占位符({page})。 请注意,Playwright 需要 DisplayHeaderFooter = true 才能启用页眉/页脚,而IronPDF会在您设置页眉/页脚内容时自动启用。 关键迁移说明 同步到同步转换 Playwright 要求全程使用 async/await; IronPdf 支持同步操作: // Playwright: Async required public async Task<byte[]> GeneratePdfAsync(string html) { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); await page.SetContentAsync(html); return await page.PdfAsync(); } // IronPDF: Sync is simpler public byte[] GeneratePdf(string html) { var renderer = new ChromePdfRenderer(); return renderer.RenderHtmlAsPdf(html).BinaryData; } // Playwright: Async required public async Task<byte[]> GeneratePdfAsync(string html) { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); await page.SetContentAsync(html); return await page.PdfAsync(); } // IronPDF: Sync is simpler public byte[] GeneratePdf(string html) { var renderer = new ChromePdfRenderer(); return renderer.RenderHtmlAsPdf(html).BinaryData; } $vbLabelText $csharpLabel 边际单位转换 Playwright 使用字符串单位; IronPdf 使用数字毫米: 编剧 IronPdf (mm) "1in"|25` "0.5 英寸" 12 "1cm" 10 页眉/页脚占位符转换 剧作家类 IronPdf 占位符 <span class="pageNumber">代码 {page} <span class="totalPages">代码 {总页数} <span class="date">代码 {日期} <span class="title"></code>|<code>{html-title} 消除浏览器生命周期 删除所有浏览器管理代码: // Playwright: Explicit cleanup required await page.CloseAsync(); await browser.CloseAsync(); playwright.Dispose(); // IronPDF: No disposal needed - just use the renderer var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Playwright: Explicit cleanup required await page.CloseAsync(); await browser.CloseAsync(); playwright.Dispose(); // IronPDF: No disposal needed - just use the renderer var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); $vbLabelText $csharpLabel 迁移后的新功能 迁移到IronPDF后,您将获得编剧无法提供的功能: PDF 合并 var pdf1 = renderer.RenderHtmlAsPdf(html1); var pdf2 = renderer.RenderHtmlAsPdf(html2); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); var pdf1 = renderer.RenderHtmlAsPdf(html1); var pdf2 = renderer.RenderHtmlAsPdf(html2); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel 水印 pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>"); pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>"); $vbLabelText $csharpLabel 密码保护 pdf.SecuritySettings.OwnerPassword = "admin"; pdf.SecuritySettings.UserPassword = "readonly"; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.OwnerPassword = "admin"; pdf.SecuritySettings.UserPassword = "readonly"; pdf.SecuritySettings.AllowUserCopyPasteContent = false; $vbLabelText $csharpLabel 数字签名 var signature = new PdfSignature("certificate.pfx", "password"); pdf.Sign(signature); var signature = new PdfSignature("certificate.pfx", "password"); pdf.Sign(signature); $vbLabelText $csharpLabel PDF/A 合规性 pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b); pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b); $vbLabelText $csharpLabel 迁移清单 迁移前 识别所有编剧PDF 生成代码 文档边距值(将英寸/厘米转换为毫米) 注意页眉/页脚占位符语法以进行转换 从ironpdf.com获取IronPDF许可证密钥 软件包变更 删除Microsoft.Playwright NuGet 包 删除.playwright文件夹以回收约 400MB 磁盘空间 安装IronPdf NuGet 包: dotnet add package IronPdf 代码更改 更新命名空间导入 使用ChromePdfRenderer替换异步浏览器生命周期 将page.SetContentAsync() + page.PdfAsync()转换为RenderHtmlAsPdf() 将page.GotoAsync() + page.PdfAsync()转换为RenderUrlAsPdf() 将边距字符串转换为毫米值 转换页眉/页脚占位符语法 删除所有浏览器/页面销毁代码 在应用程序启动时添加许可证初始化 后迁移 PDF 输出的视觉比较 验证页眉/页脚的显示是否正确,并显示页码 测试页边距和页面尺寸的准确性 根据需要添加新功能(安全、水印、合并) 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# 从 PrinceXML 迁移到 IronPDF如何用 C# 从 PeachPDF 迁移到...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多