使用IRON SUITE

C#中為.NET開發人員的HTML到PDF(終極指南)

介紹

在當今以網路為主導的世界中,將 HTML 內容轉換為 PDF 文件(便攜式文件格式)的能力對於許多應用程式來說是一項至關重要的功能。 無論是從報告、發票產生 PDF 文件,或是存檔網頁內容,HTML 轉 PDF 都能簡化工作流程,並確保高品質 PDF 的格式一致。 IronPDF等程式庫提供了一種對開發者友善的方式來處理這種轉換,支援動態內容、 HTML 表單以及CSSJavaScript的精確渲染。

對於 .NET 開發人員來說,使用正確的HTML 轉 PDF 轉換器會影響效率、程式碼簡潔性和 PDF 生成品質。 現代函式庫允許開發人員只需幾行程式碼即可將 HTML 字串、整個網頁或 HTML 文件直接轉換為渲染後的 PDF 文檔,從而實現動態文檔、自訂標題和可列印的 Web 內容版本。

你將學到什麼

在本指南中,您將學習如何在 C# 中使用多個程式庫將 HTML 轉換為 PDF,並探索它們的 PDF 轉換功能,包括操作 PDF 文件、HTML 表單、自訂邊距和安全 PDF。 本文將涵蓋以下主題:

1.為什麼要將 HTML 工具與 PDF 工具比較?

  1. IronPDF:HTML 轉 PDF
  2. Aspose:HTML 轉 PDF
  3. iText 9:HTML 轉 PDF
  4. wkhtmltopdf:HTML 轉 PDF 轉換
  5. PuppeteerSharp:HTML 轉 PDF 7.結論:為什麼選擇 IronPDF?

到最後,您就會明白為什麼IronPDF是一款對開發者友好且有效率的 HTML 轉 PDF 轉換器。 請務必查看我們的其他比較指南,其中我們深入研究了IronPDFAspose.PDFiText 9wkhtmltopdfPuppeteerSharp的比較,以了解哪款軟體最適合您的項目,以及 IronPDF 為何脫穎而出。

為什麼要將HTML工具與PDF工具進行比較?

選擇合適的HTML 轉換 PDF 轉換工具對於確保您的應用程式符合效能、品質和成本要求至關重要。 由於市面上有許多選項,每個選項提供的 PDF 轉換功能各不相同,因此進行全面的比較有助於做出明智的決定。 以下是需要考慮的關鍵評估標準:

*整合複雜性:*此程式庫與您現有的 .NET 專案整合的難易程度,例如使用 NuGet 套件管理器進行簡單安裝和 API 整合標籤設定。 程式碼簡潔性:易於編寫和維護原始程式碼,包括最少的程式碼範例,例如只需幾行程式碼即可將 HTML 字串或整個網頁轉換為生成的 PDF 文件。 渲染精度:渲染引擎在產生高品質 PDF 的同時,準確處理 HTML 程式碼、JavaScript 執行、列印 CSS、HTML 表單和其他動態內容的能力。 大規模效能:** PDF 轉換器在從多個 HTML 頁面或動態內容產生 PDF 檔案時,在高負載下的效能表現。 *許可證和成本效益:定價模式(例如商業許可)以及是否適合您的專案預算。

透過評估這些因素,開發人員可以選擇既符合技術要求又符合財務限制的工具,無論是在 Visual Studio 中使用 .NET Core 或 .NET Framework 專案。

IronPDF:HTML 轉 PDF

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 1

IronPDF是一個功能齊全的 .NET 程式庫,專為開發人員設計。 它提供開箱即用的方法,只需極少的設定即可將 HTML 字串、本機檔案和即時 URL 轉換為 PDF。其基於 Chrome 的渲染引擎確保了高精度,並支援 CSS 和 JavaScript。 IronPDF是商業軟體,但提供強大的技術支援和簡單易用的API。

轉換為 PDF 的 HTML 字串

使用 IronPDF 可以輕鬆地將 HTML字串轉換為 PDF 。 這種方法非常適合動態內容生成或小型 HTML 程式碼片段。

