如何在 PDF 中替換文字 | IronPDF
TuesPechkin 作為 wkhtmltopdf 本機二進位檔的安全執行緒包裝器,已幫助 .NET 開發人員將 HTML 轉換為 PDF 多年。 然而,基礎的 wkhtmltopdf 專案在 2023 年 1 月已被存檔,其依賴的 WebKit 分支是大約 2015 年的。這帶來了安全性、穩定性和渲染上的限制,開發團隊無法再忽視。
本指南提供從 TuesPechkin 遷移到IronPDF的完整路徑,包含逐步指引、程式碼比較和適合專業 .NET 開發人員評估此遷移的實用範例。
為什麼要從 TuesPechkin 遷移
對於注重安全的開發團隊來說,從 TuesPechkin 遷移已不再是選擇性問題。 基礎的 wkhtmltopdf 程式庫存在未修補的嚴重漏洞,這些漏洞永遠不會被修復。
嚴重的安全漏洞:CVE-2022-35583
| 屬性 | 值 |
|---|---|
| CVE ID | CVE-2022-35583 |
| 嚴重性 | 嚴重 (9.8/10) |
| 攻擊向量 | 網路 |
| 狀態 | 永遠不會修補 |
| 受影響 | 所有 TuesPechkin 版本 |
wkhtmltopdf 維護者明確表示不會修復安全漏洞。 每個使用 TuesPechkin 的應用程式永遠暴露在伺服器端請求偽造 (SSRF) 攻擊之下。
攻擊如何運作
在處理使用者提供的 HTML 時,攻擊者可以注入惡意內容:
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" />
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" />
這使攻擊者可以存取 AWS/Azure/GCP 元資料端點,竊取內部 API 資料、端口掃描內部網路,並轉出敏感配置。
技術危機
TuesPechkin 包裝了使用 Qt WebKit 4.8 的 wkhtmltopdf——這是古老的、前 Chrome 時代的技術。 這意味著:
- 無Flexbox支持
- 無CSS Grid支持
- JavaScript執行異常
- 無ES6+支持
穩定性危機
即使宣傳的 ThreadSafeConverter,TuesPechkin 在高負載下也會崩潰:
// ❌ TuesPechkin - "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
new TuesPechkin.RemotingToolset<PechkinBindings>());
// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitely
// ❌ TuesPechkin - "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
new TuesPechkin.RemotingToolset<PechkinBindings>());
// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitely
' ❌ TuesPechkin - "ThreadSafeConverter" still crashes
Dim converter = New TuesPechkin.ThreadSafeConverter(
New TuesPechkin.RemotingToolset(Of PechkinBindings)())
' Under high load, you'll see:
' System.AccessViolationException: Attempted to read or write protected memory
' Process terminated unexpectedly
' Converter hangs indefinitely
IronPDFvs TuesPechkin:功能比較
了解結構差異有助於技術決策者評估遷移投資:
| 功能 | TuesPechkin | IronPDF |
|---|---|---|
| 授權 | 免費、開源 | 商業 |
| 執行緒安全 | 需要手動管理 | 原生支援 |
| 並發 | 有限制,可能會在負載下崩潰 | 強健,處理高並發 |
| 開發 | 不活躍,最後更新於 2015 年 | 活躍,持續改進 |
| 易用性 | 複雜的設置 | 使用者友善且有指南 |
| 文件 | 基本 | 範例豐富 |
| 安全性 | ❌ 嚴重的 CVEs | ✅ 沒有已知漏洞 |
| HTML 到 PDF | ⚠ 過時的 WebKit | ✅ 現代的 Chromium |
| CSS3 | ❌ 部分 | ✅ 支援 |
| Flexbox/Grid | ❌ 不支援 | ✅ 支援 |
| JavaScript | ⚠ 不可靠 | ✅ 完整 ES6+ |
| PDF 操作 | ❌ 不可用 | ✅ 全面 |
| 數位簽名 | ❌ 不可用 | ✅ 全面 |
| PDF/A合規性 | ❌ 不可用 | ✅ 全面 |
| 填寫表單 | ❌ 不可用 | ✅ 全面 |
| 水印 | ❌ 不可用 | ✅ 全面 |
| 合併/分割 | ❌ 不可用 | ✅ 全面 |
快速開始:從 TuesPechkin 遷移到 IronPDF
可以立即透過這些基本步驟開始遷移。
步驟 1:替換 NuGet 套件
移除所有 TuesPechkin 包:
# Remove TuesPechkin and all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32
# Remove TuesPechkin and all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32
安裝 IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
步驟 2:移除本機二進位檔
從您的專案中刪除這些檔案和資料夾:
wkhtmltox.dllwkhtmltopdf.exe- 任何
wkhtmlto*檔案 TuesPechkin.Wkhtmltox資料夾
步驟 3:更新命名空間
將 TuesPechkin 命名空間更換為IronPDF命名空間:
// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;
// After (IronPDF)
using IronPdf;
// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;
// After (IronPDF)
using IronPdf;
' Before (TuesPechkin)
Imports TuesPechkin
Imports TuesPechkin.Wkhtmltox.Win64
' After (IronPDF)
Imports IronPdf
步驟 4:初始化授權
在應用啓動時新增授權初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
程式碼遷移範例
將HTML轉換為PDF
最常見的用例展示了這些 .NET PDF 程式庫之間的複雜性差異。
TuesPechkin 方法:
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = { new ObjectSettings { HtmlText = html } }
});
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = { new ObjectSettings { HtmlText = html } }
});
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
Imports TuesPechkin
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdfBytes As Byte() = converter.Convert(New HtmlToPdfDocument With {
.Objects = {New ObjectSettings With {.HtmlText = html}}
})
File.WriteAllBytes("output.pdf", pdfBytes)
End Sub
End Class
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
TuesPechkin 版本需要建立一個 Win64EmbeddedDeployment 和 TempFolderDeployment。 您還必須手動將位元組寫入文件。
IronPDF 完全消除了這種儀式。 建立一個 ChromePdfRenderer,渲染 HTML 並保存。 此程式碼是自描述的,無需了解部署工具集或平台特定的二進位管理。
如需進階 HTML 到 PDF 的場景,請參見 HTML 到 PDF 轉換指南。
將 URL 轉換為 PDF
URL 到 PDF 的轉換展示了類似的複雜性差異。
TuesPechkin 方法:
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = {
new ObjectSettings {
PageUrl = "https://www.example.com"
}
}
});
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
{
Objects = {
new ObjectSettings {
PageUrl = "https://www.example.com"
}
}
});
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}
Imports TuesPechkin
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
Dim pdfBytes As Byte() = converter.Convert(New HtmlToPdfDocument With {
.Objects = {
New ObjectSettings With {
.PageUrl = "https://www.example.com"
}
}
})
File.WriteAllBytes("webpage.pdf", pdfBytes)
End Sub
End Class
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
TuesPechkin 使用巢狀於 HtmlToPdfDocument 中的 ObjectSettings.PageUrl。IronPDF提供了一個專用的 RenderUrlAsPdf 方法,明確表達意圖。
查看 URL 到 PDF 文件,了解認證和自定義標頭選項。
自定義渲染設置
頁面方向、紙張大小和邊界需要不同的配置方式。
TuesPechkin 方法:
// NuGet: Install-Package TuesPechkin
// NuGet: Install-Package TuesPechkin.Wkhtmltox.Win64
using TuesPechkin;
using System.Drawing.Printing;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var document = new HtmlToPdfDocument
{
GlobalSettings = {
Orientation = GlobalSettings.PaperOrientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
},
Objects = {
new ObjectSettings { HtmlText = html }
}
};
byte[] pdfBytes = converter.Convert(document);
File.WriteAllBytes("custom.pdf", pdfBytes);
}
}
// NuGet: Install-Package TuesPechkin
// NuGet: Install-Package TuesPechkin.Wkhtmltox.Win64
using TuesPechkin;
using System.Drawing.Printing;
using System.IO;
class Program
{
static void Main()
{
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var document = new HtmlToPdfDocument
{
GlobalSettings = {
Orientation = GlobalSettings.PaperOrientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
},
Objects = {
new ObjectSettings { HtmlText = html }
}
};
byte[] pdfBytes = converter.Convert(document);
File.WriteAllBytes("custom.pdf", pdfBytes);
}
}
Imports TuesPechkin
Imports System.Drawing.Printing
Imports System.IO
Module Program
Sub Main()
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
Dim html As String = "<html><body><h1>Custom PDF</h1></body></html>"
Dim document = New HtmlToPdfDocument With {
.GlobalSettings = New GlobalSettings With {
.Orientation = GlobalSettings.PaperOrientation.Landscape,
.PaperSize = PaperKind.A4,
.Margins = New MarginSettings With {.Unit = Unit.Millimeters, .Top = 10, .Bottom = 10}
},
.Objects = {
New ObjectSettings With {.HtmlText = html}
}
}
Dim pdfBytes As Byte() = converter.Convert(document)
File.WriteAllBytes("custom.pdf", pdfBytes)
End Sub
End Module
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
string html = "<html><body><h1>Custom PDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}
Imports IronPdf
Imports IronPdf.Engines.Chrome
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
Dim html As String = "<html><body><h1>Custom PDF</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("custom.pdf")
End Sub
End Module
TuesPechkin 將設置分為用於整個文件選項的 GlobalSettings 和用於內容的 ObjectSettings。IronPDF將所有內容整合到 RenderingOptions 中,具有清晰、易發現的屬性名稱。
TuesPechkin API 到IronPDF映射參考
此映射透過展示直接的 API 等價加速遷移:
| TuesPechkin | IronPDF |
|---|---|
StandardConverter |
ChromePdfRenderer |
ThreadSafeConverter |
ChromePdfRenderer |
HtmlToPdfDocument |
方法參數 |
GlobalSettings |
RenderingOptions |
ObjectSettings.HtmlText |
RenderHtmlAsPdf(html) |
ObjectSettings.PageUrl |
RenderUrlAsPdf(url) |
GlobalSettings.PaperSize |
RenderingOptions.PaperSize |
GlobalSettings.Orientation |
RenderingOptions.PaperOrientation |
MarginSettings |
MarginBottom,等等。 |
[page] 佔位符 |
{page} 佔位符 |
[topage] 佔位符 |
{total-pages} 佔位符 |
RemotingToolset |
不需要 |
Win64EmbeddedDeployment |
不需要 |
TempFolderDeployment |
不需要 |
常見遷移問題及解決方案
問題 1:複雜的初始化程式碼
問題: TuesPechkin 需要使用部署工具集來設置複雜的轉換器。
解決方案:IronPDF很簡單:
// Before (TuesPechkin)
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!
// Before (TuesPechkin)
var converter = new StandardConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!
' Before (TuesPechkin)
Dim converter = New StandardConverter(
New RemotingToolset(Of PdfToolset)(
New Win64EmbeddedDeployment(
New TempFolderDeployment())))
' After (IronPDF)
Dim renderer = New ChromePdfRenderer()
' That's it!
問題 2:執行緒安全崩潰
問題: TuesPechkin 的 ThreadSafeConverter 在高負載下仍然會與 AccessViolationException 崩潰。
解決方案:IronPDF擁有原生的執行緒安全性——無需特殊配置:
//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes
//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes
'IronPDF is inherently thread-safe
Dim renderer As New ChromePdfRenderer()
' Use from any thread without crashes
問題 3:頁碼佔位符語法
問題: TuesPechkin 使用 [page] 和 [topage] 佔位符。
解決方案: 更新至IronPDF的佔位符語法:
// Before (TuesPechkin)
"Page [page] of [topage]"
// After (IronPDF)
"Page {page} of {total-pages}"
// Before (TuesPechkin)
"Page [page] of [topage]"
// After (IronPDF)
"Page {page} of {total-pages}"
' Before (TuesPechkin)
"Page [page] of [topage]"
' After (IronPDF)
"Page {page} of {total-pages}"
問題 4:CSS 佈局損壞
問題: Flexbox 和 Grid 佈局在 TuesPechkin 中不工作,因為 wkhtmltopdf 使用 Qt WebKit 4.8。
解決方案: 使用IronPDF的現代 CSS:
// Remove table-based workarounds, use modern CSS
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!
// Remove table-based workarounds, use modern CSS
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!
' Remove table-based workarounds, use modern CSS
Dim html As String = "
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Works correctly with Chromium!
問題 5:本機二進位管理
問題: TuesPechkin 需要平台特定的 wkhtmltopdf 二進位及路徑配置。
解決方案:IronPDF通過 NuGet 處理所有依賴——無需管理本機二進位:
# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed
# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed
TuesPechkin 遷移清單
遷移前任務
審核您的程式碼庫以識別所有 TuesPechkin 使用情況:
grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .
grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .
記錄當前的 GlobalSettings 配置(紙張大小、方向、邊距)。 記錄 ObjectSettings 配置(HTML 內容、URL)。 識別用於轉換的頁首和頁尾實現。 查找所有 wkhtmltopdf 二進位以供移除。
程式碼更新任務
- 移除 TuesPechkin 的 NuGet 包
- 移除本機 wkhtmltopdf 二進位
- 安裝IronPDFNuGet 套件
- 更新使用指令從
TuesPechkin到IronPdf - 在啟動時新增授權金鑰初始化
- 用
ChromePdfRenderer替換轉換器 - 將
GlobalSettings轉換為RenderingOptions - 將
ObjectSettings變為方法參數 - 更新邊距配置為獨立屬性
- 將頁首/頁尾語法更新為基於 HTML 的
HtmlHeaderFooter - 修復頁面佔位符語法(
[page]→{page}) - 移除所有部署/工具集程式碼
遷移後測試
遷移後,驗證以下方面:
- 執行所有單元測試
- 測試執行緒安全場景(IronPDF 處理多執行緒不崩潰)
- 比較PDF輸出質量(Chromium渲染更準確)
- 驗證 CSS 渲染(Flexbox 和 Grid 現在可以使用)
- 測試 JavaScript 執行(現在支援 ES6+)
- 測試頁首/頁尾渲染
- 性能測試批量操作
- 安全掃描以確認沒有剩餘的 wkhtmltopdf 二進位
遷移到IronPDF的關鍵好處
從 TuesPechkin 遷移到IronPDF提供多個關鍵優勢:
安全性:CVE-2022-35583及其他 wkhtmltopdf 漏洞被消除。IronPDF的 Chromium 引擎定期收到安全更新。
原生執行緒安全性: 無需複雜的 ThreadSafeConverter 配置。 不再在負載下出現 AccessViolationException 崩潰。IronPDF自動處理並發。
現代渲染引擎: 完整的 CSS3、Flexbox、Grid 和 ES6+ JavaScript 支援。 您的 PDF 渲染與現代瀏覽器中顯示的內容完全一樣。
簡化部署: 無需管理平台特定的二進位。 無需 Win64EmbeddedDeployment 或 TempFolderDeployment 儀式。 只需安裝 NuGet 包。
活躍開發:IronPDF定期更新,確保與當前和即將推出的 .NET 版本相容。
擴展能力: TuesPechkin 僅轉換 HTML 為 PDF。IronPDF增加了 PDF 操作,數位簽名,PDF/A 符合性,表單填寫,水印,及合併/拆分操作。

