跳過到頁腳內容
使用IRONPDF

HtmlToPdfDocument C# - DinkToPdf 替代軟體 | IronPDF

如果您在DinkToPdf中使用HtmlToPdfDocument C#並且遇到CSS支援受限、外部依賴或效能問題,這並不罕見。 .NET開發人員尋求一種HTML到PDF轉換器,可以處理現代CSS、網頁字型和JavaScript執行,且不需設置本地庫或命令列工具。 本指南展示如何用IronPDF替換DinkToPdf——這是一個基於Chromium渲染引擎的.NET程式庫,僅用少量程式碼即可將HTML文件、網頁和HTML字串轉換為高品質PDF。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 複製並運行這段程式碼。

    IronPdf.ChromePdfRenderer
           .StaticRenderHtmlAsPdf("<h1>Hello World</h1>")
           .SaveAs("output.pdf");
  3. 部署到您的生產環境進行測試

    今天就在您的專案中開始使用免費試用IronPDF

    arrow pointer

如何通過NuGet安裝IronPDF?

在撰寫任何轉換代碼之前,您需要將IronPDF添加到您的專案中。 最快的路徑是使用NuGet程式包管理器CLI:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

或者,在Visual Studio中打開NuGet程式包管理器控制台並運行:

Install-Package IronPdf
Install-Package IronPdf
SHELL

IronPDF支持.NET 8、.NET 9、.NET 10、.NET Standard 2.0及更高版本和.NET Framework 4.6.2或更高版本。 不需要額外的本地二進制文件、wkhtmltopdf安裝或命令行工具設置。 該程式包捆綁了Chromium渲染引擎,自動解決所有依賴。 安裝完成後,您可以在代碼中或通過環境變數設置您的許可證金鑰,立即開始生成PDF。 有關詳細的安裝指南,請參閱IronPDF快速入門頁面,它涵蓋了每個環境的指南。

DinkToPdf與IronPDF相比如何?

DinkToPdf是wkhtmltopdf的一個.NET Core封裝,使用較舊的WebKit渲染引擎。雖然是開源的,但開發人員在生產環境中經常面臨將HTML轉換為PDF的挑戰。

DinkToPdf與IronPDF功能比較
功能 DinkToPdf IronPDF
渲染引擎 WebKit(過時) Chromium(現代)
CSS支援 有限的CSS支援 完整CSS3,現代CSS
JavaScript執行 有限 完整的JavaScript渲染
本地依賴 需要wkhtmltopdf二進制文件 無外部依賴
網頁字體 部分支持 完整支持
.NET Core / .NET 5+ 是的(.NET Core,Framework,Standard)
Azure應用服務 複雜的設置 開箱即用
線程處理 需要單例 線程安全
HTML模板 基本 高級功能
可填寫的PDF表單

核心區別在於渲染引擎。DinkToPdf的WebKit引擎在處理複雜文件、現代CSS和動態網頁內容時難以應對。 IronPDF的Chromium引擎生成的PDF文件與瀏覽器渲染的一致。 欲深入了解,請參閱IronPDF與DinkToPdf比較頁面

DinkToPdf的HtmlToPdfDocument類別存在哪些問題?

HtmlToPdfDocument C#:DinkToPdf的HTML到PDF轉換替代方案:圖片1 - DinkToPdf

DinkToPdf中的HtmlToPdfDocument類需要冗長的配置,限制影響PDF轉換質量和開發人員體驗:

using DinkToPdf;

var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
    GlobalSettings = { PaperSize = PaperKind.A4, Out = "output.pdf" },
    Objects = { new ObjectSettings() { HtmlContent = "<h1>Hello</h1>" } }
};
converter.Convert(doc);
using DinkToPdf;

var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
    GlobalSettings = { PaperSize = PaperKind.A4, Out = "output.pdf" },
    Objects = { new ObjectSettings() { HtmlContent = "<h1>Hello</h1>" } }
};
converter.Convert(doc);
$vbLabelText   $csharpLabel

