跳過到頁腳內容
使用IRONPDF

HTML到PDF轉換器C#開源(.NET 庫比較)

將HTML轉換為PDF是許多軟體應用程式中的常見需求,例如生成報告、發票或將網頁儲存為PDF。 在本文中,我們將探索三個流行的開源C# HTML到PDF轉換程式庫,檢討其優勢和局限,並討論為何IronPDF在許多情況下是更好的替代方案。

HTML至PDF轉換器C#開源

1. PuppeteerSharp

HTML到PDF轉換器C#開源(.NET程式庫比較):圖1

PuppeteerSharp是一個Puppeteer的.NET包裝器,Puppeteer是一個無頭Chromium瀏覽器。 它使開發者可以利用Chromium渲染引擎將HTML文件轉換為PDF。

PuppeteerSharp提供對渲染過程的精確控制。 這裡是一個示例:

using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download Chromium to ensure compatibility with PuppeteerSharp
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);

        // Launch a headless instance of Chromium browser
        using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }))
        {
            // Open a new browser page
            var page = await browser.NewPageAsync();

            // Set the HTML content for the page
            await page.SetContentAsync("<html><body><h1>Hello, PuppeteerSharp!</h1></body></html>");

            // Generate a PDF from the rendered HTML content
            await page.PdfAsync("output.pdf");
            Console.WriteLine("PDF Generated Successfully!");
        }
    }
}
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download Chromium to ensure compatibility with PuppeteerSharp
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);

        // Launch a headless instance of Chromium browser
        using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }))
        {
            // Open a new browser page
            var page = await browser.NewPageAsync();

            // Set the HTML content for the page
            await page.SetContentAsync("<html><body><h1>Hello, PuppeteerSharp!</h1></body></html>");

            // Generate a PDF from the rendered HTML content
            await page.PdfAsync("output.pdf");
            Console.WriteLine("PDF Generated Successfully!");
        }
    }
}
$vbLabelText   $csharpLabel

代碼解釋

  1. 下載Chromium: PuppeteerSharp會自動下載所需的Chromium版本以確保相容性。

  2. 啟動瀏覽器: 使用Puppeteer.LaunchAsync()啟動Chromium的無頭實例。

  3. 設置HTML內容: 使用page.SetContentAsync()將所需的HTML載入瀏覽器頁面。

  4. 生成PDF: 使用page.PdfAsync()方法生成渲染內容的PDF。

結果是一個高品質的PDF (output.pdf),可以準確複製HTML結構和設計。

優點

  • 高保真渲染:支持現代網頁技術,包括高級CSS和JavaScript。
  • 自動化功能: 除了PDF,PuppeteerSharp還可以自動化網頁瀏覽、測試和資料提取。
  • 積極開發: PuppeteerSharp持續維護並定期更新。

缺點

  • 文件大小大: 需要下載並捆綁Chromium瀏覽器,增加部署大小。
  • 資源密集:運行瀏覽器實例可能會對系統資源造成大的負擔,特別是針對大型應用程序。
  • 有限的PDF特定功能:PuppeteerSharp專注於渲染而非增強PDF(例如,添加頁眉或頁腳)。

2. PdfSharp

HTML到PDF轉換器C#開源(.NET程式庫比較):圖2

PdfSharp是一個功能強大的開源程式庫,用於在C#中創建和操作PDF文件。 儘管它不直接支持HTML渲染,但它在為開發者提供工具以編程方式生成和編輯PDF文件方面表現優異。

PdfSharp的主要功能

  1. PDF創建: PdfSharp允許開發者從頭定義頁面大小、添加文本、形狀、圖像等來生成新的PDF文件。

  2. 操作現有的PDF:您可以修改現有的PDF文件,例如合併、拆分或提取內容。

  3. 繪圖功能: PdfSharp提供強大的圖形功能,使用XGraphics類向PDF文件添加自定義設計。

  4. 輕量化:它是一個輕量化的程式庫,非常適合簡單且快速為優先項的項目。
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using HtmlAgilityPack;

