在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
随着技术的进步和互联网使用率的提高,数据大多以数字形式收发,主要是 PDF 文件。
最近,开发人员在 C# 中处理 PDF 文档时遇到了困难。在许多情况下,开发人员需要在其应用程序中集成 PDF 查看和 PDF 生成功能。考虑到这一点,人们开发了许多库来促进这些任务和类似任务的完成。
本文将对 .NET 和 .NET Core 开发人员最常用的两个 PDF 库进行比较。这两个库是
IronPDF 和 PDFium.NET 可以在 .NET 应用程序中创建、处理和打印 PDF。由此产生的问题是:应该使用哪个库?通过阅读本文,您将有自己的答案。
首先,让我们来看看这两个图书馆都提供了哪些功能,然后再进行比较。
PDFium.NET 用于创建、修改和查看 PDF 文件 (可移植文件格式).它提供了一个高级 C#/VB.NET API,用于在网络服务器上动态创建 PDF,并在现有的桌面或网络应用程序中实现 另存为 PDF 功能。
PDFium.NET 的突出特点包括
IronPDF .NET PDF 库是为开发人员,尤其是 C# 开发人员量身定制的。 有了这个神奇的 PDF 库,您可以轻松地在您的 .NET 项目中加入 PDF 查看功能。
IronPDF 内置的 Chromium 引擎可以轻松地将 HTML 转换为 PDF。它不需要任何复杂的低级 API 来处理 PDF 文件。它可以处理 HTML 源文件,如 HTML 文档、JavaScript 文件和 ASPX 网页。
IronPDF 还可以自定义 PDF 文件的页眉、页脚、水印等。它还能让开发人员轻松读取 PDF 文本和提取图形。
IronPDF for .NET 的突出功能包括
IronPDF 库适用于几乎所有与 C# 兼容的操作系统和框架,包括以下系统:
文章其余部分如下:
1.安装 IronPDF C# 库
2.PDFium.NET SDK 安装
3.创建 PDF 文档
4.从多个图像创建 PDF
5.对 PDF 进行数字签名
6.定价和许可
7.结论
下载和安装 IronPDF 库有多种方法。最简单的方法如下:
1.使用 Visual Studio
2.开发人员命令提示符
3.直接下载 NuGet 软件包
4.下载 IronPDF.DLL 库
在 Visual Studio 项目中,从 "工具 "菜单或在解决方案资源管理器中右键单击项目,然后选择 "管理 NuGet 包"。这两个选项的截图如下所示。
打开 NuGet 软件包管理器后,浏览 IronPDF 软件包并安装,如下图所示。
还可以通过开发人员命令提示符下载 IronPDF。请按照以下步骤操作:
Install-Package IronPdf
也可以访问 NuGet 网站直接下载 IronPDF。具体步骤如下
您还可以 直接下载 IronPDF.DLL 文件 来自网站。
通过以下步骤在项目中引用 IronPDF 库:
全部完成! IronPDF 已下载并安装。现在我们将安装 PDFium.NET SDK 库。
我们可以使用 NuGet 软件包管理器或下载 PDFium Windows 安装程序来安装 PDFium.net。
PM> Install-Package Pdfium.Net.SDK
IronPDF 提供多种生成 PDF 文件的方法。让我们来看看其中两种重要的方法。
IronPDF 使转换变得非常简单 HTML 转 PDF 文件使用现有的 URL。
请看以下源代码。
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.pdf")
以下代码片段展示了如何使用 HTML 字符串渲染 PDF 页面。您可以使用简单的 HTML,也可以将其与 CSS、图像和 JavaScript 结合使用。
var Renderer = new IronPDF.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external html assets: images, css and javascript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo_square.png'>", @"e:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new IronPDF.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external html assets: images, css and javascript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo_square.png'>", @"e:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New IronPDF.ChromePdfRenderer()
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
PDF.SaveAs("pixel-perfect.pdf")
' Load external html assets: images, css and javascript.
' An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo_square.png'>", "e:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
输出结果如下
它可以使用图像和文本对象即时生成 PDF。不过,它无法将 URL 或 HTML 字符串转换为 PDF 文件。
使用 PDFium.NET 生成 PDF 文件的代码如下:
public void CreatePDF()
{
// Step 1: Initialize PDF library and create empty document
// Return value: PdfDocument main class
PdfCommon.Initialize();
var doc = PdfDocument.CreateNew(); // Create a PDF document
// Step 2: Add new page
// Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
// The PDF unit of measure is point. There are 72 points in one inch.
var page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27f * 72, 11.69f * 72);
// Step 3: Add graphics and text contents to the page
// Insert image from file using standard System.Drawing.Bitmap class
using (PdfBitmap logo = PdfBitmap.FromFile(@"e:\site\assets\logo_square.png"))
{
PdfImageObject imageObject = PdfImageObject.Create(doc, logo, 0, 0);
//image resolution is 300 DPI and location is 1.69 x 10.0 inches.
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
page.PageObjects.Add(imageObject);
}
// Create fonts used for text objects
PdfFont calibryBold = PdfFont.CreateFont(doc, "CalibriBold");
// Insert text objects at 7.69"; 11.02" and font size is 25
PdfTextObject textObject = PdfTextObject.Create("Sample text", 7.69f * 72, 11.02f * 72, calibryBold, 25);
textObject.FillColor = FS_COLOR.Black;
page.PageObjects.Add(textObject);
// Step 5: Generate page content and save PDF file
// argument: PDF file name
page.GenerateContent();
doc.Save(@"e:\site\sample_document.pdf", SaveFlags.NoIncremental);
}
public void CreatePDF()
{
// Step 1: Initialize PDF library and create empty document
// Return value: PdfDocument main class
PdfCommon.Initialize();
var doc = PdfDocument.CreateNew(); // Create a PDF document
// Step 2: Add new page
// Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
// The PDF unit of measure is point. There are 72 points in one inch.
var page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27f * 72, 11.69f * 72);
// Step 3: Add graphics and text contents to the page
// Insert image from file using standard System.Drawing.Bitmap class
using (PdfBitmap logo = PdfBitmap.FromFile(@"e:\site\assets\logo_square.png"))
{
PdfImageObject imageObject = PdfImageObject.Create(doc, logo, 0, 0);
//image resolution is 300 DPI and location is 1.69 x 10.0 inches.
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
page.PageObjects.Add(imageObject);
}
// Create fonts used for text objects
PdfFont calibryBold = PdfFont.CreateFont(doc, "CalibriBold");
// Insert text objects at 7.69"; 11.02" and font size is 25
PdfTextObject textObject = PdfTextObject.Create("Sample text", 7.69f * 72, 11.02f * 72, calibryBold, 25);
textObject.FillColor = FS_COLOR.Black;
page.PageObjects.Add(textObject);
// Step 5: Generate page content and save PDF file
// argument: PDF file name
page.GenerateContent();
doc.Save(@"e:\site\sample_document.pdf", SaveFlags.NoIncremental);
}
Public Sub CreatePDF()
' Step 1: Initialize PDF library and create empty document
' Return value: PdfDocument main class
PdfCommon.Initialize()
Dim doc = PdfDocument.CreateNew() ' Create a PDF document
' Step 2: Add new page
' Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
' The PDF unit of measure is point. There are 72 points in one inch.
Dim page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27F * 72, 11.69F * 72)
' Step 3: Add graphics and text contents to the page
' Insert image from file using standard System.Drawing.Bitmap class
Using logo As PdfBitmap = PdfBitmap.FromFile("e:\site\assets\logo_square.png")
Dim imageObject As PdfImageObject = PdfImageObject.Create(doc, logo, 0, 0)
'image resolution is 300 DPI and location is 1.69 x 10.0 inches.
imageObject.Matrix = New FS_MATRIX(logo.Width * 72 \ 300, 0, 0, logo.Height * 72 \ 300, 1.69 * 72, 10.0 * 72)
page.PageObjects.Add(imageObject)
End Using
' Create fonts used for text objects
Dim calibryBold As PdfFont = PdfFont.CreateFont(doc, "CalibriBold")
' Insert text objects at 7.69"; 11.02" and font size is 25
Dim textObject As PdfTextObject = PdfTextObject.Create("Sample text", 7.69F * 72, 11.02F * 72, calibryBold, 25)
textObject.FillColor = FS_COLOR.Black
page.PageObjects.Add(textObject)
' Step 5: Generate page content and save PDF file
' argument: PDF file name
page.GenerateContent()
doc.Save("e:\site\sample_document.pdf", SaveFlags.NoIncremental)
End Sub
输出结果如下
如果比较 IronPDF 和 PDFium 项目的输出结果,我们可以清楚地看到,基于 IronPDF 类库的输出结果使用 HTML 渲染效果更好,甚至无需缩放图像大小。另一方面,PDFium.NET 的输出结果与 IronPDF 相似,但只缩放了图像。如果我们跳过代码中的这一行
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
imageObject.Matrix = New FS_MATRIX(logo.Width * 72 \ 300, 0, 0, logo.Height * 72 \ 300, 1.69 * 72, 10.0 * 72)
输出结果将是
在 IronPDF 中,合并两个或多个 PDF 非常简单。使用合并方法,您可以合并两个或多个 PDF 文件,其中每个文件都用逗号分隔。代码如下
using IronPdf;
var html_a = @"<p> [PDF_A] </p>
<p> [PDF_A] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_A] 2nd Page</p>";
var html_b = @"<p> [PDF_B] </p>
<p> [PDF_B] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_B] 2nd Page</p>";
var Renderer = new IronPDF.ChromePdfRenderer();
var pdfdoc_a = Renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = Renderer.RenderHtmlAsPdf(html_b);
var merged = IronPDF.PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs("Merged.PDF");
using IronPdf;
var html_a = @"<p> [PDF_A] </p>
<p> [PDF_A] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_A] 2nd Page</p>";
var html_b = @"<p> [PDF_B] </p>
<p> [PDF_B] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_B] 2nd Page</p>";
var Renderer = new IronPDF.ChromePdfRenderer();
var pdfdoc_a = Renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = Renderer.RenderHtmlAsPdf(html_b);
var merged = IronPDF.PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs("Merged.PDF");
Imports IronPdf
Private html_a = "<p> [PDF_A] </p>
<p> [PDF_A] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_A] 2nd Page</p>"
Private html_b = "<p> [PDF_B] </p>
<p> [PDF_B] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_B] 2nd Page</p>"
Private Renderer = New IronPDF.ChromePdfRenderer()
Private pdfdoc_a = Renderer.RenderHtmlAsPdf(html_a)
Private pdfdoc_b = Renderer.RenderHtmlAsPdf(html_b)
Private merged = IronPDF.PdfDocument.Merge(pdfdoc_a, pdfdoc_b)
merged.SaveAs("Merged.PDF")
使用 PDFium.NET,您不仅可以将多个 PDF 文件合并为一个文件,还可以从源文件中选择某些特定页面,并将它们合并为一个 PDF 文档。
下面的代码展示了如何使用 "ImportPages "方法实现这一功能。
public void MergePDF()
{
//Initialize the SDK library.
PdfCommon.Initialize();
//Open and load a PDF document in which other files will be merged
using (var mainDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read source PDF File #1
{
//Open one PDF document.
using (var doc = PdfDocument.Load(@"c:\doc1.pdf")) //Read PDF File #2
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
//Open another PDF document.
using (var doc = PdfDocument.Load(@"c:\doc2.pdf"))
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
mainDoc.Save(@"c:\ResultDocument.pdf", SaveFlags.NoIncremental);
}
}
public void MergePDF()
{
//Initialize the SDK library.
PdfCommon.Initialize();
//Open and load a PDF document in which other files will be merged
using (var mainDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read source PDF File #1
{
//Open one PDF document.
using (var doc = PdfDocument.Load(@"c:\doc1.pdf")) //Read PDF File #2
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
//Open another PDF document.
using (var doc = PdfDocument.Load(@"c:\doc2.pdf"))
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
mainDoc.Save(@"c:\ResultDocument.pdf", SaveFlags.NoIncremental);
}
}
Public Sub MergePDF()
'Initialize the SDK library.
PdfCommon.Initialize()
'Open and load a PDF document in which other files will be merged
Using mainDoc = PdfDocument.Load("c:\test001.pdf") ' C# Read source PDF File #1
'Open one PDF document.
Using doc = PdfDocument.Load("c:\doc1.pdf") 'Read PDF File #2
'Import all pages from document
mainDoc.Pages.ImportPages(doc, String.Format("1-{0}", doc.Pages.Count), mainDoc.Pages.Count)
End Using
'Open another PDF document.
Using doc = PdfDocument.Load("c:\doc2.pdf")
'Import all pages from document
mainDoc.Pages.ImportPages(doc, String.Format("1-{0}", doc.Pages.Count), mainDoc.Pages.Count)
End Using
mainDoc.Save("c:\ResultDocument.pdf", SaveFlags.NoIncremental)
End Using
End Sub
如今最重要的功能之一就是对 PDF 文档进行数字签名。IronPDF 提供了这一功能。代码如下
using IronPdf;
// Cryptographically sign an existing PDF in 1 line of code!
new IronPDF.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");
/***** Advanced example for more control *****/
// Step 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPDF("<h1>Testing 2048 bit digital security</h1>");
// Step 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
var signature = new IronPDF.Signing.PdfSignature("Iron.pfx", "123456");
// Step 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");
//Step 4. Sign the PDF with the PDFSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);
//Step 4. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
using IronPdf;
// Cryptographically sign an existing PDF in 1 line of code!
new IronPDF.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");
/***** Advanced example for more control *****/
// Step 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPDF("<h1>Testing 2048 bit digital security</h1>");
// Step 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
var signature = new IronPDF.Signing.PdfSignature("Iron.pfx", "123456");
// Step 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");
//Step 4. Sign the PDF with the PDFSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);
//Step 4. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
Imports IronPdf
' Cryptographically sign an existing PDF in 1 line of code!
Call (New IronPDF.Signing.PdfSignature("Iron.p12", "123456")).SignPdfFile("any.pdf")
'''*** Advanced example for more control ****
' Step 1. Create a PDF
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim doc = Renderer.RenderHtmlAsPDF("<h1>Testing 2048 bit digital security</h1>")
' Step 2. Create a Signature.
' You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
Dim signature = New IronPDF.Signing.PdfSignature("Iron.pfx", "123456")
' Step 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png")
'Step 4. Sign the PDF with the PDFSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature)
'Step 4. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf")
PDFium.NET 缺乏对 PDF 文档进行数字签名的功能。
IronPDF 可免费用于开发简单的应用程序,也可随时授权用于商业用途。它提供单个项目许可证、单个开发人员许可证、机构和跨国组织许可证。它还提供 SaaS 和 OEM 再分发许可证和支持。
所有 IronPDF 许可证均提供 30 天退款保证,以及一年的软件支持和升级服务。最重要的是,它是永久许可证 (一次性购买).精简版软件包的价格为 $749。IronPDF 产品绝对没有经常性费用。有关可用许可证的更多详细信息,请访问 IronPDF 许可 page.
PDFium.NET 提供永久许可证。您可以使用注册密钥永久使用该支持的 SDK 版本。不过,该密钥仅适用于某些特定的 SDK 版本,这些版本取决于购买或续订许可证的日期。您可以免费安装任何新的产品版本,只要它是在您购买**之前或一年之内发布的。PDFium.NET 还提供 3 种不同的许可证包:
您可以访问 页码 了解完整的价格详情。
IronPDF 库是一个易于使用的库,无需任何复杂的 API 即可创建 PDF 文档。内置的 chromium 引擎可将 HTML 转换为像素完美的 PDF,并可使用 HTML、JS、CSS、JPG、PNG、GIF 和 SVG 等开放标准文档类型。
PDFium.NET SDK 是一个.NET 类库,旨在以合理的价格满足开发人员的大部分常见需求。有了 PDFium.NET SDK,您的应用程序就能轻松显示和处理 PDF 文档。其特殊的页面对象编辑 API 使该库特别强大。
如上所述,PDFium.NET 许可证有三种版本。单个项目许可证为单个开发人员和最多三个开发人员提供便利,起价分别为 720 美元和 900 美元。这比 IronPDF 便宜一些,后者的精简版起价为 $749。
IronPDF 提供无限制许可证,价格仅为 2999 美元。相比之下,PDFium.NET 为无限数量的开发人员提供组织许可证,价格为 4320 美元。相反,IronPDF 提供的专业许可证起价为 1499 美元,可供 10 名开发人员使用。该许可证约为 PDFium.NET 供 10 名开发人员使用的许可证(2880 美元)的一半。
在上述示例中,您可以看到 IronPDF 与 PDFium.NET 相比,创建和修改 PDF 文档所需的代码行数要少得多。这有助于减轻开发人员的工作量,提高他们的工作效率。IronPDF 提供多种方法将几乎所有格式转换为 PDF。相比之下,PDFium.NET 只提供了几种方法,如图像和文本到 PDF。
您现在可以 购买 Iron Software 的所有产品库 只需两个的价格。此外,还有一个 免费试用 来测试功能。