DinkToPdf PDF輸出

HtmlToPdfDocument C#:DinkToPdf的HTML到PDF轉換替代方案:圖片2 - DinkToPdf範例輸出PDF

常見問題包括:即使是簡單任務也需要耗時的PDF生成,網路伺服器上的線程處理複雜性,以及難以處理帶有JavaScript的網頁內容。 wkhtmltopdf命令行工具為Azure應用服務和無伺服器環境帶來了部署挑戰,這些環境不允許安裝系統級的二進制文件。 開發人員還報告說,單例轉換器模式在並發負載下成為瓶頸。

除了性能之外,GitHub上的DinkToPdf項目顯示維護活動有限,這意味著CSS渲染或SSL處理器中的bug很少獲得修復。 對於每天處理數千個PDF的生產應用程序來說,這些缺口是不可接受的。 當CSS Grid佈局破損或Web字體無法加載時,您需要一個能夠追踪現代瀏覽器行為的庫,而不是一個被凍結在2010年代早期渲染引擎中的庫。

如何使用IronPDF將HTML字串轉換為PDF?

HtmlToPdfDocument C#:DinkToPdf的HTML到PDF轉換替代方案:圖片3 - IronPDF

IronPDF簡化了HTML到PDF的轉換,提供了更簡潔的API和更高的輸出質量。 ChromePdfRenderer處理所有HTML內容——從簡單的HTML字串到帶有外部樣式表、Google Fonts和JavaScript驅動的佈局的複雜HTML頁面。

using IronPdf;

var renderer = new ChromePdfRenderer();

