使用 IRONPDF

如何使用 C# 在不使用庫的情況下將 HTML 轉換為 PDF

介紹

當涉及到在 C# 中將 HTML 轉換為 PDF 時,開發人員可能會考慮使用原生 .NET 功能,而不依賴外部函式庫。 雖然這種方法在某些情況下是可行的,但它也有其自身的優勢和挑戰。 本文將探討過程、優缺點,並討論為什麼像IronPDF這樣的庫可能是更好的選擇。

工作原理

使用內建的 .NET 工具,您可以透過渲染 HTML 內容並使用 WebBrowser 控件及 PrintDocument 類別來實現 HTML 到 PDF 的轉換。 這是一個簡化的工作流程:

  1. 將 HTML 內容寫入臨時檔案。

  2. 將 HTML 加載到 WebBrowser 控制項中進行渲染。

  3. 使用 PrintDocument 類別來創建一個列印任務,以輸出渲染的內容。

    雖然此方法避免了外部相依性,但它涉及到處理低階元件以及手動定義列印邏輯。

    如果您想在 C# 中將 HTML 轉換為 PDF,而不使用任何外部庫,您可以使用內建的 .NET 功能,如 System.IO 和 System.Drawing.Printing 來渲染 HTML,然後創建 PDF。 以下是一個基本範例來幫助您入門:

如何在不使用庫的情況下將 HTML 轉換為 PDF c

如何在不使用函式庫的情況下將 HTML 轉換為 PDF:C# 圖 1

using System;
using System.IO;
using System.Windows.Forms; // You need to add a reference to System.Windows.Forms
using System.Drawing.Printing;
class Program
{
    [STAThread] // Required for using WebBrowser control
    static void Main()
    {
        // HTML content
        string htmlContent = "<html><body><h1>Hello, World!</h1></body></html>";
        // Write HTML content to a temporary file
        string tempFilePath = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempFilePath, htmlContent);
        // Create WebBrowser to render HTML
        WebBrowser webBrowser = new WebBrowser();
        webBrowser.DocumentCompleted += (sender, e) => 
        {
            // Print the document to a file
            PrintDocument printDoc = new PrintDocument();
            printDoc.PrintPage += (s, args) =>
            {
                args.Graphics.DrawString(htmlContent, new Font("Arial", 12), Brushes.Black, new PointF(100, 100));
            };
            // Save as PDF (or use PrintDialog for physical printing)
            printDoc.PrintController = new StandardPrintController(); // Silent print
            printDoc.Print(); // You'd need to replace this with PDF creation logic.
            Application.ExitThread(); // Close the application
        };
        // Load the HTML file
        webBrowser.Url = new Uri(tempFilePath);
        Application.Run();
    }
}
using System;
using System.IO;
using System.Windows.Forms; // You need to add a reference to System.Windows.Forms
using System.Drawing.Printing;
class Program
{
    [STAThread] // Required for using WebBrowser control
    static void Main()
    {
        // HTML content
        string htmlContent = "<html><body><h1>Hello, World!</h1></body></html>";
        // Write HTML content to a temporary file
        string tempFilePath = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempFilePath, htmlContent);
        // Create WebBrowser to render HTML
        WebBrowser webBrowser = new WebBrowser();
        webBrowser.DocumentCompleted += (sender, e) => 
        {
            // Print the document to a file
            PrintDocument printDoc = new PrintDocument();
            printDoc.PrintPage += (s, args) =>
            {
                args.Graphics.DrawString(htmlContent, new Font("Arial", 12), Brushes.Black, new PointF(100, 100));
            };
            // Save as PDF (or use PrintDialog for physical printing)
            printDoc.PrintController = new StandardPrintController(); // Silent print
            printDoc.Print(); // You'd need to replace this with PDF creation logic.
            Application.ExitThread(); // Close the application
        };
        // Load the HTML file
        webBrowser.Url = new Uri(tempFilePath);
        Application.Run();
    }
}
Imports System
Imports System.IO
Imports System.Windows.Forms ' You need to add a reference to System.Windows.Forms
Imports System.Drawing.Printing
Friend Class Program
	<STAThread>
	Shared Sub Main()
		' HTML content
		Dim htmlContent As String = "<html><body><h1>Hello, World!</h1></body></html>"
		' Write HTML content to a temporary file
		Dim tempFilePath As String = Path.Combine(Path.GetTempPath(), "temp.html")
		File.WriteAllText(tempFilePath, htmlContent)
		' Create WebBrowser to render HTML
		Dim webBrowser As New WebBrowser()
		AddHandler webBrowser.DocumentCompleted, Sub(sender, e)
			' Print the document to a file
			Dim printDoc As New PrintDocument()
			AddHandler printDoc.PrintPage, Sub(s, args)
				args.Graphics.DrawString(htmlContent, New Font("Arial", 12), Brushes.Black, New PointF(100, 100))
			End Sub
			' Save as PDF (or use PrintDialog for physical printing)
			printDoc.PrintController = New StandardPrintController() ' Silent print
			printDoc.Print() ' You'd need to replace this with PDF creation logic.
			Application.ExitThread() ' Close the application
		End Sub
		' Load the HTML file
		webBrowser.Url = New Uri(tempFilePath)
		Application.Run()
	End Sub
