如何在 C# 中從 TallComponents 轉移到 IronPDF
Migrating fromTallComponentsto 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-to-PDF:不像現代的 PDF 函式庫,TallComponents 不支援 HTML 直接轉換成 PDF。 支援平台上的開發人員已確認這項限制,並指出 Pechkin 等第三方解決方案是替代方案。
Documented Rendering Bugs:變更日誌揭示了廣泛的呈現問題,包括空白頁面呈現、圖形遺失、不可靠的 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安裝 IronPDF:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdf針對專門的框架,IronPDF 提供專用的延伸套件:
Blazor 伺服器:
PM > Install-Package IronPdf.Extensions.BlazorPM > Install-Package IronPdf.Extensions.BlazorMAUI:
PM > Install-Package IronPdf.Extensions.MauiPM > Install-Package IronPdf.Extensions.MauiMVC架構:
PM > Install-Package IronPdf.Extensions.Mvc.FrameworkPM > Install-Package IronPdf.Extensions.Mvc.Framework步驟 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步驟 3:初始化您的授權
在應用程式啟動時加入授權初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"TallComponents至IronPDFAPI 映射參考。
了解TallComponents概念如何映射到IronPDF可加快移植過程:
| TallComponents | IronPDF | 筆記 |
|---|---|---|
文件 | <代碼>ChromePdfRenderer</代碼 | 建立 PDF 生成的渲染器 |
| <編碼>部分</編碼 | 自動化 | 源自 HTML 結構的章節 |
文字段落 | HTML 文字元素 | 使用 <p>, <h1>, <div> 等。 |
圖片段落 | <img> 標籤 | 標準 HTML 影像 |
表段 | HTML <table> | 標準 HTML 表格 |
| <編碼>字體</編碼 | CSS font-family | 完全支援 Web 字型 |
| <編碼>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-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);
}
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF 方法:
// 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.comIronPDF 的<代碼>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);
}
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF 方法:
// 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.comTallComponents 版本需要手動迭代和克隆頁面。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.comIronPDF 方法:
// 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.comIronPdf 的 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.comIronPDF 方法:
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.comIronPdf 的簽名 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" .記錄現有的 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進一步了解 IronPDF中的頁首和頁尾。
測試階段
1.比較TallComponents和IronPDF版本之間的視覺輸出 2.確認空白頁問題已解決 3.測試所有文件範本 4.驗證 PDF 合併功能 5.測試數位簽章 6.確認安全設定應用正確
建議的遷移時間線
鑑於TallComponents已經停產且沒有任何支援,遷移工作應立即進行:
Week 1:審核程式碼庫並辨識所有TallComponents的使用情況 Week 2:將 XML 文件範本轉換為 HTML 第 3 週:更新安全性、合併和簽署程式碼 第 4 週:測試與生產部署
延遲就意味著要運行不支援的軟體,而且還會出現有文件記錄的渲染錯誤 - 這是任何專業開發團隊在進入 2026 年時都不應該接受的風險。
主要遷移優勢
從TallComponents轉移到IronPDF可立即獲得優勢:
現代 Chromium 渲染引擎:完整的 CSS 與JavaScript支援可確保 PDF 呈現完全符合預期,消除TallComponents中記錄的空白頁面與圖形遺失 bug。
Active Maintenance and Security Updates:IronPDF 會定期接受更新,確保與目前及未來的 .NET 版本相容,包括 .NET 10。
更好的 .NET 整合:原生的 async/await 支援和現代 API 模式符合當代 C# 開發實務。
結論
Apryse 收購TallComponents為 .NET 開發人員創造了明確的遷移需求。 由於TallComponents沒有新的授權,對現有使用者也沒有支援,而且記錄的渲染錯誤永遠無法修復,繼續使用TallComponents代表著無法承受的技術債務。
IronPDF 提供了直接的遷移路徑,具有更簡潔的 API、基於 HTML 的現代化渲染以及積極的開發。 本指南中的代碼範例展示了TallComponents模式如何轉換為IronPDF的等效模式 - 複雜性往往大幅降低。
立即透過 免費試用 IronPDF 開始您的遷移工作,並確保您的 PDF 生成基礎架構能夠取得長期的成功。






