跳至页脚内容
迁移指南

如何用 C# 从 TallComponents 迁移到 IronPDF

从TallComponents迁移到 IronPDF:完整的 C# 开发人员指南。

当 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在现代开发工作流程中存在问题的核心限制:

特征TallComponentsIronPDF
销售现状停止新销售积极开发和销售
支持 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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

步骤 3:初始化许可证

在应用程序启动时添加许可证初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

TallComponents到IronPDFAPI 映射参考

了解TallComponents概念如何映射到IronPDF可以加速迁移过程:

TallComponentsIronPDF备注
<代码>文档</代码<代码>ChromePdfRenderer</代码创建用于生成 PDF 的呈现器
<代码>部分</代码自动翻译源自 HTML 结构的章节
<代码>文本段落</代码HTML 文本元素使用 <p>, <h1>, <div> 等。
<代码>图像段落</代码<img> 标记标准 HTML 图像
<代码>表段</代码HTML <table>标准 HTML 表格
<代码>字体</代码CSS font-family完全支持网络字体
<代码>document.Write()</代码<代码>pdf.SaveAs()</代码保存到文件
<代码>document.Write(stream)</代码<代码>pdf.BinaryData</代码>或<代码>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);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPdf 的签名 API 包括联系信息、位置和签名原因的附加元数据属性--这对于审计跟踪非常重要。 探索数字签名文档,了解完整的实施细节。

功能比较:TallComponents 与IronPDF的比较。

特征TallComponentsIronPDF
状态❌ 停产✅ 活跃
支持❌ 无✅ 全文
更新❌ 无✅ 常规
内容创建
HTML 至 PDF完整的 Chromium
URL 至 PDF
CSS 支持完整的 CSS3
JavaScript完整的 ES2024
XML 模板不需要
PDF操作
合并 PDF
拆分 PDF
水印手册内置
页眉/页脚基于 XMLHTML/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
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

了解有关 IronPDF 中页眉和页脚的更多信息。

测试阶段

1.比较TallComponents和IronPDF版本的可视化输出结果 2.验证空白页问题是否得到解决 3.测试所有文档模板 4.验证 PDF 合并功能 5.测试数字签名 6.确认安全设置应用正确

建议迁移时间表

鉴于TallComponents已经停产,没有任何支持,迁移工作应立即进行:

第 1 周:审核代码库并确定所有TallComponents的使用情况 第 2 周:将文档模板从 XML 转换为 HTML 第 3 周:更新安全性、合并和签署代码 第 4 周:测试和生产部署

延迟意味着运行不支持的软件,并记录渲染错误--这是任何专业开发团队在 2026 年都不能接受的风险。

主要迁移优势

从TallComponents迁移到 IronPdf 带来了立竿见影的优势:

现代 Chromium 渲染引擎:全面的 CSS 和JavaScript支持可确保 PDF 完全按照预期呈现,消除了TallComponents中记录的空白页和图形缺失 bug。

主动维护和安全更新:IronPDF 定期接受更新,确保与当前和未来的 .NET 版本(包括 .NET 10)兼容。

更好的 .NET 集成:本地 async/await 支持和现代 API 模式符合当代 C# 开发实践。

全面的文档:广泛的教程API 参考支持快速实施。

结论

Apryse 收购TallComponents为 .NET 开发人员带来了明确的迁移要求。 由于TallComponents没有新的许可证,对现有用户也没有支持,而且文档中的渲染错误永远不会得到修复,继续使用TallComponents意味着无法弥补的技术债务。

IronPDF 通过更简洁的 API、基于 HTML 的现代渲染和积极的开发,提供了直接迁移的途径。 本指南中的代码示例演示了TallComponents模式如何转化为IronPDF的对应模式--通常会大大降低复杂性。

立即开始迁移,免费试用 IronPDF,确保您的 PDF 生成基础架构获得长期成功。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。