跳過到頁腳內容
遷移指南

如何在 C# 中從 TallComponents 轉移到 IronPDF

當 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 支援 是 (HTML5/CSS3 與 Chromium)
渲染保真度 已知的錯誤和問題 經過驗證的可靠性
安裝 複雜、手冊 簡單使用 NuGet
客戶支援 過渡到 iText SDK 積極的支援與社群
未來可用性 生命週期結束 長期可行性

兩者形成強烈對比:TallComponents 提供了不同時代 .NET 開發中基於 XML 的方法,而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;
Imports IronPdf
$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可加快移植過程:

TallComponents IronPDF 筆記
Document ChromePdfRenderer 建立 PDF 生成的渲染器
Section 自動化 源自 HTML 結構的章節
TextParagraph HTML 文字元素 使用 <p><h1><div> 等。
ImageParagraph <img> 標籤 標準 HTML 影像
TableParagraph HTML <table> 標準 HTML 表格
Font CSS font-family 完全支援 Web 字型
document.Write() pdf.SaveAs() 儲存至檔案
document.Write(stream) pdf.BinaryDatapdf.Stream 串流輸出
Page.Canvas HTML/CSS 渲染 不需要手動操作畫布
XmlDocument.Generate() RenderHtmlAsPdf() HTML 取代 XML
PdfKit.Merger.Merge() PdfDocument.Merge() 合併多個 PDF
Document.Security pdf.SecuritySettings PDF 安全配置
PageLayout RenderingOptions 頁面設定與頁邊空白

程式碼遷移範例

將 HTML 轉換為 PDF

TallComponents 缺乏原生 HTML-to-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);
            }
        }
    }
}
Imports TallComponents.PDF.Kit
Imports System.IO

Class Program
    Shared Sub Main()
        ' Create a new document
        Using document As New Document()
            Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"

            ' Create HTML fragment
            Dim fragment As Fragment = Fragment.FromText(html)

            ' Add to document
            Dim section As Section = document.Sections.Add()
            section.Fragments.Add(fragment)

            ' Save to file
            Using fs As New FileStream("output.pdf", FileMode.Create)
                document.Write(fs)
            End Using
        End Using
    End Sub
End Class
$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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        ' Create a PDF from HTML string
        Dim renderer As New ChromePdfRenderer()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 的 ChromePdfRenderer 使用真正的 Chromium 引擎,提供完整的 HTML5 和 CSS3 支援。 這表示您的 PDF 檔案會完全呈現在現代瀏覽器中。 在 HTML to 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);
            }
        }
    }
}
Imports TallComponents.PDF.Kit
Imports System.IO

Class Program
    Shared Sub Main()
        ' Create output document
        Using outputDoc As New Document()
            ' Load first PDF
            Using fs1 As New FileStream("document1.pdf", FileMode.Open)
                Using doc1 As New Document(fs1)
                    For Each page As Page In doc1.Pages
                        outputDoc.Pages.Add(page.Clone())
                    Next
                End Using
            End Using

            ' Load second PDF
            Using fs2 As New FileStream("document2.pdf", FileMode.Open)
                Using doc2 As New Document(fs2)
                    For Each page As Page In doc2.Pages
                        outputDoc.Pages.Add(page.Clone())
                    Next
                End Using
            End Using

            ' Save merged document
            Using output As New FileStream("merged.pdf", FileMode.Create)
                outputDoc.Write(output)
            End Using
        End Using
    End Sub
End Class
$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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        ' Load PDFs
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        ' Merge PDFs
        Dim merged = PdfDocument.Merge(pdf1, pdf2)

        ' Save merged document
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$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);
            }
        }
    }
}
Imports TallComponents.PDF.Kit
Imports TallComponents.PDF.Layout
Imports System.IO
Imports System.Drawing

Class Program
    Shared Sub Main()
        ' Load existing PDF
        Using fs As New FileStream("input.pdf", FileMode.Open)
            Using document As New Document(fs)
                ' Iterate through pages
                For Each page As Page In document.Pages
                    ' Create watermark text
                    Dim watermark As 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)
                Next

                ' Save document
                Using output As New FileStream("watermarked.pdf", FileMode.Create)
                    document.Write(output)
                End Using
            End Using
        End Using
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Class Program
    Shared Sub Main()
        ' Load existing PDF
        Dim pdf = PdfDocument.FromFile("input.pdf")

        ' Create watermark
        Dim watermark = New TextStamper() With {
            .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")
    End Sub
End Class
$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");
Imports TallComponents.PDF.Kit
Imports TallComponents.PDF.Kit.Signing
Imports System.Security.Cryptography.X509Certificates

Dim document As New Document("unsigned.pdf")

' Load certificate
Dim cert As New X509Certificate2("certificate.pfx", "password")

' Create signature
Dim handler As 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");
Imports IronPdf
Imports IronPdf.Signing

Dim pdf = PdfDocument.FromFile("unsigned.pdf")

' Sign with certificate
Dim signature = New PdfSignature("certificate.pfx", "password") With {
    .SigningContact = "support@company.com",
    .SigningLocation = "New York",
    .SigningReason = "Document Approval"
}

pdf.Sign(signature)
pdf.SaveAs("signed.pdf")
$vbLabelText   $csharpLabel

IronPDF 的簽名 API 包含聯絡資訊、位置和簽名原因的附加元資料屬性 - 對於稽核追蹤而言非常重要。 探索數位簽章文件以取得完整的實施細節。

功能比較:TallComponents vs 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 表格

  1. 使用 HtmlHeaderFooter 將頁首/頁尾轉換為 HTML
  2. 更新安全設定以使用 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
};
Imports System

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
    .HtmlFragment = "<div style='text-align:center;'>Header Text</div>",
    .MaxHeight = 25
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
    .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 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我