End Class
$vbLabelText   $csharpLabel

程式碼說明

  1. WebBrowser 控制項用於呈現 HTML。

  2. PrintDocument 類別用來定義列印行為。

  3. 這個例子不會直接創建 PDF; 您需要擴展它以整合原始 PDF 創建邏輯,例如手動繪製文本和形狀,或處理流。

    這種方法有限,對於大型或帶有樣式的 HTML 文件可能會變得複雜。 如果您的使用情境允許,使用像 IronPDF 這樣的庫通常會更加高效且功能豐富。

使用內建 .NET 功能的優缺點

優點

  • 無外部依賴:避免外部庫可以減少管理專案中的第三方依賴關係的複雜性。
  • 免費:由於此方法僅使用本地 .NET 元件,因此無需支付授權費或額外費用。
  • 精細控制:您可以完全控制內容的渲染和列印方式,從而實現自定義處理。

缺點

  • 有限功能:內建的 .NET 工具缺乏準確呈現複雜 HTML、CSS 或 JavaScript 的能力。 可能不支援進階佈局、響應式設計或動態內容。
  • 耗時的實作:您需要撰寫自訂程式碼來處理渲染、分頁和 PDF 創建,這可能會導致較高的開發成本。
  • 低擴展性:對於大型或高性能應用程式,此方法可能效率低下且易於出現瓶頸。
  • 沒有原生 PDF 支援:工作流程無法直接建立 PDF; 您需要實現自定義邏輯來從列印輸出生成 PDF 文件。

IronPDF 介紹

如何在不使用程式庫的情況下將 HTML 轉換為 PDF C#:圖 2

IronPDF 是一個 .NET 函式庫,可以讓開發者輕鬆地將 HTML 轉換為 PDF。 它支持多種功能,包括 CSS、JavaScript,甚至嵌入式圖像。 使用 IronPDF,您可以創建外觀與您的 HTML 網頁完全相同的 PDF,確保格式之間的無縫銜接。 這個程式庫對於需要即時生成動態 PDF 文件的網路應用程式特別有用。

IronPDF 允許開發人員將 PDF 功能無縫整合到 .NET 應用程式中,而無需手動管理 PDF 檔案結構。 IronPDF 利用 基於 Chrome 的渲染引擎 將 HTML 頁面(包括複雜的 CSS、JavaScript 和圖像)轉換為結構良好的 PDF 文件。 它可以用於生成報告、發票、電子書或任何需要以 PDF 格式呈現的文件。

IronPDF 非常多功能,不僅可以呈現 PDF,還提供廣泛的 PDF 操作選項,例如編輯、表單處理、加密等。

