跳過到頁腳內容
產品比較

PDFsharp vs QuestPDF(C# PDF庫深入比較)

在.NET中處理PDF文件時,開發人員經常需要比較各種庫以確定哪一個最適合其項目需求。 Three popular choices in the .NET ecosystem are PDFsharp, QuestPDF, and IronPDF. 每個庫滿足不同的使用案例,並提供獨特的優勢和劣勢。 在本文中,我們將詳細比較這些庫以及如何使用此URL處理基本的PDF生成,以幫助您做出明智的決定。

什麼是PDFsharp?

PDFsharp是一個開源庫,旨在創建、編輯和渲染PDF文件。 PDFsharp專注於簡單性和核心PDF功能,是尋求簡單PDF操作功能的開發人員的可靠工具。

PDFsharp的主要功能

  • PDF創建和編輯:生成新PDF或修改現有PDF。
  • 圖形繪製:支持繪製形狀、文本和圖像。
  • 開源:採用MIT許可,免費使用和修改。

安裝

透過使用NuGet包管理器,可以輕鬆將PDFsharp安裝到您的項目中。 只需在NuGet包管理器控制台中運行以下行:

Install-Package PDFsharp

PDFsharp代碼示例

現在,讓我們看看PDFsharp如何從給定的URL創建一個新的PDF文件。 由於PDFsharp本身不能處理HTML或URL到PDF的轉換,我們需要集成一個網頁渲染引擎,例如HtmlRenderer.PdfSharp。此外,我們將使用HttpClient從給定的URL檢索HTML內容。

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using PdfSharp.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;

public class Program
{
    static async Task Main(string[] args)
    {
        // Ensure proper encoding support
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        string url = "https://www.apple.com";

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

            // Generate PDF from the fetched HTML content
            var pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4);
            pdf.Save("output.pdf");

            Console.WriteLine("PDF created successfully as 'output.pdf'.");
        }
    }
}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using PdfSharp.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;

public class Program
{
    static async Task Main(string[] args)
    {
        // Ensure proper encoding support
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        string url = "https://www.apple.com";

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

            // Generate PDF from the fetched HTML content
            var pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4);
            pdf.Save("output.pdf");

            Console.WriteLine("PDF created successfully as 'output.pdf'.");
        }
    }
}
Imports System
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Imports PdfSharp.Pdf
Imports TheArtOfDev.HtmlRenderer.PdfSharp

Public Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' Ensure proper encoding support
		Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)

		Dim url As String = "https://www.apple.com"

		' Fetch HTML content from the URL
		Using client As New HttpClient()
			Dim htmlContent As String = Await client.GetStringAsync(url)

			' Generate PDF from the fetched HTML content
			Dim pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4)
			pdf.Save("output.pdf")

			Console.WriteLine("PDF created successfully as 'output.pdf'.")
		End Using
	End Function
End Class
$vbLabelText   $csharpLabel

輸出PDF文件

PDFsharp示例輸出

如您所見,雖然PDFsharp可以用來將HTML內容和網頁轉換成PDF文件,但它需要額外的庫幫助,且無法保留原網站的任何CSS和格式。雖然是一個很棒的免費PDF開發者庫,但它缺乏IronPDF等付費庫中看到的一些更高級的功能。

什麼是QuestPDF?

QuestPDF是一個現代的開源庫,專注於使用流暢的API生成視覺上吸引人的PDF。 其對文檔布局和渲染的創新方法使其成為需要動態和複雜設計的應用程序的強有力競爭者。

QuestPDF的主要功能

  • 流暢的API:提供聲明式方法來定義文檔布局。
  • 現代布局系統:受CSS啟發,支持網格、組件和靈活的布局結構。
  • 高性能:優化以快速渲染大型和複雜的文檔。

安裝

由於這個庫可以作為NuGet包安裝,安裝過程非常簡單,只需要在NuGet控制台中運行一行代碼:

Install-Package QuestPDF

QuestPDF代碼示例

現在是時候來看看QuestPDF如何將我們的示例URL轉換為PDF格式了。 雖然QuestPDF不原生支持URL到PDF的轉換,但您可以使用HTTP客戶端提取HTML內容並使用QuestPDF的流暢API渲染為PDF。

using System;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

public class Program
{
    static async Task Main(string[] args)
    {
        // Configure QuestPDF to use the community license
        QuestPDF.Settings.License = LicenseType.Community;

        string url = "https://www.apple.com";

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

            // Parse the HTML content using HtmlAgilityPack
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(htmlContent);

            // Extract meaningful content (e.g., text inside <body>)
            var bodyContent = htmlDoc.DocumentNode.SelectSingleNode("//body")?.InnerText ?? "No content found";

            // Generate PDF using QuestPDF
            Document.Create(container =>
            {
                container.Page(page =>
                {
                    page.Size(PageSizes.A4);
                    page.Margin(20);
                    page.Content().Text(bodyContent);
                });
            }).GeneratePdf("output.pdf");

            Console.WriteLine("PDF created successfully as 'output.pdf'.");
        }
    }
}
using System;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

