IRONSOFTWAREHOME
影片

如何在 PDF 中替換文字 | IronPDF

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

TuesPechkin 作為 wkhtmltopdf 本機二進位檔的安全執行緒包裝器,已幫助 .NET 開發人員將 HTML 轉換為 PDF 多年。 然而,基礎的 wkhtmltopdf 專案在 2023 年 1 月已被存檔,其依賴的 WebKit 分支是大約 2015 年的。這帶來了安全性、穩定性和渲染上的限制,開發團隊無法再忽視。

本指南提供從 TuesPechkin 遷移到IronPDF的完整路徑,包含逐步指引、程式碼比較和適合專業 .NET 開發人員評估此遷移的實用範例。

為什麼要從 TuesPechkin 遷移

對於注重安全的開發團隊來說,從 TuesPechkin 遷移已不再是選擇性問題。 基礎的 wkhtmltopdf 程式庫存在未修補的嚴重漏洞,這些漏洞永遠不會被修復。

嚴重的安全漏洞:CVE-2022-35583

屬性
CVE IDCVE-2022-35583
嚴重性嚴重 (9.8/10)
攻擊向量網路
狀態永遠不會修補
受影響所有 TuesPechkin 版本

wkhtmltopdf 維護者明確表示不會修復安全漏洞。 每個使用 TuesPechkin 的應用程式永遠暴露在伺服器端請求偽造 (SSRF) 攻擊之下。

攻擊如何運作

在處理使用者提供的 HTML 時,攻擊者可以注入惡意內容:

<!-- Attacker submits this HTML to your PDF generator -->
<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" />
HTML

這使攻擊者可以存取 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

##IronPDFvs TuesPechkin:功能比較

了解結構差異有助於技術決策者評估遷移投資:

功能TuesPechkinIronPDF
授權免費、開源商業
執行緒安全需要手動管理原生支援
並發有限制,可能會在負載下崩潰強健,處理高並發
開發不活躍,最後更新於 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
SHELL

安裝 IronPDF:

# Install IronPDF
dotnet add package IronPdf
SHELL

步驟 2:移除本機二進位檔

從您的專案中刪除這些檔案和資料夾:

  • wkhtmltox.dll
  • wkhtmltopdf.exe
  • 任何 wkhtmlto* 檔案
  • TuesPechkin.Wkhtmltox 資料夾

步驟 3:更新命名空間

將 TuesPechkin 命名空間更換為IronPDF命名空間:

// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;

// After (IronPDF)
using IronPdf;

步驟 4:初始化授權

在應用啓動時新增授權初始化:

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);
    }
}

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");
    }
}

TuesPechkin 版本需要建立一個 Win64EmbeddedDeploymentTempFolderDeployment。 您還必須手動將位元組寫入文件。

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);
    }
}

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");
    }
}

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);
    }
}
C#

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");
    }
}

TuesPechkin 將設置分為用於整個文件選項的 GlobalSettings 和用於內容的 ObjectSettings。IronPDF將所有內容整合到 RenderingOptions 中,具有清晰、易發現的屬性名稱。

TuesPechkin API 到IronPDF映射參考

此映射透過展示直接的 API 等價加速遷移:

TuesPechkinIronPDF
StandardConverterChromePdfRenderer
ThreadSafeConverterChromePdfRenderer
HtmlToPdfDocument方法參數
GlobalSettingsRenderingOptions
ObjectSettings.HtmlTextRenderHtmlAsPdf(html)
ObjectSettings.PageUrlRenderUrlAsPdf(url)
GlobalSettings.PaperSizeRenderingOptions.PaperSize
GlobalSettings.OrientationRenderingOptions.PaperOrientation
MarginSettingsMarginBottom,等等。
[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!

問題 2:執行緒安全崩潰

問題: TuesPechkin 的 ThreadSafeConverter 在高負載下仍然會與 AccessViolationException 崩潰。

**解決方案:**IronPDF擁有原生的執行緒安全性——無需特殊配置:

//IronPDFis inherently thread-safe
var renderer = 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}"

問題 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!

問題 5:本機二進位管理

問題: TuesPechkin 需要平台特定的 wkhtmltopdf 二進位及路徑配置。

**解決方案:**IronPDF通過 NuGet 處理所有依賴——無需管理本機二進位:

# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed
SHELL

TuesPechkin 遷移清單

遷移前任務

審核您的程式碼庫以識別所有 TuesPechkin 使用情況:

grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .
SHELL

記錄當前的 GlobalSettings 配置(紙張大小、方向、邊距)。 記錄 ObjectSettings 配置(HTML 內容、URL)。 識別用於轉換的頁首和頁尾實現。 查找所有 wkhtmltopdf 二進位以供移除。

程式碼更新任務

  1. 移除 TuesPechkin 的 NuGet 包
  2. 移除本機 wkhtmltopdf 二進位
  3. 安裝IronPDFNuGet 套件
  4. 更新使用指令從 TuesPechkinIronPdf
  5. 在啟動時新增授權金鑰初始化
  6. ChromePdfRenderer 替換轉換器
  7. GlobalSettings 轉換為 RenderingOptions
  8. ObjectSettings 變為方法參數
  9. 更新邊距配置為獨立屬性
  10. 將頁首/頁尾語法更新為基於 HTML 的 HtmlHeaderFooter
  11. 修復頁面佔位符語法([page]{page}
  12. 移除所有部署/工具集程式碼

遷移後測試

遷移後,驗證以下方面:

  • 執行所有單元測試
  • 測試執行緒安全場景(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 渲染與現代瀏覽器中顯示的內容完全一樣。

簡化部署: 無需管理平台特定的二進位。 無需 Win64EmbeddedDeploymentTempFolderDeployment 儀式。 只需安裝 NuGet 包。

**活躍開發:**IronPDF定期更新,確保與當前和即將推出的 .NET 版本相容。

擴展能力: TuesPechkin 僅轉換 HTML 為 PDF。IronPDF增加了 PDF 操作,數位簽名,PDF/A 符合性,表單填寫,水印,及合併/拆分操作。

請注意: TuesPechkin 和 wkhtmltopdf 是其各自所有者的註冊商標。 本站與 TuesPechkin 或 wkhtmltopdf 無關,不受其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立