Example:

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
        pdf.SaveAs("output.pdf");
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

生成的PDF文檔

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 2

解釋:

  1. ChromePdfRenderer ChromePdfRenderer類別是 IronPDF 中將 HTML 轉換為 PDF 的主要工具。 它預先配置好,只需極少的設定即可處理大多數使用場景。
  2. RenderHtmlAsPdf此方法接受一個 HTML 字串作為輸入,並產生一個 PDF 文件。
  3. SaveAs產生的 PDF 檔案儲存到指定路徑(output.pdf)。

本地 HTML 檔案轉 PDF

對於需要轉換本機 HTML 檔案(包含 CSS 或 JavaScript 等外部資源)的應用程序,IronPDF 讓轉換變得輕鬆簡單。

Example:

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("template.html");
        pdf.SaveAs("report.pdf");
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("template.html");
        pdf.SaveAs("report.pdf");
    }
}
Imports IronPdf
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()
		Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("template.html")
		pdf.SaveAs("report.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

輸入 HTML 文件

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 3

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 4

解釋:

  • RenderHtmlFileAsPdf:將本機 HTML 檔案轉換為 PDF。
  • 自動處理連結資源,例如外部 CSS 和 JavaScript 檔案。

URL 至 PDF

IronPDF 在轉換來自URL 的動態 Web 內容(包括使用 JavaScript 的頁面)時尤其強大。

Example:

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000); // Wait up to 3 seconds for JS to load

        PdfDocument pdf = renderer.RenderUrlAsPdf("https://apple.com");
        pdf.SaveAs("url-to-pdf.pdf");
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000); // Wait up to 3 seconds for JS to load

        PdfDocument pdf = renderer.RenderUrlAsPdf("https://apple.com");
        pdf.SaveAs("url-to-pdf.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 5

解釋:

  • RenderUrlAsPdf:取得 URL 內容(包括 JavaScript 渲染的元素),並將其轉換為 PDF。

結論/何時使用

IronPDF 非常適合需要輕鬆整合 API、編寫最少程式碼以及支援操作 PDF 文件、建立動態文件、HTML 表單、自訂標題和可列印版本的 Web 內容的開發人員。 非常適合在 Visual Studio 中開發 .NET Core 或 .NET Framework 專案。

Aspose:HTML 轉 PDF 轉換

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 6

Aspose.PDF 是另一個功能強大的 PDF 處理庫,支援將 HTML 轉換為 PDF。 讓我們看看 Aspose 是如何處理每種轉換場景的:

轉換為 PDF 的 HTML 字串

與 IronPDF 相比,Aspose 在轉換 HTML 字串時需要更多的設定。

Example:

using Aspose.Html;
using Aspose.Html.Saving;

Document doc = new Document();
Page page = doc.getPages().Add();
HtmlFragment htmlFragment = new HtmlFragment("<h1>HTML String</h1>");
page.getParagraphs().Add(htmlFragment);
doc.Save("HTMLStringUsingDOM.pdf");
using Aspose.Html;
using Aspose.Html.Saving;

Document doc = new Document();
Page page = doc.getPages().Add();
HtmlFragment htmlFragment = new HtmlFragment("<h1>HTML String</h1>");
page.getParagraphs().Add(htmlFragment);
doc.Save("HTMLStringUsingDOM.pdf");
Imports Aspose.Html
Imports Aspose.Html.Saving

Private doc As New Document()
Private page As Page = doc.getPages().Add()
Private htmlFragment As New HtmlFragment("<h1>HTML String</h1>")
page.getParagraphs().Add(htmlFragment)
doc.Save("HTMLStringUsingDOM.pdf")
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 7

解釋:

*文件 doc:建立一個新文件來儲存轉換後的 HTML 字串。

  • Page page:此行程式碼會為我們建立的空白文件新增一個新頁面。
  • HtmlFragment htmlFragment:這是我們要轉換的 HTML 字串。
  • page.getParagraphs().Add(htmlFragment):將 HTML 加入到文件中。
  • doc.Save:將包含 HTML 內容的文件儲存為 PDF 文件。

本地 HTML 檔案轉 PDF

Aspose 也支援將本機 HTML 檔案轉換為 PDF,但它比 IronPDF 需要更多的配置。

Example:

using Aspose.Html;
using Aspose.Html.Converters;
using Aspose.Html.Saving;

var document = new HTMLDocument("document.html");
var options = new PdfSaveOptions();
Converter.ConvertHTML(document, options, "output.pdf");
using Aspose.Html;
using Aspose.Html.Converters;
using Aspose.Html.Saving;

var document = new HTMLDocument("document.html");
var options = new PdfSaveOptions();
Converter.ConvertHTML(document, options, "output.pdf");
Imports Aspose.Html
Imports Aspose.Html.Converters
Imports Aspose.Html.Saving

Private document = New HTMLDocument("document.html")
Private options = New PdfSaveOptions()
Converter.ConvertHTML(document, options, "output.pdf")
$vbLabelText   $csharpLabel

輸入HTML程式碼:

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 8

Output:

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 9

解釋:

  • var document = new HTMLDocument("document.html"):載入 HTML 檔案。
  • var options:建立一個新的 PdfSaveOptions 物件。
  • Converter.ConvertHTML():將 HTML 轉換為 PDF。

URL 至 PDF

Aspose 為 URL 提供了類似的功能,但需要額外的設定。

Example:

using System.IO;
using System;
using System.Net.Http;
using Aspose.Pdf;

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("https://www.apple.com");
response.EnsureSuccessStatusCode();
string responseFromServer = await response.Content.ReadAsStringAsync();
MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseFromServer));
HtmlLoadOptions options = new HtmlLoadOptions("https://www.apple.com");
Document pdfDocument = new Document(stream, options);
pdfDocument.Save("WebPageToPDF_out.pdf");
using System.IO;
using System;
using System.Net.Http;
using Aspose.Pdf;

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("https://www.apple.com");
response.EnsureSuccessStatusCode();
string responseFromServer = await response.Content.ReadAsStringAsync();
MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseFromServer));
HtmlLoadOptions options = new HtmlLoadOptions("https://www.apple.com");
Document pdfDocument = new Document(stream, options);
pdfDocument.Save("WebPageToPDF_out.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 10

解釋:

  • dataDir變數保存產生的 PDF 檔案將儲存到的目錄。
  • 建立一個WebRequest來存取維基百科主頁 URL,並且使用預設憑證進行請求。
  • GetResponse()方法傳送請求並以 HttpWebResponse 的形式檢索回應。
  • 從回應中取得流,StreamReader 將頁面的整個 HTML 內容讀取到responseFromServer字串中。
  • responseFromServer的 HTML 內容轉換為位元組數組,然後載入到MemoryStream中。
  • HtmlLoadOptions用於指定相對連結的基本 URL 和其他設定。
  • 從包含 HTML 的記憶體流建立一個Aspose.Pdf.Document ,並將該文件儲存為 PDF 到指定的目錄。

結論/何時使用

Aspose.PDF 最適合需要進階 PDF 處理和轉換的企業專案。 它功能強大,但對於快速的 HTML 轉 PDF 任務來說不夠簡潔高效。

iText 9:HTML 轉 PDF

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 11

iText 9是 iText PDF 函式庫的最新版本,為在 .NET 應用程式中產生和操作 PDF 文件提供了增強的功能。 它引入了更精簡、更具可擴展性的 API,提高了效能,並更好地支援現代 PDF 標準。

轉換為 PDF 的 HTML 字串

以下是使用 iText 9 將 HTML 字串轉換為 PDF 文件的基本範例。

Example:

using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputFile = "SimpleHtmlToPdf.pdf";

        using (var pdfStream = new FileStream(outputFile, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, pdfStream);
        }

        System.Console.WriteLine("PDF generated: " + outputFile);
    }
}
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputFile = "SimpleHtmlToPdf.pdf";

        using (var pdfStream = new FileStream(outputFile, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, pdfStream);
        }

        System.Console.WriteLine("PDF generated: " + outputFile);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 12