IronPDF 的主要功能

  1. HTML 轉換為 PDF

    • HTML 渲染IronPDF 可以將 HTML 文件格式的文檔或網頁(包括帶有 CSS、圖片和 JavaScript 的 HTML)直接轉換為 PDF 文檔。 它也可以使用 HTML 模板進行轉換。 這非常適合從動態網頁內容生成 PDF。

    • 支持現代 HTML/CSS:IronPDF 處理現代的 HTML5、CSS3 和 JavaScript,確保您的基於網頁的內容準確生成 PDF,並保留其佈局、字體和互動元素。

    • 高級渲染:它使用 Chrome 的渲染引擎(透過 Chromium)進行精確、高品質的 PDF 生成,使其比許多其他 HTML-to-PDF 函式庫更可靠。
    • 網站網址轉PDFIronPDF 可以將網站的字串網址作為輸入並轉換為PDF。
  2. 自訂頁首和頁尾

    • IronPDF 允許開發者向 PDF 文件添加自訂的頁眉和頁腳,其中可以包含動態內容,例如頁碼、文件標題或自訂文本。
    • 頁眉和頁腳可以新增到單個頁面,或者作為整個文件中的一致元素。
  3. PDF 中的 JavaScript 支援

    • IronPDF 在生成 PDF 之前,允許在 HTML 內容中執行 JavaScript。 這允許動態內容渲染,例如表單計算或在生成的PDF中提供互動性。
    • JavaScript 在從動態網頁創建 PDF 或生成需要客戶端邏輯的報告時非常有用。
  4. 編輯現有 PDF

    • IronPDF 提供編輯現有 PDF 的功能。 您可以修改文字、圖像,並向現有的 PDF 文件添加註釋。 此功能對於在 PDF 文件中添加水印、簽名或更新內容非常有用。
    • 文本提取和修改允許您以編程方式操縱 PDF 文件中的內容。
  5. 合併及分割PDF

    • IronPDF 允許您將多個 PDF 文件合併成一個文件,或將較大的 PDF 拆分成較小的文件。 這非常適合需要合併或拆分文件以使其更易於管理的工作流程。
  6. 支援互動表單

    • 您可以使用 IronPDF 創建、填寫及處理 PDF 表單。 它提供對互動式表單(如文本字段、複選框和單選按鈕)的全面支持,並允許您用數據預填表單。
    • IronPDF 也可以從現有的 PDF 中提取表單數據,使得以程式方式讀取和處理表單數據變得簡單。
  7. 頁面操作

    • IronPDF 提供多種方法來操作 PDF 文檔中的各個頁面,例如旋轉頁面、刪除頁面或重新排序它們。 這有助於自訂最終文件的結構。
    • 您也可以將新頁面添加到現有的 PDF 中,或刪除不需要的頁面。
  8. 安全性和加密

    • IronPDF 可以對 PDF 檔案應用密碼保護和加密,確保您的文件安全無虞。 您可以設定使用者權限,例如防止列印、複製或編輯 PDF。
    • 數位簽名也可以新增到 PDF 中以驗證真實性,為機密文件提供一層安全保障。
  9. 浮水印和品牌設計

    • 使用 IronPDF 向 PDF 文件添加水印很容易。 您可以將文字或圖像作為浮水印疊加在頁面上,為您的文件提供防止未經授權的複製或分發的保護。
    • 此功能通常用於品牌塑造,當需要讓標誌或文字在文件的所有頁面上保持一致時。
    1. 文字與圖片擷取

      • IronPDF 允許從 PDF 文件中提取文字和圖像,使開發人員能夠提取數據以進行處理或重用。
    • 這對於需要分析 PDF 內容、從表單中提取信息或檢索圖像以供進一步使用的場景很有幫助。
    1. Unicode 和多語言支援

      • IronPDF 擁有強大的 Unicode 支援,這意味著它可以處理國際字符和字體,非常適合生成多語言的 PDF。
    • 它支持中文、阿拉伯語、俄語等語言,允許創建多語言 PDF 文件。
    1. 性能優化
    • IronPDF 經過性能優化,能夠處理大型 PDF 文件及高容量請求。 該庫確保即使在處理大型資料集或圖像時,PDF 生成仍然快速且高效。
    1. API 和開發者友好工具

      • IronPDF 具有全面且易於使用的 API。 開發人員可以透過使用簡單的方法調用來快速完成複雜的任務。
    • API 文件完整,使將 IronPDF 集成到任何 C# 或 .NET 應用程式中變得輕而易舉。
    1. 跨平台支援
    • IronPDF 是跨平台兼容的,這意味著它可以在 Windows 和 Linux 環境中使用,使您能夠在不同的操作系統中生成和操作 PDF。