string htmlContent = @"
    <!DOCTYPE html>
    <html>
    <head>
        <style>
            body { font-size: 14px; text-align: center; }
            h1 { color: #2563eb; }
        </style>
    </head>
    <body>
        <h1>Professional Invoice</h1>
        <p>Generated with modern CSS support</p>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string htmlContent = @"
    <!DOCTYPE html>
    <html>
    <head>
        <style>
            body { font-size: 14px; text-align: center; }
            h1 { color: #2563eb; }
        </style>
    </head>
    <body>
        <h1>Professional Invoice</h1>
        <p>Generated with modern CSS support</p>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
$vbLabelText   $csharpLabel

IronPDF HTML字串輸出

HtmlToPdfDocument C#:DinkToPdf的HTML到PDF轉換替代方案:圖片4 - IronPDF範例簡單HTML字串到PDF輸出

此代碼演示了IronPDF如何在轉換過程中處理HTML和CSS,生成的PDF文檔具有適當的字體大小渲染和文本對齊——這一切都不需要外部依賴。 RenderHtmlAsPdf方法接受任何有效的HTML5字串,包括內聯樣式、嵌入式腳本和數據URI圖像。

如何將HTML文件轉換為PDF?

對於存儲在磁盤上的HTML文件進行轉換:

using IronPdf;

var renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlFileAsPdf("templates/input.html");
doc.SaveAs("example.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlFileAsPdf("templates/input.html");
doc.SaveAs("example.pdf");
$vbLabelText   $csharpLabel

HtmlToPdfDocument C#:DinkToPdf的HTML到PDF轉換替代方案:圖片5 - HTML文件到PDF範例輸出

RenderHtmlFileAsPdf方法解決了圖片、樣式表和腳本相對於HTML文件在磁碟上的位置的相對路徑問題,因此現有模板無需修改即可工作。 這使遷移現有報告模板變得直截了當。

如何將網頁網址轉換為PDF?

將動態網路內容轉換則IronPDF能做得比DinkToPdf有限的JavaScript渲染更好。 IronPDF的Chromium引擎支持動態HTML元素、單頁應用程序和交互式表單。

using IronPdf;

var renderer = new ChromePdfRenderer();

// Enable JavaScript execution for dynamic content
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

string url = "https://en.wikipedia.org/wiki/Main_Page";
var page = renderer.RenderUrlAsPdf(url);
page.SaveAs("webpage.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Enable JavaScript execution for dynamic content
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

string url = "https://en.wikipedia.org/wiki/Main_Page";
var page = renderer.RenderUrlAsPdf(url);
page.SaveAs("webpage.pdf");
$vbLabelText   $csharpLabel

轉換的網址到PDF

HtmlToPdfDocument C#:DinkToPdf的HTML到PDF轉換替代方案:圖片6 - 從URL內容生成的PDF

這種方法非常適合從網頁表單生成發票或歸檔即時儀表板。 渲染引擎在生成PDF文件之前會處理所有網頁字體、CSS樣式和JavaScript。WaitFor API讓您精準控制Chromium引擎何時認為頁面已準備好進行捕捉——您可以等待特定DOM元素、網絡空閒狀態或自定義JavaScript條件,這對於從動態內容生成大規模PDF至關重要。

對於需要身份驗證的頁面,您可以直接將HTTP標頭、cookies或表單POST數據傳遞給渲染器。 URL到PDF文檔涵蓋了這些高級場景的詳細資訊。

如何配置PDF輸出設定?

兩個程式庫都提供了配置選項,但IronPDF提供了更直觀的控制,通過其RenderingOptions對象生成的PDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.TextHeader.CenterText = "Company Report";
renderer.RenderingOptions.TextFooter.CenterText = "{page} of {total-pages}";

var document = renderer.RenderHtmlAsPdf("<h1 style='text-align: center;'>Quarterly Report</h1>");
document.SaveAs("configured-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.TextHeader.CenterText = "Company Report";
renderer.RenderingOptions.TextFooter.CenterText = "{page} of {total-pages}";

var document = renderer.RenderHtmlAsPdf("<h1 style='text-align: center;'>Quarterly Report</h1>");
document.SaveAs("configured-report.pdf");
$vbLabelText   $csharpLabel

具有自定義設定的輸出PDF

HtmlToPdfDocument C#:DinkToPdf的HTML到PDF轉換替代方案:圖片7 - 自定義的PDF輸出

這些選項控制紙張大小、頁邊距、頁眉和頁腳。 IronPDF還支持接受完整HTML和CSS的自定義HTML頁首和頁尾,讓您在頁首和頁尾區域放置標誌、動態頁數和樣式化文本。 為了文件安全,PDF加密和密碼API允許您在生成後限制列印、複製或編輯。

如何合併多個PDF?

當您需要將多個HTML文件合併為一個PDF時,IronPDF提供了一個靜態合併方法:

using IronPdf;

var renderer = new ChromePdfRenderer();

var pdf1 = renderer.RenderHtmlAsPdf("<h1>Section One</h1>");
var pdf2 = renderer.RenderHtmlAsPdf("<h1>Section Two</h1>");

var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

var pdf1 = renderer.RenderHtmlAsPdf("<h1>Section One</h1>");
var pdf2 = renderer.RenderHtmlAsPdf("<h1>Section Two</h1>");

var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged-report.pdf");
$vbLabelText   $csharpLabel

PDF合併文檔顯示了如何從許多源文件組裝大型文件,將一致的頁首和頁尾應用於所有章節,以及以程式方式重新排序頁面。 這對於構建獨立生成各部分然後將其合併為單一最終文件的報告生成管道很有用。

為什麼應該從DinkToPdf切換到IronPDF?

對於在.NET Core應用程序中使用HtmlToPdfDocument的開發人員來說,IronPDF提供了直接解決每個痛點的關鍵優勢:

  • 現代渲染:Chromium引擎處理HTML結構、現代CSS和JavaScript執行以創建像素完美的PDF文件
  • 零設置:無需wkhtmltopdf二進制文件或命令行工具配置——只需添加NuGet程式包即可
  • 更好的性能:更快的PDF轉換,無單例線程限制; 渲染器是線程安全的,可以運行並發轉換
  • 完整的網頁支持:處理帶有網頁字體、CSS動畫、SVG圖形和複雜HTML模板的HTML
  • 企業部署:部署到Azure應用服務、AWS Lambda、Docker容器和傳統網路伺服器而無需額外配置
  • 高級PDF功能:可填寫的PDF表單數位簽名PDF/A合規水印
  • 主動維護:IronPDF定期發布更新以同步最新Chromium版本和.NET運行時

根據Chromium項目的發布計劃,引擎每四週獲得安全補丁。 IronPDF在每次主要發布中捆綁更新的Chromium版本,確保您的PDF生成保持最新而無需手動二進制管理。 這對於需要證明其依賴已針對已知漏洞打補丁的安全意識團隊來說非常重要。

IronPDF文檔庫涵蓋了超過50個如何指南,從拆分PDF提取文本和圖像以及添加註釋

您的下一步該怎麼做?

雖然DinkToPdf的HtmlToPdfDocument類提供了基本的HTML到PDF轉換,但其過時的WebKit引擎和外部依賴對於現代.NET開發造成了摩擦。 IronPDF提供了更好的結果,具有基於Chromium的渲染、全面的CSS支持和零依賴部署。 無論您是在構建小型內部報告工具還是高容量文件生成服務,遷移路徑都很簡單:安裝NuGet程式包,將DinkToPdf API呼叫替換為ChromePdfRenderer等價物,並從您的部署管道中移除wkhtmltopdf二進制文件。

要繼續,請選擇符合您情況的路徑:

現在開始使用 IronPDF。
green arrow pointer

常見問題解答

什麼是IronPDF?

IronPDF是一個.NET程式庫,用於使用Chromium渲染引擎將HTML轉換為PDF。它支持現代CSS、JavaScript執行和網頁字型,無需原生依賴或外部二進位檔。

為什麼我應該選擇 IronPDF 而不是 DinkToPdf?

IronPDF提供完整的CSS3支援,無需原生程式庫或wkhtmltopdf設置,線程安全的並發轉換,和簡單易行的部署到Azure App Service和Docker——解決了DinkToPdf的所有主要痛點。

IronPDF 如何提升 HTML 轉 PDF 的效能?

IronPDF使用一個Chromium渲染引擎,能有效處理HTML、CSS和JavaScript。其線程安全設計消除了在並發載荷下影響DinkToPdf的單一瓶頸。

IronPDF是否支援現代網頁字型?

是的。IronPDF的Chromium引擎完全支援Google字型、系統字型和嵌入到HTML的自訂網頁字型,確保輸出PDF中準確的字型渲染。

IronPDF能在PDF轉換過程中執行JavaScript嗎?

是的。在RenderingOptions上設置EnableJavaScript為true,並使用WaitFor API來控制Chromium認為頁面已準備就緒的時機,確保動態內容在捕捉前完全渲染。

使用 IronPDF 需要哪些依賴項?

IronPDF不需要原生依賴。通過NuGet安裝,該套件內部管理Chromium引擎。無需wkhtmltopdf二進位檔或命令行工具。

IronPDF是否完全支援CSS?

是的。IronPDF支援CSS3、Flexbox、CSS Grid、自定義屬性和媒體查詢,能夠準確渲染複雜的HTML文件。

IronPDF如何處理外部函式庫或工具?

IronPDF不依賴外部程式庫或命令行工具。一切都在NuGet套件中打包,簡化了部署並消除了相容性問題。

IronPDF使用什麼渲染引擎?

IronPDF使用Chromium為基礎的渲染引擎,它與Google Chrome中使用的引擎相同,提供準確和高效能的HTML到PDF轉換。

IronPDF 是否適合正在尋找 HTML 轉 PDF 解決方案的 .NET 開發人員?

是的。IronPDF目標.NET 8、.NET 9、.NET 10、.NET Standard 2.0和.NET Framework 4.6.2或更高版本,使其適合現代和舊版.NET應用程式。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me