迁移指南 如何用 C# 从 TallComponents 迁移到 IronPDF Curtis Chau 已发布:2026年2月1日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 当 Apryse 收购TallComponents时,.NET PDF 的格局发生了重大变化。 随着TallComponents不再提供新的许可证,现有用户被重新定向到 iText SDK,使用 TallPDF 和 PDFKit 的开发人员面临着一个不可避免的决定:要么现在迁移,要么冒着运行不支持软件的风险,因为已知的渲染错误将持续到 2026 年甚至更久。 本指南提供了从TallComponents到IronPDF的完整迁移路径,包括分步说明、API 映射和实际代码示例,以帮助专业 .NET 开发人员高效过渡。 为什么现在必须迁移 TallComponents? TallComponents 曾经是 C# PDF 生成领域一个受人尊敬的名字。 该库提供基于 XML 的文档工作流程和程序化 PDF 操作。 然而,Apryse 的收购终止了新 License 的销售,从根本上改变了开发团队的计算方式。 TallComponents的关键限制 决定迁移的原因不仅仅是供应商的支持--TallComponents 背负着巨大的技术债务: 产品停产:自 Apryse 被收购以来,不再提供新的许可证。TallComponents官方网站明确指出,新的许可证销售已经结束,引导潜在用户采用 iText SDK。 不支持 HTML 转 PDF:与现代 PDF 库不同,TallComponents 不支持直接将 HTML 转换为 PDF。 支持平台的开发人员已经证实了这一局限性,并指出可以将 Pechkin 等第三方解决方案作为替代方案。 已记录的渲染错误:变更日志揭示了大量的渲染问题,包括空白页面渲染、图形缺失、JPEG 图像处理不可靠以及字体显示不正确。 这些错误在停产前从未解决。 不提供支持或更新:如果没有积极的维护,任何安全漏洞或与 .NET 10 和 C# 14 的兼容性问题都将得不到解决。 IronPDF:现代TallComponents的替代品 IronPDF解决了使TallComponents在现代开发工作流程中存在问题的核心限制: 特征 TallComponents IronPDF 销售现状 停止新销售 积极开发和销售 支持 HTML 转 PDF 否 是(使用 Chromium 的 HTML5/CSS3) 渲染保真度 已知错误和问题 久经考验的可靠性 安装 复杂,手动 简单使用 NuGet 客户支持 过渡到 iText SDK 积极的支持和社区 未来可用性 报废 长期可行性 两者形成了鲜明的对比:TallComponents 提供了不同时代的基于 XML 的 .NET 开发方法,而IronPDF则提供了 Chromium 驱动的 HTML 渲染功能,符合当今开发人员构建应用程序的方式。 快速入门:TallComponents 到IronPDF的迁移 步骤 1:替换 NuGet 软件包 从您的项目中删除所有TallComponents软件包: # RemoveTallComponentspackages dotnet remove package TallComponents.PDF.Kit dotnet remove package TallComponents.PDF.Layout dotnet remove package TallComponents.PDF.Layout.Drawing # RemoveTallComponentspackages dotnet remove package TallComponents.PDF.Kit dotnet remove package TallComponents.PDF.Layout dotnet remove package TallComponents.PDF.Layout.Drawing SHELL 安装 IronPDF: # Install IronPDF dotnet add package IronPdf # Install IronPDF dotnet add package IronPdf SHELL 对于专业框架,IronPdf 提供专用扩展包: Blazor 服务器: PM > Install-Package IronPdf.Extensions.Blazor PM > Install-Package IronPdf.Extensions.Blazor SHELL MAUI: PM > Install-Package IronPdf.Extensions.Maui PM > Install-Package IronPdf.Extensions.Maui SHELL MVC框架: PM > Install-Package IronPdf.Extensions.Mvc.Framework PM > Install-Package IronPdf.Extensions.Mvc.Framework SHELL 步骤 2:更新命名空间 用 IronPdf 命名空间替换TallComponents命名空间: // Before (TallComponents) using TallComponents.PDF.Kit; using TallComponents.PDF.Layout; using TallComponents.PDF.Layout.Drawing; using TallComponents.PDF.Layout.Paragraphs; // After (IronPDF) using IronPdf; // Before (TallComponents) using TallComponents.PDF.Kit; using TallComponents.PDF.Layout; using TallComponents.PDF.Layout.Drawing; using TallComponents.PDF.Layout.Paragraphs; // After (IronPDF) using IronPdf; $vbLabelText $csharpLabel 步骤 3:初始化许可证 在应用程序启动时添加许可证初始化: IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel TallComponents到IronPDFAPI 映射参考 了解TallComponents概念如何映射到IronPDF可以加速迁移过程: TallComponents IronPDF 备注 文档 ChromePdfRenderer 创建用于生成 PDF 的呈现器 部分 自动翻译 源自 HTML 结构的章节 文本段落 HTML 文本元素 使用 <p>, <h1>, <div> 等。 图像段落 <img> 标记 标准 HTML 图像 表段 HTML <table> 标准 HTML 表格 字体 CSS font-family 完全支持网络字体 document.Write() pdf.SaveAs() 保存到文件 document.Write(stream) pdf.BinaryData</code>或pdf.Stream` 流式输出 Page.Canvas HTML/CSS 渲染 无需手动操作画布 XmlDocument.Generate() RenderHtmlAsPdf() HTML 取代 XML PdfKit.Merger.Merge() PdfDocument.Merge() 合并多个 PDF 文档安全性 pdf.SecuritySettings PDF 安全配置 页面布局 渲染选项 页面设置和页边距 代码迁移示例 将HTML转换为PDF TallComponents 缺乏本地 HTML 转 PDF 支持。 变通方法包括从文本中创建片段,但实际上并不渲染 HTML: TallComponents 方法: // NuGet: Install-Package TallComponents.PDF.Kit using TallComponents.PDF.Kit; using System.IO; class Program { static void Main() { // Create a new document using (Document document = new Document()) { string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"; // Create HTML fragment Fragment fragment = Fragment.FromText(html); // Add to document Section section = document.Sections.Add(); section.Fragments.Add(fragment); // Save to file using (FileStream fs = new FileStream("output.pdf", FileMode.Create)) { document.Write(fs); } } } } // NuGet: Install-Package TallComponents.PDF.Kit using TallComponents.PDF.Kit; using System.IO; class Program { static void Main() { // Create a new document using (Document document = new Document()) { string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"; // Create HTML fragment Fragment fragment = Fragment.FromText(html); // Add to document Section section = document.Sections.Add(); section.Fragments.Add(fragment); // Save to file using (FileStream fs = new FileStream("output.pdf", FileMode.Create)) { document.Write(fs); } } } } $vbLabelText $csharpLabel IronPdf 方法: // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { // Create a PDF from HTML string var renderer = new ChromePdfRenderer(); string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { // Create a PDF from HTML string var renderer = new ChromePdfRenderer(); string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel IronPDF 的ChromePdfRenderer`使用真正的 Chromium 引擎,提供全面的 HTML5 和 CSS3 支持。 这意味着您的 PDF 文件将完全呈现在现代浏览器中。 了解更多信息,请参阅 HTML 转 PDF 教程。 合并多个 PDF 文件 PDF 合并演示了TallComponents和IronPDF之间的语言差异。 TallComponents 方法: // NuGet: Install-Package TallComponents.PDF.Kit using TallComponents.PDF.Kit; using System.IO; class Program { static void Main() { // Create output document using (Document outputDoc = new Document()) { // Load first PDF using (FileStream fs1 = new FileStream("document1.pdf", FileMode.Open)) using (Document doc1 = new Document(fs1)) { foreach (Page page in doc1.Pages) { outputDoc.Pages.Add(page.Clone()); } } // Load second PDF using (FileStream fs2 = new FileStream("document2.pdf", FileMode.Open)) using (Document doc2 = new Document(fs2)) { foreach (Page page in doc2.Pages) { outputDoc.Pages.Add(page.Clone()); } } // Save merged document using (FileStream output = new FileStream("merged.pdf", FileMode.Create)) { outputDoc.Write(output); } } } } // NuGet: Install-Package TallComponents.PDF.Kit using TallComponents.PDF.Kit; using System.IO; class Program { static void Main() { // Create output document using (Document outputDoc = new Document()) { // Load first PDF using (FileStream fs1 = new FileStream("document1.pdf", FileMode.Open)) using (Document doc1 = new Document(fs1)) { foreach (Page page in doc1.Pages) { outputDoc.Pages.Add(page.Clone()); } } // Load second PDF using (FileStream fs2 = new FileStream("document2.pdf", FileMode.Open)) using (Document doc2 = new Document(fs2)) { foreach (Page page in doc2.Pages) { outputDoc.Pages.Add(page.Clone()); } } // Save merged document using (FileStream output = new FileStream("merged.pdf", FileMode.Create)) { outputDoc.Write(output); } } } } $vbLabelText $csharpLabel IronPdf 方法: // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { // Load PDFs var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); // Merge PDFs var merged = PdfDocument.Merge(pdf1, pdf2); // Save merged document merged.SaveAs("merged.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { // Load PDFs var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); // Merge PDFs var merged = PdfDocument.Merge(pdf1, pdf2); // Save merged document merged.SaveAs("merged.pdf"); } } $vbLabelText $csharpLabel TallComponents 版本需要手动进行页面迭代和克隆。IronPDF将此简化为一个PdfDocument.Merge()调用。 有关高级合并方案,请参阅 IronPDF合并文档。 添加水印 PDF 水印揭示了开发人员体验的另一个显著差异。 TallComponents 方法: // NuGet: Install-Package TallComponents.PDF.Kit using TallComponents.PDF.Kit; using TallComponents.PDF.Layout; using System.IO; using System.Drawing; class Program { static void Main() { // Load existing PDF using (FileStream fs = new FileStream("input.pdf", FileMode.Open)) using (Document document = new Document(fs)) { // Iterate through pages foreach (Page page in document.Pages) { // Create watermark text TextShape watermark = new TextShape(); watermark.Text = "CONFIDENTIAL"; watermark.Font = new Font("Arial", 60); watermark.PenColor = Color.FromArgb(128, 255, 0, 0); watermark.X = 200; watermark.Y = 400; watermark.Rotate = 45; // Add to page page.Overlay.Shapes.Add(watermark); } // Save document using (FileStream output = new FileStream("watermarked.pdf", FileMode.Create)) { document.Write(output); } } } } // NuGet: Install-Package TallComponents.PDF.Kit using TallComponents.PDF.Kit; using TallComponents.PDF.Layout; using System.IO; using System.Drawing; class Program { static void Main() { // Load existing PDF using (FileStream fs = new FileStream("input.pdf", FileMode.Open)) using (Document document = new Document(fs)) { // Iterate through pages foreach (Page page in document.Pages) { // Create watermark text TextShape watermark = new TextShape(); watermark.Text = "CONFIDENTIAL"; watermark.Font = new Font("Arial", 60); watermark.PenColor = Color.FromArgb(128, 255, 0, 0); watermark.X = 200; watermark.Y = 400; watermark.Rotate = 45; // Add to page page.Overlay.Shapes.Add(watermark); } // Save document using (FileStream output = new FileStream("watermarked.pdf", FileMode.Create)) { document.Write(output); } } } } $vbLabelText $csharpLabel IronPdf 方法: // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Editing; class Program { static void Main() { // Load existing PDF var pdf = PdfDocument.FromFile("input.pdf"); // Create watermark var watermark = new TextStamper() { Text = "CONFIDENTIAL", FontSize = 60, Opacity = 50, Rotation = 45, VerticalAlignment = VerticalAlignment.Middle, HorizontalAlignment = HorizontalAlignment.Center }; // Apply watermark to all pages pdf.ApplyStamp(watermark); // Save watermarked PDF pdf.SaveAs("watermarked.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Editing; class Program { static void Main() { // Load existing PDF var pdf = PdfDocument.FromFile("input.pdf"); // Create watermark var watermark = new TextStamper() { Text = "CONFIDENTIAL", FontSize = 60, Opacity = 50, Rotation = 45, VerticalAlignment = VerticalAlignment.Middle, HorizontalAlignment = HorizontalAlignment.Center }; // Apply watermark to all pages pdf.ApplyStamp(watermark); // Save watermarked PDF pdf.SaveAs("watermarked.pdf"); } } $vbLabelText $csharpLabel IronPdf 的 TextStamper 类提供了直观的对齐选项和自动页面迭代功能。 印章和水印指南涵盖了其他自定义选项。 数字签名 文档签名对企业应用至关重要。 TallComponents 方法: using TallComponents.PDF.Kit; using TallComponents.PDF.Kit.Signing; Document document = new Document("unsigned.pdf"); // Load certificate X509Certificate2 cert = new X509Certificate2("certificate.pfx", "password"); // Create signature SignatureHandler handler = new SignatureHandler(cert); document.Sign(handler); document.Write("signed.pdf"); using TallComponents.PDF.Kit; using TallComponents.PDF.Kit.Signing; Document document = new Document("unsigned.pdf"); // Load certificate X509Certificate2 cert = new X509Certificate2("certificate.pfx", "password"); // Create signature SignatureHandler handler = new SignatureHandler(cert); document.Sign(handler); document.Write("signed.pdf"); $vbLabelText $csharpLabel IronPdf 方法: using IronPdf; using IronPdf.Signing; var pdf = PdfDocument.FromFile("unsigned.pdf"); // Sign with certificate var signature = new PdfSignature("certificate.pfx", "password") { SigningContact = "support@company.com", SigningLocation = "New York", SigningReason = "Document Approval" }; pdf.Sign(signature); pdf.SaveAs("signed.pdf"); using IronPdf; using IronPdf.Signing; var pdf = PdfDocument.FromFile("unsigned.pdf"); // Sign with certificate var signature = new PdfSignature("certificate.pfx", "password") { SigningContact = "support@company.com", SigningLocation = "New York", SigningReason = "Document Approval" }; pdf.Sign(signature); pdf.SaveAs("signed.pdf"); $vbLabelText $csharpLabel IronPdf 的签名 API 包括联系信息、位置和签名原因的附加元数据属性--这对于审计跟踪非常重要。 探索数字签名文档,了解完整的实施细节。 功能比较:TallComponents 与IronPDF的比较 特征 TallComponents IronPDF 状态 ❌ 停产 ✅ 活跃 支持 ❌ 无 ✅ 全文 更新 ❌ 无 ✅ 常规 内容创建 HTML 至 PDF 否 完整的 Chromium URL 至 PDF 否 是 CSS 支持 否 完整的 CSS3 JavaScript 否 完整的 ES2024 XML 模板 是 不需要 PDF操作 合并 PDF 是 是 拆分 PDF 是 是 水印 手册 内置 页眉/页脚 基于 XML HTML/CSS 安全性 密码保护 是 是 数字签名 是 是 加密 是 是 PDF/A 有限的 是 已知问题 空白页 ⚠️ 文档错误 无 缺少图形 ⚠️ 文档错误 无 字体问题 ⚠️ 文档错误 无 开发 学习曲线 高(XML) 低 (HTML) 文档 过时 广泛 社区 无 活跃 TallComponents迁移清单 迁移前任务 审核您的代码库,确定所有TallComponents的使用情况: grep -r "using TallComponents" --include="*.cs" . grep -r "Document\|Section\|TextParagraph" --include="*.cs" . grep -r "using TallComponents" --include="*.cs" . grep -r "Document\|Section\|TextParagraph" --include="*.cs" . SHELL 记录现有的 XML 模板和布局,并将其转换为 HTML。 确定当前使用的安全设置,注意密码配置和数字签名实施。 代码更新任务 1.通过 NuGet 删除TallComponents软件包 2.安装 IronPdf 软件包 3.将 XML 布局转换为 HTML 模板 4.用 HTML 元素替换章节/段落模型 5.更新表格代码以使用标准 HTML 表格 6.使用 HtmlHeaderFooter 将页眉/页脚转换为 HTML 7.更新安全设置以使用 pdf.SecuritySettings 8.在启动时添加许可证初始化 页眉和页脚迁移 TallComponents 使用基于 XML 的标头。 IronPdf 提供基于 HTML 的标题和动态占位符: renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Header Text</div>", MaxHeight = 25 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Footer Text</div>", MaxHeight = 25 }; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Header Text</div>", MaxHeight = 25 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Footer Text</div>", MaxHeight = 25 }; $vbLabelText $csharpLabel 了解有关 IronPDF 中页眉和页脚的更多信息。 测试阶段 1.比较TallComponents和IronPDF版本的可视化输出结果 2.验证空白页问题是否得到解决 3.测试所有文档模板 4.验证 PDF 合并功能 5.测试数字签名 6.确认安全设置应用正确 建议迁移时间表 鉴于TallComponents已经停产,没有任何支持,迁移工作应立即进行: 第一周:审核代码库并识别所有TallComponents的使用情况 第二周:将文档模板从 XML 转换为 HTML 第三周:更新安全性、合并和签名代码 第 4 周:测试和生产部署 延迟意味着运行不支持的软件,并记录渲染错误--这是任何专业开发团队在 2026 年都不能接受的风险。 主要迁移优势 从TallComponents迁移到 IronPdf 带来了立竿见影的优势: 现代 Chromium 渲染引擎:完全支持 CSS 和 JavaScript,确保 PDF 能够按预期渲染,消除TallComponents中记录的空白页和缺少图形的错误。 积极的维护和安全更新:IronPDF会定期收到更新,以确保与当前和未来的 .NET 版本(包括 .NET 10)兼容。 更好的 .NET 集成:原生 async/await 支持和现代 API 模式与当代 C# 开发实践相一致。 完善的文档:丰富的教程和API 参考资料支持快速实现。 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# 从 Telerik Document Processing 迁移到 IronPDF如何用 C# 从 PDFmyURL 迁移到...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多