在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
随着技术的进步和互联网使用的增加,数据大多以数字形式收发,主要是 PDF 文件。
在C#中处理PDF文档对开发者来说最近一直是一个难题。在许多情况下,开发者需要在他们的应用程序中加入PDF查看和PDF生成的功能。 考虑到这一点,已经开发了许多库来便利这些及类似任务。
这篇文章将比较两个最受.NET和.NET Core开发者欢迎的PDF库。 这两个图书馆是
PDFium.NET SDK 库
IronPDF 和 PDFium.NET 可以在 .NET 应用程序中创建、操作和打印 PDF 文件。 出现的问题是:应该使用哪个库? 通过阅读本文,您可以自己做出决定。
首先,让我们看看这两个库各自提供了哪些功能,然后我们再进行比较。
PDFium.NET 用于创建、修改和查看 PDF 文件。(可移植文件格式). 它提供了一个高级C#/VB.NET API,用于在Web服务器上动态创建PDF,并在现有桌面或Web应用程序中实现保存为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的突出功能包括:
不使用Adobe Acrobat Reader打印PDF文件。
IronPDF库适用于几乎所有与C#兼容的操作系统和框架,包括以下内容:
Azure、AWS、Docker、Linux、Windows
文章的其余部分如下:
安装 IronPDF C# 库
PDFium.NET SDK 安装
创建 PDF 文档
从多个图像创建PDF
数字签名 PDF
定价和许可
下载和安装 IronPDF 库有不同的方法。 以下是最简单的方法:
使用 Visual Studio
开发人员命令提示符
直接下载 NuGet 软件包
在您的 Visual Studio 项目中,从 "工具 "菜单或在解决方案资源管理器中右键单击您的项目,然后选择 "管理 NuGet 包"。 这两个选项的截图如下所示。
打开 NuGet 软件包管理器后,浏览 IronPDF 软件包并安装,如下图所示。
IronPDF 也可以通过开发者命令提示符下载。 按照以下步骤进行:
Install-Package IronPdf
IronPDF 也可以直接下载,请访问NuGet IronPDF 软件包. 步骤如下
您还可以直接从 IronPDF 的软件包页面下载 IronPDF.DLL 文件.
在您的项目中通过以下步骤引用IronPDF库:
点击确定!
全部完成! IronPDF已下载并安装。 我们现在将开始安装 PDFium.NET SDK 库。
我们可以使用 NuGet 软件包管理器或下载 PDFium Windows 安装程序来安装 PDFium.NET。
搜索 PDFium.NET.SDK。 在您当前的项目中点击“安装”。
PM> Install-Package Pdfium.Net.SDK
IronPDF 提供多种生成 PDF 文件的方法。 让我们来看看两个重要的问题。
HTML files into PDFs.使用 IronPDF 的 URL 渲染功能将 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 文件。
生成PDF的代码使用PDFium.NET如下:
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天退款保证,以及一年的软件支持和升级服务。 最重要的是,这是一个永久许可证。(一次性购买). 提供 Lite 软件包。 IronPDF产品绝无任何循环费用。 有关可用许可证的更多详细信息,请访问IronPDF 许可证页面.
PDFium.NET 提供永久许可证。 您可以永久使用此支持的SDK版本及其注册密钥。 然而,该密钥只适用于取决于许可购买或续订日期的某些特定SDK版本。 您可以免费安装任何新版本的产品,前提是该版本是在您购买之日起一年内发布的。 PDFium.NET 还提供三种不同的许可证套餐:
单一开发者许可证旨在为单个开发者和为多个客户工作的自由职业者设计。
您可以访问PDFium.NET 购买页面了解完整的价格详情。
IronPDF 库是一个易于使用的库,用于创建 PDF 文档,不需要任何复杂的 API。内置的 chromium 引擎可通过 HTML、JS、CSS、JPG、PNG、GIF 和 SVG 等开放标准文档类型实现像素级完美的 HTML 到 PDF 转换。
PDFium.NET SDK 是一个 .NET 类库,旨在以合理的价格满足开发人员的大多数常见需求。有了 PDFium.NET SDK,您的应用程序就能轻松显示和处理 PDF 文档。 其特殊的页面对象编辑 API 使这个库特别强大。
PDFium.NET 许可证分为上述三个版本。 单个项目许可证为单个开发人员和最多三个开发人员提供便利,起价分别为 720 美元和 900 美元。 这款软件比 IronPDF 便宜一些,后者的 Lite 版本起价较低。
IronPdf 提供 Unlimited License,价格极具竞争力。相比之下,PDFium.NET 的组织许可证适用于无限数量的开发人员,但价格昂贵。相反,IronPDF 提供的专业 License 可供 10 名开发人员使用,价格约为 PDFium.NET 供 10 名开发人员使用的同等许可证的一半。
在上面的例子中,您已经看到 IronPDF 使用比 PDFium.NET 少得多的代码行来创建和修改 PDF 文档。 这有助于减轻开发人员的工作量,提高他们的工作效率。IronPDF 提供多种方法将几乎所有格式转换为 PDF。 相比之下,PDFium.NET 只提供了将图像和文本转换为 PDF 的几种方法。
You can now 的中文翻译是:"您现在可以"购买 Iron Software 的所有产品库仅需两个的价格。 此外,还需要免费试用测试功能。