本地 HTML 檔案轉 PDF

iText 9 可以使用 HtmlConverter.ConvertToPdf 類別將 HTML 檔案類型轉換為 PDF。

Example:

using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string htmlFile = "document.html";
        string outputPdf = "html-file-to-pdf.pdf";

        // Read HTML content from file
        string htmlContent = File.ReadAllText(htmlFile);

        // Convert HTML string to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        System.Console.WriteLine("PDF generated: " + outputPdf);
    }
}
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string htmlFile = "document.html";
        string outputPdf = "html-file-to-pdf.pdf";

        // Read HTML content from file
        string htmlContent = File.ReadAllText(htmlFile);

        // Convert HTML string to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        System.Console.WriteLine("PDF generated: " + outputPdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 13

解釋:

  • HtmlConverter:直接將 HTML 檔案轉換為 PDF。

URL 至 PDF

iText7 也支援轉換來自 URL 的內容。

Example:

using iText.Html2pdf;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string url = "https://apple.com";
        string outputPdf = "url-to-pdf.pdf";

        using var httpClient = new HttpClient();
        // Fetch the HTML content from the URL
        string htmlContent = await httpClient.GetStringAsync(url);

        // Convert HTML content to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        Console.WriteLine("PDF generated: " + outputPdf);
    }
}
using iText.Html2pdf;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string url = "https://apple.com";
        string outputPdf = "url-to-pdf.pdf";

        using var httpClient = new HttpClient();
        // Fetch the HTML content from the URL
        string htmlContent = await httpClient.GetStringAsync(url);

        // Convert HTML content to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        Console.WriteLine("PDF generated: " + outputPdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 14