class Program
{
    static void Main(string[] args)
    {
        // Example HTML content
        string htmlContent = "<html><body><h1>Hello, PdfSharp!</h1><p>This is an example of HTML to PDF.</p></body></html>";

        // Parse HTML using HtmlAgilityPack (You need to add HtmlAgilityPack via NuGet)
        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(htmlContent);

        // Create a new PDF document
        PdfDocument pdfDocument = new PdfDocument
        {
            Info = { Title = "HTML to PDF Example" }
        };

        // Add a new page to the document
        PdfPage page = pdfDocument.AddPage();

        XGraphics gfx = XGraphics.FromPdfPage(page);
        XFont titleFont = new XFont("Arial", 20, XFontStyle.Bold);
        XFont textFont = new XFont("Arial", 12, XFontStyle.Regular);

        // Draw the parsed HTML content
        int yPosition = 50; // Starting Y position
        foreach (var node in htmlDoc.DocumentNode.SelectNodes("//h1 | //p"))
        {
            if (node.Name == "h1")
            {
                gfx.DrawString(node.InnerText, titleFont, XBrushes.Black, new XRect(50, yPosition, page.Width - 100, page.Height - 100), XStringFormats.TopLeft);
                yPosition += 30; // Adjust spacing
            }
            else if (node.Name == "p")
            {
                gfx.DrawString(node.InnerText, textFont, XBrushes.Black, new XRect(50, yPosition, page.Width - 100, page.Height - 100), XStringFormats.TopLeft);
                yPosition += 20; // Adjust spacing
            }
        }

        // Save the PDF document
        string outputFilePath = "HtmlToPdf.pdf";
        pdfDocument.Save(outputFilePath);
        System.Console.WriteLine($"PDF file created: {outputFilePath}");
    }
}
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using HtmlAgilityPack;

class Program
{
    static void Main(string[] args)
    {
        // Example HTML content
        string htmlContent = "<html><body><h1>Hello, PdfSharp!</h1><p>This is an example of HTML to PDF.</p></body></html>";

        // Parse HTML using HtmlAgilityPack (You need to add HtmlAgilityPack via NuGet)
        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(htmlContent);

        // Create a new PDF document
        PdfDocument pdfDocument = new PdfDocument
        {
            Info = { Title = "HTML to PDF Example" }
        };

        // Add a new page to the document
        PdfPage page = pdfDocument.AddPage();

        XGraphics gfx = XGraphics.FromPdfPage(page);
        XFont titleFont = new XFont("Arial", 20, XFontStyle.Bold);
        XFont textFont = new XFont("Arial", 12, XFontStyle.Regular);

        // Draw the parsed HTML content
        int yPosition = 50; // Starting Y position
        foreach (var node in htmlDoc.DocumentNode.SelectNodes("//h1 | //p"))
        {
            if (node.Name == "h1")
            {
                gfx.DrawString(node.InnerText, titleFont, XBrushes.Black, new XRect(50, yPosition, page.Width - 100, page.Height - 100), XStringFormats.TopLeft);
                yPosition += 30; // Adjust spacing
            }
            else if (node.Name == "p")
            {
                gfx.DrawString(node.InnerText, textFont, XBrushes.Black, new XRect(50, yPosition, page.Width - 100, page.Height - 100), XStringFormats.TopLeft);
                yPosition += 20; // Adjust spacing
            }
        }

        // Save the PDF document
        string outputFilePath = "HtmlToPdf.pdf";
        pdfDocument.Save(outputFilePath);
        System.Console.WriteLine($"PDF file created: {outputFilePath}");
    }
}
$vbLabelText   $csharpLabel

代碼解釋

  1. HTML解析:示例中使用HtmlAgilityPack(一個用於解析和操作HTML的開源程式庫)從<p>標籤中提取文本內容。

  2. 繪製內容: PdfSharp的XGraphics類用於將解析的HTML內容作為文本呈現在PDF頁面上。

  3. 限制:這種方法適用於簡單的HTML結構,但不會處理複雜的佈局、樣式或JavaScript。

PdfSharp的優點和缺點

優點

  • 輕量且易於使用: PdfSharp直觀且簡單,對於首次使用PDF生成的開發者非常理想。
  • 開源且免費:無需授權費用,並且可以自訂源代碼。
  • 自定義繪圖:提供從頭開始創建具有自定義設計的PDF的優秀功能。

缺點

  • 無HTML到PF轉換: PdfSharp本身不原生支持將HTML轉換為PDF,需要額外的程式庫來解析HTML。
  • 對現代功能的支持有限:不提供高級功能如互動式PDF、數位簽名或註釋。
  • 性能限制:可能不如專業程式庫對大型或企業應用程式那樣優化。