如何使用 IronPDF 將 HTML 轉換為 PDF

class Program
{
    static void Main()
    {
        // Specify license key
        License.LicenseKey = "Yoour Key";
        // Create a new HtmlToPdf object
        var Renderer = new ChromePdfRenderer();
        // Define the HTML string/ HTML code to be converted, can use html document
        string htmlContent = "<html><body><h1>IronPDF: Easily Convert HTML to PDF</h1></body></html>";
        // Convert pdf simple HTML string to a PDF document
        var document = Renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF output document to a file
        document.SaveAs("html2Pdf.pdf"); // path to pdf file generated
    }
}
class Program
{
    static void Main()
    {
        // Specify license key
        License.LicenseKey = "Yoour Key";
        // Create a new HtmlToPdf object
        var Renderer = new ChromePdfRenderer();
        // Define the HTML string/ HTML code to be converted, can use html document
        string htmlContent = "<html><body><h1>IronPDF: Easily Convert HTML to PDF</h1></body></html>";
        // Convert pdf simple HTML string to a PDF document
        var document = Renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF output document to a file
        document.SaveAs("html2Pdf.pdf"); // path to pdf file generated
    }
}
Friend Class Program
	Shared Sub Main()
		' Specify license key
		License.LicenseKey = "Yoour Key"
		' Create a new HtmlToPdf object
		Dim Renderer = New ChromePdfRenderer()
		' Define the HTML string/ HTML code to be converted, can use html document
		Dim htmlContent As String = "<html><body><h1>IronPDF: Easily Convert HTML to PDF</h1></body></html>"
		' Convert pdf simple HTML string to a PDF document
		Dim document = Renderer.RenderHtmlAsPdf(htmlContent)
		' Save the PDF output document to a file
		document.SaveAs("html2Pdf.pdf") ' path to pdf file generated
	End Sub
End Class
$vbLabelText   $csharpLabel

程式碼片段說明

1. 許可金鑰設置

程式開始時設置IronPDF license key,這是解鎖程式庫完整功能所需的。

2. 建立渲染器

初始化一個 ChromePdfRenderer 實例。 此元件負責將 HTML 內容轉換為PDF 文件,作為原 HTML 與最終輸出之間的橋樑。

3. 定義 HTML 內容

一個字串變數 htmlContent 被創建來存儲將轉換為 PDF 的HTML 結構。 在這個範例中,它包含一個簡單的標題。

4. 將 HTML 轉換為 PDF

在 ChromePdfRenderer 實例上調用 RenderHtmlAsPdf() 方法,將 HTML 字串作為輸入。 此函式處理內容並將其轉換為PDF 文件

5. 儲存 PDF

最後,生成的 PDF 使用 SaveAs() 方法保存到名為 "html2Pdf.pdf" 的文件中,並存儲在磁碟上以供日後訪問。

輸出

如何將 HTML 轉換為 PDF C# 無需使用庫:圖 3

授權資訊(提供試用)

IronPDF 需要一個有效的授權金鑰才能完全運行。 您可以從官方網站獲取試用許可證。在使用IronPDF庫之前,請按照以下方式設置許可證密鑰:

IronPdf.License.LicenseKey = "your key";
IronPdf.License.LicenseKey = "your key";
IronPdf.License.LicenseKey = "your key"
$vbLabelText   $csharpLabel

這確保了該程式庫運行沒有限制。

結論

雖然使用內建的 .NET 功能進行 HTML 到 PDF 的轉換可能是處理簡單用例的一個可行解決方案,但它通常需要投入大量精力且缺乏現代功能。 相比之下,像IronPDF這樣的函式庫提供了強大的功能、更快的開發速度和對進階HTML渲染的支持,使其成為大多數開發人員的首選。 最終決定取決於您的專案需求、預算和開發優先事項。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
HTML 轉 PDF 轉換器 C# 開源 (.NET 函式庫比較)
下一個 >
C# 生成 PDF 7 個庫比較(免費和付費工具)