解釋:

  • HttpClient.GetStringAsync(url):從 URL 下載實際的 HTML 內容。
  • HtmlConverter.ConvertToPdf(htmlContent, …):將取得的 HTML 字串轉換為渲染的 PDF。

結論/何時使用

iText 9 適用於需要強大的企業級解決方案來建立、操作 PDF 以及將 HTML 轉換為 PDF 的開發人員。 當您需要對生成的 PDF 進行精確控制、與現有 iText 工作流程集成,或使用數位簽章和表單等高級 PDF 功能時,它能很好地發揮作用。 但是,對於簡單的 HTML 轉 PDF 任務,iText 9 比 IronPDF 等精簡庫更笨重、更複雜。

wkhtmltopdf:HTML 轉 PDF 轉換

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 15

存檔和維護狀態

需要注意的是, wkhtmltopdf已不再積極維護。 其 GitHub 儲存庫已於 2023 年 1 月正式存檔並標記為唯讀,這意味著不會再進行任何更新、錯誤修復或安全性修補程式。

對開發者的影響:雖然 wkhtmltopdf 對於非常基本的用例仍然有效,但由於其未維護狀態和過時的渲染引擎,它成為一個有風險的選擇——尤其是在生產環境或處理動態或外部 HTML 內容的應用程式中。

wkhtmltopdf 是一個命令列工具,它使用 Webkit 渲染將 HTML 檔案轉換為 PDF。 以下是它在不同情況下的運作方式:

轉換為 PDF 的 HTML 字串

wkhtmltopdf需要先將 HTML 字串寫入檔案轉換。

Example:

using System;
using System.IO;
using System.Diagnostics;
class Program
{
    static void Main(string[] args)
    {
        // HTML string to be converted to PDF
        string html = "<html><body><h1>Hello, World!</h1></body></html>";
        // Write HTML string to temporary file
        string tempHtmlFile = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempHtmlFile, html);
        // Set output PDF path
        string outputPdfFile = Path.Combine(Path.GetTempPath(), "html-string-to-pdf.pdf");
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{tempHtmlFile}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        // Clean up the temporary HTML file
        File.Delete(tempHtmlFile);
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
using System;
using System.IO;
using System.Diagnostics;
class Program
{
    static void Main(string[] args)
    {
        // HTML string to be converted to PDF
        string html = "<html><body><h1>Hello, World!</h1></body></html>";
        // Write HTML string to temporary file
        string tempHtmlFile = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempHtmlFile, html);
        // Set output PDF path
        string outputPdfFile = Path.Combine(Path.GetTempPath(), "html-string-to-pdf.pdf");
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{tempHtmlFile}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        // Clean up the temporary HTML file
        File.Delete(tempHtmlFile);
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
Imports System
Imports System.IO
Imports System.Diagnostics
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' HTML string to be converted to PDF
		Dim html As String = "<html><body><h1>Hello, World!</h1></body></html>"
		' Write HTML string to temporary file
		Dim tempHtmlFile As String = Path.Combine(Path.GetTempPath(), "temp.html")
		File.WriteAllText(tempHtmlFile, html)
		' Set output PDF path
		Dim outputPdfFile As String = Path.Combine(Path.GetTempPath(), "html-string-to-pdf.pdf")
		' Execute wkhtmltopdf command
		Dim process As New Process()
		process.StartInfo.FileName = "wkhtmltopdf"
		process.StartInfo.Arguments = $"""{tempHtmlFile}"" ""{outputPdfFile}"""
		process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
		process.Start()
		process.WaitForExit()
		' Clean up the temporary HTML file
		File.Delete(tempHtmlFile)
		Console.WriteLine($"PDF saved to: {outputPdfFile}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 16

解釋:

  • wkhtmltopdf需要一個輸入文件,所以我們先將 HTML 字串寫入暫存檔案 (temp.html)。 然後我們使用 Process 類別來執行wkhtmltopdf命令,並將臨時 HTML 檔案的檔案路徑和所需的輸出 PDF 路徑作為參數傳遞。
  • 轉換完成後,我們會刪除臨時 HTML 檔案以進行清理。

本地 HTML 檔案轉 PDF

若要使用wkhtmltopdf將本機 HTML 檔案轉換為 PDF,您可以直接指定 HTML 檔案的檔案路徑。

Example:

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // Path to the local HTML file
        string htmlFilePath = @"C:\path\to\your\document.html";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\html-file-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{htmlFilePath}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // Path to the local HTML file
        string htmlFilePath = @"C:\path\to\your\document.html";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\html-file-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{htmlFilePath}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 17

解釋:

  • 此範例僅提供本機 HTML 檔案 (template.html) 的路徑和 PDF 的輸出路徑。
  • wkhtmltopdf直接處理本地文件,使命令操作簡單明了。

URL 至 PDF

使用wkhtmltopdf可以輕鬆地將 URL 轉換為 PDF。 只需將 URL 直接傳遞給命令即可。

Example:

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // URL to be converted to PDF
        string url = "https://apple.com";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\url-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{url}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // URL to be converted to PDF
        string url = "https://apple.com";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\url-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{url}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 18

解釋:

  • 在這個範例中, wkhtmltopdf直接接受 URL 作為輸入。
  • 將 URL 作為參數傳遞給wkhtmltopdf ,並將輸出儲存為 PDF 到指定路徑。

PuppeteerSharp:HTML 轉 PDF

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 19

PuppeteerSharp是 Google Puppeteer 的 .NET 封裝器,可對無頭 Chrome/Chromium 進行控制。 它在渲染 JavaScript 密集型動態頁面方面表現出色,但需要下載和管理 Chromium 實例,這會增加開銷。 它是根據 Apache 2.0 協定開源的。

轉換為 PDF 的 HTML 字串

Puppeteer 是為渲染完整頁面而設計的,因此轉換 HTML 字串需要將其寫入檔案或直接在瀏覽器中渲染。

Example:

using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
       // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync();
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();
        string htmlContent = "<h1>Hello, World!</h1><p>This is a PDF generated from HTML string.</p>";
        await page.SetContentAsync(htmlContent);
        // Save the page as a PDF
        await page.PdfAsync("html-string-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
       // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync();
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();
        string htmlContent = "<h1>Hello, World!</h1><p>This is a PDF generated from HTML string.</p>";
        await page.SetContentAsync(htmlContent);
        // Save the page as a PDF
        await page.PdfAsync("html-string-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 20

解釋:

  • Puppeteer.LaunchAsync:以無頭模式啟動 Chromium 的新實例。
  • page.SetContentAsync:將 HTML 字串載入到瀏覽器頁面中。
  • page.PdfAsync:將載入的 HTML 轉換為 PDF 並將其儲存到文件中。

本地 HTML 檔案轉 PDF

若要使用 PuppeteerSharp 將本機 HTML 檔案轉換為 PDF,您可以將該檔案載入到無頭瀏覽器中並產生 PDF。

Example:

using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Load the local HTML file
        await page.GoToAsync("file:///path/to/your/template.html");

        // Save the page as a PDF
        await page.PdfAsync("html-file-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Load the local HTML file
        await page.GoToAsync("file:///path/to/your/template.html");

        // Save the page as a PDF
        await page.PdfAsync("html-file-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
Imports PuppeteerSharp
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' Download the browser if necessary
		Await (New BrowserFetcher()).DownloadAsync(BrowserFetcher.DefaultRevision)
		Dim browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {.Headless = True})
		Dim page = Await browser.NewPageAsync()

		' Load the local HTML file
		Await page.GoToAsync("file:///path/to/your/template.html")

		' Save the page as a PDF
		Await page.PdfAsync("html-file-to-pdf.pdf")
		Await browser.CloseAsync()
	End Function
End Class
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 21

解釋:

  • page.GoToAsync:載入本機 HTML 檔案(請確保使用正確的[file://]()路徑)。
  • page.PdfAsync:將本機 HTML 檔案的內容轉換為 PDF。

URL 至 PDF

將 URL 轉換為 PDF 是 PuppeteerSharp 的核心功能之一,因為它能夠處理包含 JavaScript 的複雜頁面。

Example:

using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Navigate to the URL
        await page.GoToAsync("https://example.com");

        // Save the page as a PDF
        await page.PdfAsync("url-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Navigate to the URL
        await page.GoToAsync("https://example.com");

        // Save the page as a PDF
        await page.PdfAsync("url-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
Imports PuppeteerSharp
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' Download the browser if necessary
		Await (New BrowserFetcher()).DownloadAsync(BrowserFetcher.DefaultRevision)
		Dim browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {.Headless = True})
		Dim page = Await browser.NewPageAsync()

		' Navigate to the URL
		Await page.GoToAsync("https://example.com")

		' Save the page as a PDF
		Await page.PdfAsync("url-to-pdf.pdf")
		Await browser.CloseAsync()
	End Function
End Class
$vbLabelText   $csharpLabel

Output

針對 .NET 開發人員的 C# HTML 轉 PDF(終極指南):圖 22

解釋:

  • page.GoToAsync:導覽至指定的 URL。
  • page.PdfAsync:將 URL 處的網頁轉換為 PDF 並儲存。

結論/何時使用

當您需要對現代的、大量使用 JavaScript 的 Web 應用程式進行像素級精確渲染時,PuppeteerSharp 是理想之選。 它比 IronPDF 更複雜,但在處理動態網頁內容方面表現出色。

為什麼選擇 IronPDF?

IronPDF 的優勢在於其易用性、靈活性以及與 .NET 應用程式的無縫整合。 它易於實現,支援 HTML、CSS 和 JavaScript 渲染,無需額外的設定或外部相依性。 除了 HTML 轉 PDF 功能外,IronPDF 還提供多種功能,例如從各種文件類型建立 PDF 文件編輯和添加現有 PDF 文件、添加浮水印、 PDF 文件安全性等等! 要了解該程式庫的更多實際應用,請務必查看操作指南,其中演示了其每個功能的實際應用。

結論

在 C# 中將 HTML 轉換為 PDF 檔案時,有幾種強大的工具可供選擇,每種工具都提供獨特的功能和特性。 IronPDFAsposeiText 9wkhtmltopdfPuppeteerSharp都提供了強大的解決方案,可以將 HTML 內容轉換為專業級的 PDF 文件。 然而,為您的專案選擇合適的工具取決於整合的便利性、對動態內容的支援、效能和靈活性等因素。

工具HTML 字串到 PDFHTML 檔案到 PDFURL 到 PDF注意事項
IronPDF 的標誌
IronPDF
使用RenderHtmlAsPdf可以輕鬆處理 HTML 字串。易於使用,並可無縫整合到 .NET 應用程式中。使用RenderHtmlFileAsPdf ,自動處理連結資源(CSS、JS)。使用RenderUrlAsPdf ,支援 JavaScript 密集頁面和動態內容。與 .NET 完全集成,是 .NET 開發人員的理想選擇。支援 HTML 字串、文件和 URL。
Aspose 的標誌
Aspose
需要更多設定。它使用Document物件中的HtmlFragment來轉換 HTML 字串。需要HtmlDocumentPdfSaveOptions才能進行本機 HTML 檔案轉換。比 IronPDF 需要更多配置。需要使用WebRequest進行額外設定以取得內容,然後再使用HtmlLoadOptions進行轉換。它功能強大,可處理各種文檔,但設定過程可能較為複雜。適合處理更複雜的PDF文件。
iText 的標誌
iText7
使用HtmlConverter.ConvertToPdf將 HTML 字串轉換為 PDF。使用HtmlConverter.ConvertToPdf將本機 HTML 檔案轉換為 PDF。與本地文件處理類似,使用HtmlConverter.ConvertToPdf非常適合需要對 PDF 進行更多控制(而不僅僅是 HTML 轉 PDF)的開發人員。
wkhtmltopdf 的標誌
wkhtmltopdf
首先將HTML字串寫入檔案轉換。然後使用命令列工具產生PDF文件。透過指定檔案路徑,直接將本機 HTML 檔案轉換為 PDF 檔案。透過將 URL 傳遞給命令列工具,直接將 URL 轉換為 PDF。主要是一個命令列工具,可能需要額外的步驟才能整合到.NET中。最適合簡單的轉換。
PuppeteerSharp 的標誌
傀儡師夏普
使用page.SetContentAsync載入 HTML 字串,然後使用page.PdfAsync產生 PDF。透過page.GoToAsync載入本機 HTML 文件,然後將其轉換為 PDF。載入 URL 並使用page.GoToAsyncpage.PdfAsync將其轉換為 PDF。最適合動態頁面,尤其是包含大量 JavaScript 的內容。需要下載並啟動 Chromium 瀏覽器。

IronPDF 的優勢在於其簡潔性、與 .NET 的直接整合以及處理複雜 HTML (包括 JavaScript 渲染的頁面)的能力。 對於正在尋找易於使用且設定最少的解決方案的開發人員來說,它是完美的選擇。

  • Aspose提供了豐富的 PDF 處理功能,但其 HTML 到 PDF 的轉換功能需要更多配置,尤其是在處理本機檔案和外部資源時。

  • iText 9為想要建立 PDF 文件的人提供了堅實的基礎,但可能需要額外的編碼才能將 HTML 轉換為 PDF,特別是對於動態內容。 對於需要自訂 PDF 處理的項目來說,這是一個絕佳的選擇。

  • wkhtmltopdf非常適合使用命令列介面進行基本的 HTML 到 PDF 轉換,但它缺乏完整的 .NET 庫的整合性和靈活性。

  • PuppeteerSharp利用無頭 Chrome,是渲染複雜、動態網頁並將其轉換為 PDF 的首選工具,尤其是在處理 JavaScript 內容時。

對於大多數尋求一體化、簡單易用的解決方案的 .NET 開發人員來說, IronPDF值得您立即嘗試,並親身體驗其強大的功能。 從產生新的 PDF 文件到編輯現有的 PDF,親自探索 IronPDF 的全部功能。 只需安裝 IronPDF,然後使用免費試用版親自體驗即可。 看看它如何立即提升您的 PDF 工作流程。

最終,合適的工具取決於您的具體需求,但透過這裡討論的選項,您就能找到適合您專案的完美解決方案。

請注意: Aspose、iText、wkhtmltopdf 和 PuppeteerSharp 是其各自所有者的註冊商標。 本網站與 Aspose、iText、wkhtmltopdf 或 Puppeteer 沒有任何關聯,也未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自擁有者的財產。 所提供的比較僅供參考,並且基於撰寫時可公開取得的資訊。