public class Program
{
    static async Task Main(string[] args)
    {
        // Configure QuestPDF to use the community license
        QuestPDF.Settings.License = LicenseType.Community;

        string url = "https://www.apple.com";

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

            // Parse the HTML content using HtmlAgilityPack
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(htmlContent);

            // Extract meaningful content (e.g., text inside <body>)
            var bodyContent = htmlDoc.DocumentNode.SelectSingleNode("//body")?.InnerText ?? "No content found";

            // Generate PDF using QuestPDF
            Document.Create(container =>
            {
                container.Page(page =>
                {
                    page.Size(PageSizes.A4);
                    page.Margin(20);
                    page.Content().Text(bodyContent);
                });
            }).GeneratePdf("output.pdf");

            Console.WriteLine("PDF created successfully as 'output.pdf'.");
        }
    }
}
Imports System
Imports System.Net.Http
Imports System.Threading.Tasks
Imports HtmlAgilityPack
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure

Public Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' Configure QuestPDF to use the community license
		QuestPDF.Settings.License = LicenseType.Community

		Dim url As String = "https://www.apple.com"

		' Fetch HTML content from the URL
		Using client As New HttpClient()
			Dim htmlContent As String = Await client.GetStringAsync(url)

			' Parse the HTML content using HtmlAgilityPack
			Dim htmlDoc = New HtmlDocument()
			htmlDoc.LoadHtml(htmlContent)

			' Extract meaningful content (e.g., text inside <body>)
			Dim bodyContent = If(htmlDoc.DocumentNode.SelectSingleNode("//body")?.InnerText, "No content found")

			' Generate PDF using QuestPDF
			Document.Create(Sub(container)
				container.Page(Sub(page)
					page.Size(PageSizes.A4)
					page.Margin(20)
					page.Content().Text(bodyContent)
				End Sub)
			End Sub).GeneratePdf("output.pdf")

			Console.WriteLine("PDF created successfully as 'output.pdf'.")
		End Using
	End Function
End Class
$vbLabelText   $csharpLabel

輸出PDF文件

QuestPDF示例輸出

與PDFSharp類似,當使用外部庫如HtmlAgilityPack時,QuestPDF可以用來轉換HTML內容為PDF,但無法保留任何CSS樣式和格式。 QuestPDF是任何人想從頭創建PDF文件的一個不錯的選擇,但這個庫卻不擅長HTML轉PDF的轉換。

IronPDF:強大的PDF庫

IronPDF是一個為需要高級和全面的PDF功能的.NET開發人員設計的強大PDF庫。 它專注於HTML到PDF的渲染,並結合了額外的功能,如高級PDF文檔操作、加密和PDF/A合規,使之成為企業級應用程序的強有力選擇。

IronPDF的核心特性

  • HTML到PDF:輕鬆將整個網頁或HTML字符串渲染為PDF。
  • PDF/A合規:生成符合長期歸檔標準的文件。
  • Advanced Security: Supports encryption, password protection, and digital signatures.
  • 編輯PDF:修改、合併和拆分現有的PDF文件。
  • 跨平台:完全兼容.NET Framework、.NET Core和.NET 5+。

安裝

要安裝IronPDF,請在Visual Studio中使用NuGet包管理器:

使用NuGet包管理器

  1. 在 Visual Studio 中打開項目。
  2. 在解决方案资源管理器中右键单击项目并选择“管理 NuGet 包”。
  3. 搜索"IronPDF"並點擊"安裝"。

IronPDF安裝視覺

使用NuGet包管理器控制台:

Install-Package IronPdf

示例:使用IronPDF將URL轉換為PDF

IronPDF提供了一個簡單直接的API來將URL轉換為PDF。 以下是示例:

using IronPdf;

public class PdfConverter
{
    public static void Main(string[] args)
    {
        // Create a renderer with IronPdf
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        // Render the URL as a PDF
        PdfDocument pdf = renderer.RenderUrlAsPdf("https://www.apple.com");

        // Save the PDF
        pdf.SaveAs("url.pdf");
    }
}
using IronPdf;

public class PdfConverter
{
    public static void Main(string[] args)
    {
        // Create a renderer with IronPdf
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        // Render the URL as a PDF
        PdfDocument pdf = renderer.RenderUrlAsPdf("https://www.apple.com");

        // Save the PDF
        pdf.SaveAs("url.pdf");
    }
}
Imports IronPdf