3. Pdfium.NET SDK

HTML到PDF轉換器C#開源(.NET程式庫比較):圖3

Pdfium.NET是基於開源PDFium專案而設計的全面程式庫,旨在於.NET應用程式中查看、編輯和操作PDF文件。 它為開發者提供了強大的工具來創建、編輯和提取PDF內容,使其適合於廣泛的使用案例。 基本上是一個免費的HTML到PDF轉換程式庫。

Pdfium.NET SDK的主要功能

  1. PDF創建與編輯:

    • 從零生成PDF或從掃描圖像生成PDF。
    • 通過添加文本、圖像或註釋編輯現有的PDF。
  2. 文本和圖像提取:

    • 從PDF文件格式的文件中提取文本和圖像,以進行進一步處理。
    • 在PDF文件中搜索特定文本。
  3. PDF查看器控件:

    • 在WinForms或WPF應用程式中嵌入獨立的PDF查看器。
    • 支持縮放、捲動、書籤和文本搜索。
  4. 相容性:

    • 可用於.NET Framework、.NET Core、.NET Standard和.NET 6+。
    • 與Windows和macOS平臺相容。
  5. 高級功能:
    • 合併和拆分PDF文件。
    • 將PDF渲染為圖像以進行顯示或列印。
using Pdfium.Net.SDK;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Initialize Pdfium.NET SDK functionalities
        PdfCommon.Initialize();

        // Create a new PDF document
        PdfDocument pdfDocument = PdfDocument.CreateNew();

        // Add a page to the document (A4 size in points: 8.27 x 11.69 inches)
        var page = pdfDocument.Pages.InsertPageAt(pdfDocument.Pages.Count, 595, 842);

        // Sample HTML content to be parsed and rendered manually
        var htmlContent = "<h1>Hello, Pdfium.NET SDK!</h1><p>This is an example of HTML to PDF.</p>";

        // Example: Manually render text since Pdfium.NET doesn't render HTML directly
        var font = PdfFont.CreateFont(pdfDocument, "Arial");
        page.AddText(72, 750, font, 20, "Hello, Pdfium.NET SDK!");
        page.AddText(72, 700, font, 14, "This is an example of HTML to PDF.");

        // Save the document to a file
        string outputFilePath = "HtmlToPdfExample.pdf";
        pdfDocument.Save(outputFilePath, SaveFlags.Default);
        Console.WriteLine($"PDF created successfully: {outputFilePath}");
    }
}
using Pdfium.Net.SDK;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Initialize Pdfium.NET SDK functionalities
        PdfCommon.Initialize();

        // Create a new PDF document
        PdfDocument pdfDocument = PdfDocument.CreateNew();

        // Add a page to the document (A4 size in points: 8.27 x 11.69 inches)
        var page = pdfDocument.Pages.InsertPageAt(pdfDocument.Pages.Count, 595, 842);

        // Sample HTML content to be parsed and rendered manually
        var htmlContent = "<h1>Hello, Pdfium.NET SDK!</h1><p>This is an example of HTML to PDF.</p>";

        // Example: Manually render text since Pdfium.NET doesn't render HTML directly
        var font = PdfFont.CreateFont(pdfDocument, "Arial");
        page.AddText(72, 750, font, 20, "Hello, Pdfium.NET SDK!");
        page.AddText(72, 700, font, 14, "This is an example of HTML to PDF.");

        // Save the document to a file
        string outputFilePath = "HtmlToPdfExample.pdf";
        pdfDocument.Save(outputFilePath, SaveFlags.Default);
        Console.WriteLine($"PDF created successfully: {outputFilePath}");
    }
}
$vbLabelText   $csharpLabel

程式碼說明

  1. SDK初始化: PdfCommon.Initialize()方法初始化Pdfium.NET功能。

  2. 創建PDF: 使用PdfDocument.CreateNew()創建新PDF文件。

  3. 添加頁面: 根據指定的尺寸(例如A4大小)將頁面插入PDF。

  4. 渲染HTML內容: 由於Pdfium.NET SDK不原生支持HTML渲染,您需要手動解析和渲染HTML元素作為文本、形狀或圖像。

  5. 儲存PDF: 文件使用Save()方法儲存到文件路徑。

優點

  • 允許對PDF創建和編輯的充分控制。
  • 在繪圖和添加文本、圖像和形狀方面靈活。
  • 在桌面應用程式中查看和操控PDF的強大功能。

