如何免费为 PDF 添加密码保护
在 .NET 中处理 PDF 文档时,开发人员通常会比较各种库以确定哪一个最适合他们的项目需求。 .NET生态系统中的三个热门选择是PDFSharp,QuestPDF和IronPDF。 每个库适用于不同的用例,并具有各自的优缺点。 在本文中,我们将深入比较这些库及其如何利用这个URL处理基本PDF生成,以帮助您做出明智的决定。
什么是 PDFSharp?
PDFSharp是一个开源库,旨在创建、编辑和呈现PDF文档。 专注于简单性和核心PDF功能,PDFSharp一直是开发者寻找简单直观的PDF操作能力的可靠工具。
PDFSharp的关键功能
- PDF 创建和编辑:生成新的 PDF 或修改现有的 PDF。 *图形绘制:支持绘制形状、文本和图像。 *开源:采用 MIT 许可证,可免费使用和修改。
安装
通过使用NuGet包管理器,轻松将PDFSharp安装到您的项目中。 只需在 NuGet 包管理器控制台中运行以下行即可:
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'.");
}
}
}Imports System
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Imports PdfSharp.Pdf
Imports TheArtOfDev.HtmlRenderer.PdfSharp
Public Class Program
Public 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 HttpClient = 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 ClassImports System
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Imports PdfSharp.Pdf
Imports TheArtOfDev.HtmlRenderer.PdfSharp
Public Class Program
Public 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 HttpClient = 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输出 PDF 文件

如您所见,虽然PDFSharp可用于转换HTML内容和网页到PDF文件,但它需要额外库的支持,且无法保留原始网页上的CSS和格式。虽然是一个很棒的免费PDF开发者库,但它确实缺乏一些付费库如IronPDF的更高级功能。
什么是 QuestPDF?
QuestPDF 是一个现代的开源库,专注于使用流畅 API 生成视觉上吸引人的 PDF。 它在文档布局和渲染方面的创新方法使其成为需要动态和复杂设计的应用程序的强大竞争者。
QuestPDF 的主要功能
- Fluent API:提供声明式方法来定义文档布局。 *现代布局系统:受 CSS 启发,支持网格、组件和灵活的布局结构。 *高性能:针对快速渲染大型复杂文档进行了优化。
安装
由于该库可以作为 NuGet 包安装,安装过程非常简单,只需在 NuGet 控制台中运行一行即可:
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
Public 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 HttpClient = New HttpClient()
Dim htmlContent As String = Await client.GetStringAsync(url)
' Parse the HTML content using HtmlAgilityPack
Dim htmlDoc As HtmlDocument = New HtmlDocument()
htmlDoc.LoadHtml(htmlContent)
' Extract meaningful content (e.g., text inside <body>)
Dim bodyContent As String = 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 ClassImports System
Imports System.Net.Http
Imports System.Threading.Tasks
Imports HtmlAgilityPack
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Public Class Program
Public 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 HttpClient = New HttpClient()
Dim htmlContent As String = Await client.GetStringAsync(url)
' Parse the HTML content using HtmlAgilityPack
Dim htmlDoc As HtmlDocument = New HtmlDocument()
htmlDoc.LoadHtml(htmlContent)
' Extract meaningful content (e.g., text inside <body>)
Dim bodyContent As String = 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输出 PDF 文件

像 PDFSharp 一样,虽然可以使用外部库(如 HtmlAgilityPack)将 HTML 内容转换为 PDF ,但它无法保持任何 CSS 样式和格式。 虽然 QuestPDF 是任何想要从头开始创建 PDF 文档的人的绝佳选择,但 HTML 到 PDF 转换不是该库的强项。
IronPDF:一个强大的 PDF 库
IronPDF 是一个坚固的 PDF 库,专为需要先进和全面 PDF 功能的 .NET 开发人员设计。 其专注于 HTML 到 PDF 渲染,结合用于操作 PDF 文档、加密和 PDF/A 合规性等高级功能,使其成为企业级应用程序的强大选择。
IronPDF 的主要功能
- HTML 转 PDF:轻松将整个网页或HTML 字符串渲染为 PDF。
- PDF/A 合规性:生成符合长期存档标准的文档。 *高级安全:支持加密、密码保护和数字签名。 *编辑 PDF:修改、合并和拆分现有 PDF 文件。 *跨平台:完全兼容 .NET Framework、.NET Core 和 .NET 5+。
安装
要安装 IronPDF,请使用 Visual Studio 中的 NuGet 包管理器:
使用 NuGet 包管理器:
1.在 Visual Studio 中打开您的项目。 2. 在解决方案资源管理器中右键单击项目并选择"管理NuGet包"。 3. 搜索 "IronPDF" 并点击 "安装"。

使用 NuGet 包管理器控制台:
示例:使用 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 ClassImports 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输出 PDF 文件

上面的代码示例演示了 IronPDF 如何仅用几行代码轻松地将 URL 内容转换为 PDF。 如您所见,它不仅转换了 HTML,还转换了 CSS 样式和布局,确保输出的 PDF 保持原始格式。 通过使用 ChromePdfRenderer 渲染引擎,IronPDF 生成像素完美的 PDF 文档,在转换过程中不会丢失内容的原始质量。
如这里所示,IronPDF 是 HTML 到 PDF 转换的强大选择,同时也可以将其他文档类型转换为 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 转换、OCR 和高级安全选项。 虽然它需要商业许可证,但其功能使其成为企业和专业应用程序的首选。
结论
为您的 .NET 项目选择合适的 PDF 库取决于您的具体需求。 如果您需要一个轻量级的、开源的基本PDF任务工具,PDFSharp是一个不错的选择。 如果要创建动态和视觉上吸引人的文档,QuestPDF 以其现代方法脱颖而出。
但是,如果您需要高级功能、无缝 HTML 到 PDF 转换和企业级能力,请查看 IronPDF 所提供的服务。
通过了解每个库的优势和局限性,您可以做出与项目需求一致的明智决策。
Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。
相关文章