Public Class PdfConverter
	Public Shared Sub Main(ByVal args() As String)
		' Create a renderer with IronPdf
		Dim renderer As New ChromePdfRenderer()

		' Render the URL as a PDF
		Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://www.apple.com")

		' Save the PDF
		pdf.SaveAs("url.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

輸出PDF文件

IronPDF示例輸出

上述代碼示例演示了IronPDF如何輕鬆將URL內容轉換為PDF,只需幾行代碼即可。 如您所見,它不僅轉換了HTML,還轉換了CSS樣式和布局,確保輸出的PDF保持原始格式。 通過使用ChromePdfRenderer渲染引擎,IronPDF生成了像素完美的PDF文件,轉換過程中不會丟失內容的原始質量。

正如這裡所見,IronPDF是HTML到PDF轉換的強有力選擇,也適用於其他文檔類型的轉換。 它能夠以簡潔、易於實現的代碼塊處理高質量的轉換工作。

詳細分析

易用性

PDFsharp簡單且易於使用,是初學者或具有基本PDF需求的開發人員的絕佳選擇。 其程序化的方法允許快速設置和實現任務,如向PDF中添加文本、形狀或圖像。 然而,它需要外部庫來處理HTML和URL到PDF的轉換任務。

另一方面,QuestPDF以其流暢的API提供了更現代的方法。 具有網絡或UI設計經驗的開發人員會發現這很直觀,但對於新手來說,他們可能需要適應以布局為中心的設計理念,面臨一些學習曲線。 同樣,它缺乏內建的HTML到PDF的轉換工具。

IronPDF提供了HTML到PDF轉換和高級PDF功能的最簡單體驗。 其直觀的API減少了實施時間,並提供了豐富的文檔和示例。 IronPDF可以處理多種不同文檔類型到PDF的轉換,例如我們在本文中看到的URL到PDF範例,且不會損失任何文件質量。

性能

性能是一個關鍵因素,特別是對於需要動態生成PDF的應用程序。 PDFsharp適合於小型和簡單的文檔,但在處理大型或複雜的布局時表現不佳。

QuestPDF在渲染動態和視覺上吸引人的文檔方面表現出色。 它針對處理結構化布局進行了高度效率的優化。

IronPDF在性能和功能方面表現得非常出色,特別是對於需要HTML渲染、CSS和JavaScript支持的應用程序。 它同樣能夠輕鬆處理企業級PDF任務。

比較摘要

  • PDFsharp是一個輕量級且開源的庫,最適合用於基本的PDF創建和編輯任務。 它是小型項目的理想選擇,但不支持現代布局和高級功能。
  • QuestPDF在使用流暢API生成動態、複雜且視覺上吸引人的PDF方面表現出色。 然而,它專注於PDF生成,不支持編輯現有文件。
  • IronPDF提供了最全面的功能集,包括內建的HTML到PDF轉換、光學字符識別和高級安全選項。 雖然它需要商業授權,但其功能使其成為企業和專業應用程序的首選。

結論

為您的.NET項目選擇合適的PDF庫取決於您的具體需求。 如果您需要一個輕量級且開源的工具來處理基本的PDF任務,PDFsharp是一個可靠的選擇。 如果您想創建動態、視覺上吸引人的文檔,QuestPDF憑借其現代方法脫穎而出。

然而,如果您需要高級功能、無縫的HTML到PDF轉換和企業級能力,請查看IronPDF能夠提供的功能。

通過了解每個庫的優勢和局限性,您可以做出與您的項目需求一致的明智決策。

請注意PDFsharp和QuestPDF是各自所有者的註冊商標。 本網站不附屬於、被PDFsharp或QuestPDF認可或贊助。 所有產品名稱、徽標和品牌均為其各自所有者的財產。 比較僅供信息參考,並反映撰寫時公開可用的信息。

常見問題解答

PDFsharp、QuestPDF 和 IronPDF 之間的差異是什麼?

PDFsharp 以其簡潔和基本 PDF 功能而聞名,適合基本任務。QuestPDF 提供現代化的 API 以製作視覺上吸引人的文檔,但缺乏原生的 HTML 轉換功能。IronPDF 在 HTML 到 PDF 渲染和高級操作中表現出色,非常適合企業級應用。

如何在 .NET 中渲染 HTML 到 PDF?

你可以使用 IronPDF 在 .NET 中渲染 HTML 到 PDF。它支持完整的 CSS 和 JavaScript,允許高質量的文檔轉換。

為什麼我可能會選擇 QuestPDF 用於我的項目?

QuestPDF 非常適合需要動態和視覺複雜 PDF 文檔的項目。它的流暢 API 允許靈活的佈局,儘管缺乏原生的 HTML 到 PDF 轉換支持。

使用 PDFsharp 的限制是什麼?

PDFsharp 的限制在於它不具備原生的 HTML 到 PDF 轉換支持。它最適合用於基本的 PDF 創建和編輯任務。

IronPDF 如何支持先進的 PDF 操作?

IronPDF 提供諸如 PDF 編輯、加密和支持 PDF/A 合規性等高級功能。它旨在滿足企業級應用對強大的 PDF 處理需求。

我可以使用 PDFsharp 創建視覺上吸引人的 PDF 嗎?

雖然 PDFsharp 提供基本的 PDF 創建和編輯功能,但缺乏 QuestPDF 和 IronPDF 所具備的高級佈局和設計能力,這兩者更適合視覺上複雜的文檔。

這些 PDF 庫的安裝步驟是什麼?

這三個庫都可以通過 Visual Studio 中的 NuGet 包管理器安裝。在 NuGet 包管理器控制台中使用命令 Install-Package [LibraryName],將 [LibraryName] 替換為 PDFsharp、QuestPDF 或 IronPDF。

使用 IronPDF 需要支付費用嗎?

是的,IronPDF 需要商業許可證才能部署,提供適合企業級應用的全面支持和高級功能。

Curtis Chau
技術作家

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

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