缺點

  • 不直接將HTML轉換為PDF。
  • 手動解析和渲染HTML可能複雜且耗時。
  • 最適合專注於PDF編輯和操作而非HTML轉換的應用程式。

介紹IronPDF

HTML到PDF轉換器C#開源(.NET程式庫比較):圖4

IronPDF是一個專業級程式庫,專為.NET開發者設計,以輕鬆將HTML內容轉換為高品質的PDF。 以其可靠性、高級功能和易用性著稱,IronPDF簡化了開發過程,同時提供精確的渲染和強大的功能。 以下是IronPDF的優勢:

主要功能

  1. 直接HTML到PDF轉換: 使用IronPDF直接使用HTML內容創建PDF文件,其中包括CSS和JavaScript,轉換為完整格式的PDF。 只需幾行代碼,開發者即可生成來自網頁、原始HTML字串或本地HTML文件的PDF。

  2. 現代渲染能力: 支持最新的網頁標準,IronPDF確保將複雜的佈局、樣式和互動元素準確渲染,將HTML頁面轉換為PDF。

  3. 高級PDF功能: IronPDF提供廣泛自訂選項,例如添加頁眉、頁腳、水印、註釋和書籤。 它還支持合併、拆分和編輯現有的PDF。

  4. 性能和可擴展性: 為小規模應用程式和企業環境進行優化,IronPDF為任意大小的項目提供快速、可靠的性能。

  5. 易於整合: 為.NET Framework和.NET Core設計,IronPDF與C#應用程式順利整合,為開發者提供簡單的設置過程和全面的文件。

為何選擇IronPDF?

IronPDF因其功能組合、開發人員支援和性能在眾多解決方案中脫穎而出。 與常常需要大量配置或外部依賴的開源替代品不同,IronPDF是一個獨立的解决方案,簡化了開發而不犧牲功能。 無論是用於生成發票、報告或存檔網頁內容,IronPDF均能夠授權開發者快速而高效地達成專業級結果。

IronPDF對於重視穩定性、可擴展性和易用性的開發者來說,都是一個實際選擇。

如何使用IronPDF將HTML轉換為PDF

using IronPdf;

class Program
{
    static void Main()
    {
        // Specify license key
        IronPdf.License.LicenseKey = "Your Key";

        // Create a new HtmlToPdf object using ChromePdfRenderer
        var Renderer = new ChromePdfRenderer();

        // Define the HTML string to be converted
        string htmlContent = "<html><body><h1>IronPDF: Better than Open source</h1></body></html>";

        // Convert the HTML string to a PDF document
        var document = Renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF document to a file
        document.SaveAs("html2Pdf.pdf");

        Console.WriteLine("PDF generated and saved successfully!");
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        // Specify license key
        IronPdf.License.LicenseKey = "Your Key";

        // Create a new HtmlToPdf object using ChromePdfRenderer
        var Renderer = new ChromePdfRenderer();

        // Define the HTML string to be converted
        string htmlContent = "<html><body><h1>IronPDF: Better than Open source</h1></body></html>";

        // Convert the HTML string to a PDF document
        var document = Renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF document to a file
        document.SaveAs("html2Pdf.pdf");

        Console.WriteLine("PDF generated and saved successfully!");
    }
}
$vbLabelText   $csharpLabel

程式片段解釋

  1. 授權金鑰設置: 程式開始通過設定IronPDF授權金鑰,這是使用該程式庫完整功能所需的。

  2. 創建渲染器: 一個ChromePdfRenderer實例被初始化。 該組件負責將HTML內容轉換為PDF文件,充當原始HTML和最終輸出之間的橋樑。

  3. 定義HTML內容: 創建一個字串變量htmlContent來存儲將要轉換為PDF的HTML結構。 在這個例子中,它包含了一個簡單的標題。

  4. 將HTML轉換為PDF:RenderHtmlAsPdf()方法,將HTML字串作為輸入。 此功能處理內容並將其轉化為PDF文件

  5. 保存PDF: 最後,通過使用SaveAs()方法將生成的PDF保存為名為"html2Pdf.pdf"的文件,將其儲存在磁碟上以供將來訪問。

輸出PDF

HTML到PDF轉換器C#開源(.NET程式庫比較):圖5

授權信息(提供試用)

