跳至頁尾內容
影片

如何在 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" />
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
// ❌ 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
$vbLabelText   $csharpLabel

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
SHELL

安裝 IronPDF:

# Install IronPDF
dotnet add package 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;
// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;

// After (IronPDF)
using IronPdf;
' Before (TuesPechkin)
Imports TuesPechkin
Imports TuesPechkin.Wkhtmltox.Win64

' After (IronPDF)
Imports IronPdf
$vbLabelText   $csharpLabel

步驟 4:初始化授權

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

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

程式碼遷移範例

將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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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);
    }
}
// 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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!
$vbLabelText   $csharpLabel

問題 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
$vbLabelText   $csharpLabel

問題 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}"
$vbLabelText   $csharpLabel

問題 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!
$vbLabelText   $csharpLabel

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

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" .
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熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

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