IronPDF需要一個有效的授權金鑰才能使用完整功能。 您可以從官方網站獲取試用授權。在使用IronPDF程式庫之前,請如下設置授權金鑰:

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

此確保程式庫的運行不受限制。

結論

對於需要精確將HTML呈現為PDF的開發者來說,PuppeteerSharp是一個出色的選擇,特別是在處理複雜網頁時。 然而,對於需要高級PDF特定功能、性能優化和易整合的應用程式,專業工具如IronPDF通常是更好的選擇。

PdfSharp對於輕量化且需要程序生成和操作PDF的項目是一個很好的選擇,特別是針對簡單需求的項目。 然而,如果您的應用程式需要將HTML轉換為PDF或高級PDF功能,IronPDF提供了一個更高效且功能豐富的解決方案。

雖然Pdfium.NET SDK是一個強大的PDF操作工具,IronPDF提供了直接HTML到PDF轉換的原生支持,包括渲染現代HTML、CSS和JavaScript。 IronPDF具有內建HtmlToPdf.RenderHtmlAsPdf()等方法,簡化工作流程,使開發速度更快且更高效。

無論是用於生成發票、報告或存檔網頁內容,IronPDF均能夠授權開發者快速而高效地達成專業級結果。

IronPDF對於重視穩定性、可擴展性和易用性的開發者來說是實際選擇。

常見問題解答

怎樣在 C# 中將 HTML 轉換為 PDF?

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字符串轉換為 PDF。此外,IronPDF 支持使用 RenderHtmlFileAsPdf 方法將 HTML 文件直接轉換為 PDF。

使用 IronPDF 相對於開源庫在 PDF 轉換中有哪些優勢?

IronPDF 提供直接的 HTML 到 PDF 轉換,支持現代的 Web 標準、高級 PDF 功能,並易於與 .NET 應用集成。相較於 PuppeteerSharp、PdfSharp 和 Pdfium.NET SDK 等開源替代方案,它提供了一個專業的解決方案。

IronPDF 在 PDF 轉換過程中能處理複雜的 HTML、CSS 和 JavaScript 嗎?

是的,IronPDF 支持最新的 Web 標準,確保在 HTML 到 PDF 轉換過程中準確渲染複雜的佈局、樣式和交互元素。

使用 IronPDF 進行 HTML 到 PDF 轉換需要什麼?

要使用 IronPDF,需要有效的許可證密鑰。開發者可以從官方網站獲取試用許可證以解鎖全部功能。

IronPDF 為何成為開發者的實際選擇?

IronPDF 因其可靠性、擴展性、易用性和強大的 HTML 到 PDF 轉換功能而實用。它非常適合高效和有效地生成專業級的 PDF。

使用 PuppeteerSharp 進行 PDF 生成有哪些限制?

PuppeteerSharp 需要下載和捆綁 Chromium 瀏覽器,這會增加文件大小並可能占用大量資源。它更專注於渲染而不是通過附加功能增強 PDF。

在 HTML 到 PDF 轉換方面,Pdfium.NET SDK 與 IronPDF 有何不同?

Pdfium.NET SDK 本身不支持 HTML 到 PDF 轉換,需要手動渲染 HTML 元素。相比之下,IronPDF 提供內置的方法進行直接轉換,簡化了過程。

PdfSharp 適合渲染複雜的 HTML 結構到 PDF 嗎?

PdfSharp 不支持原生的 HTML 到 PDF 轉換,可能在處理複雜的佈局、樣式或 JavaScript 時遇到困難,需要額外的庫進行 HTML 分析。

IronPDF 為 PDF 操作提供哪些功能?

IronPDF 提供創建、編輯和提取 PDF 內容的工具。它支持直接 HTML 到 PDF 轉換、文本/圖像提取以及在應用中嵌入 PDF 查看器。

IronPDF是否兼容.NET 10,並且在.NET 10專案中使用時有什麼優勢?

是的—IronPDF完全兼容.NET 10。它支持.NET 10專案而不需要特殊手段,並利用運行時改進如數組接口方法虛化的減少、增強性能和減少記憶體使用。

IronPDF帶來了哪些針對於.NET 10中的HTML到PDF轉換的新增強?

在.NET 10中,IronPDF提供了“零天”支持,最新版本帶來了與新運行時的完美兼容。開發者獲得了更快的啟動時間、更好的記憶體使用率以及由.NET 10渲染和JIT引擎改進帶來的渲染性能提升。

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