在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
PDF 是 "便携式文档格式 "的缩写,是 Adobe 公司开发的一种文件格式。PDF 对于呈现需要格式化其中包含的文本和图像的文件非常有用。PDF 文件在现代社会中发挥着重要作用,被用于各类商业部门,如开具发票和生成文档。如今,有了市场上的 PDF 库,PDF 生成几乎变得直观。在决定为您的项目使用 PDF 库时,重要的是要考虑每个 PDF 库的功能和优势,以便能够选择最适合您的 PDF 库。
在本文中,我们将比较两个最流行的 .NET PDF 库,它们是
IronPDF 和 iText PDF 库都用于在 Microsoft .NET 应用程序或项目中创建、读取和修改 PDF 文件。为了确定哪个库最适合您的应用程序,我们将先比较这两个库的功能,然后再比较转换和处理 PDF 的性能成本。这两个库都受 Microsoft .NET Frameworks 的支持。我们还将记录每个库的持续时间,以便进行分析。
IronPDF 是一款功能强大的 PDF .NET 库,开发人员可使用它轻松创建、阅读和修改 PDF。在内部,IronPDF 使用 chromium 引擎,并包含许多有用且强大的功能,如将 HTML5、JavaScript、CSS 和图像文件转换为 PDF,添加自定义页眉和页脚,以及完全按照浏览器中的显示方式渲染 PDF。IronPDF 支持各种网页和网络格式,如 HTML、ASPX、Razor View 和 MVC。IronPDF 的主要功能包括
iText PDF 是一个开源 Java 库,可将文本转换为 PDF 文档。APGL 是一种免费开源软件许可证。
在本文中,我们将使用控制台应用程序生成 PDF 文档。首先,打开 Microsoft Visual Studio 应用程序,从文件菜单中选择 "新建项目",然后选择 "控制台应用程序"。
输入项目名称并选择文件路径。然后点击创建按钮。同时,选择所需的 .NET Framework,如下图所示:
现在,Microsoft Visual Studio 将为所选应用程序生成结构。如果您选择了控制台、Windows 和 Web 应用程序,现在它将打开 program.cs 文件,您可以在其中输入代码并构建/运行应用程序。
选择 .NET 框架版本。在本例中,我们将使用 .NET 5.0
接下来,我们可以添加库来测试代码。
IronPDF 库可以通过四种方式下载和安装:
Visual Studio 提供了 NuGet 包管理器选项,可直接将软件包安装到解决方案中。下面的截图显示了如何打开 NuGet 包管理器。
它提供了一个从 NuGet 网站查找软件包的搜索框。在软件包管理器中,我们只需搜索 "IronPDF "即可,如下图所示:
在上图中,我们看到了相关搜索结果的列表。请选择所需的选项,以便将软件包安装到系统中。
在 Visual Studio 工具中,转到工具-> NuGet 包管理器-> 包管理器控制台
在软件包管理器控制台选项卡中输入以下一行:
Install-Package IronPdf
现在,软件包将下载并安装到当前项目中,随时可以使用。
第三种方法是直接从网站下载 NuGet 软件包。
点击此链接直接从我们的网站下载最新软件包。下载后,请按照以下步骤将软件包添加到您的项目中:
iText 库可通过四种方式下载和安装:
前三种方法对于 IronPDF 和 iText 库都是一样的。唯一不同的是需要注意的是,通过 Visual Studio 添加 iText 时,必须安装两个软件包。
首先,在 NuGet 软件包管理器中搜索 iText。我们需要同时安装 itext7 和 iText.pdfhtml,因为这些软件包的功能被分成多个软件包。
如果您喜欢使用 Visual Command-Line,则需要安装以下软件包:
Install-Package itext7
Install-Package itext7.pdfhtml
iText 7 是最新版本,因此我们在解决方案中使用该版本。
源代码将在 GitHub 上发布 这里 适用于 iText 7。
我们可以获取 iText 7 这里.
您可以获取与 iText 7 相关的所有类文件的源代码,并将其作为解决方案的参考。
PDF 库和网页-源文件-PDF 转换器都很有用。让我们看看如何从网页 URL 制作 PDF 文件。
我们可以使用 IronPDF 轻松创建 PDF。它可以从 URL 生成网页源文件,并将其转换为新文档。
以下步骤可轻松创建 PDF 文档。
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
namespace PdfConsoleApp
{
internal class Program
{
public static void Main(string [] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program");
Pdf.SaveAs("result.pdf");
// or optionally:
var Renderer = new IronPdf.ChromePdfRenderer().
RenderUrlAsPdf("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program").SaveAs("result.pdf");
}
}
}
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
namespace PdfConsoleApp
{
internal class Program
{
public static void Main(string [] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program");
Pdf.SaveAs("result.pdf");
// or optionally:
var Renderer = new IronPdf.ChromePdfRenderer().
RenderUrlAsPdf("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program").SaveAs("result.pdf");
}
}
}
Imports System.Diagnostics
Imports System.IO
Imports System.Net
Imports System.Text
Namespace PdfConsoleApp
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program")
Pdf.SaveAs("result.pdf")
' or optionally:
Dim Renderer = (New IronPdf.ChromePdfRenderer()).RenderUrlAsPdf("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program").SaveAs("result.pdf")
End Sub
End Class
End Namespace
上文包含了两种方法,可将网页 URL 转换为 PDF 文档并保存,如上例所示。第一种方法是通过构建 IronPDF PDF 文档来创建文档,而另一种方法是在同一行中渲染 URL 并将其保存为 PDF。这样可以将页面源下载到一个大块中并转换成文档,从而加快处理速度。
在上例中,我们使用 RenderUrlAsPdf 将网页转换为文档。只需提供链接和保存位置。PDF 转换需要 7.3 秒才能完成。
iText PDF 还允许我们创建 PDF 文档。在 iText 上,我们需要 WebClient 函数,同时我们需要从 URL 生成 PDF。客户端函数允许我们将下载的 URL 转换成字符串,然后我们就能将字符串转换成 PDF 文件。
在 iText 中,我们需要不同的类来生成 PDF 文档。PdfWriter 类允许我们在指定位置创建一个空文件,并为该类创建一个对象。PdfDocument 也是一个可以帮助我们读取 PDF 并将其写入 PDF 文档对象的类。PageSize 也是一个帮助我们处理文档页面设置的类。
ConverterProperties 是一个用于格式化网页字符串的类,在 PDF 文档中有不同的页面宽度设置等、
HtmlConverter 是命名空间 iText.Html2pdf 中的一个类。这个 HTML 转换器类有一个名为 "ConvertTopdf "的函数。这是一个静态函数,允许我们将下载的网页写入 PDF 文件。但是,我们需要将 Pdfwriter 和 ConverterProperties 对象作为参数传递给 HTML 转换器。
using iText.Html2pdf;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.StyledXmlParser.Css.Media;
namespace PdfConsoleApp
{
internal class Program
{
public static void Main(string [] args)
{
PdfWriter writer = new PdfWriter("itext.pdf");
PdfDocument pdf = new PdfDocument(writer);
PageSize pageSize = new PageSize(850, 1700);
pdf.SetDefaultPageSize(pageSize);
ConverterProperties properties = new ConverterProperties();
MediaDeviceDescription mediaDeviceDescription =
new MediaDeviceDescription(MediaType.SCREEN);
mediaDeviceDescription.SetWidth(pageSize.GetWidth());
properties.SetMediaDeviceDescription(mediaDeviceDescription);
string strdownload = new WebClient().DownloadString("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program");
HtmlConverter.ConvertToPdf(strdownload, pdf, properties);
}
}
}
using iText.Html2pdf;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.StyledXmlParser.Css.Media;
namespace PdfConsoleApp
{
internal class Program
{
public static void Main(string [] args)
{
PdfWriter writer = new PdfWriter("itext.pdf");
PdfDocument pdf = new PdfDocument(writer);
PageSize pageSize = new PageSize(850, 1700);
pdf.SetDefaultPageSize(pageSize);
ConverterProperties properties = new ConverterProperties();
MediaDeviceDescription mediaDeviceDescription =
new MediaDeviceDescription(MediaType.SCREEN);
mediaDeviceDescription.SetWidth(pageSize.GetWidth());
properties.SetMediaDeviceDescription(mediaDeviceDescription);
string strdownload = new WebClient().DownloadString("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program");
HtmlConverter.ConvertToPdf(strdownload, pdf, properties);
}
}
}
Imports iText.Html2pdf
Imports iText.Kernel.Geom
Imports iText.Kernel.Pdf
Imports iText.StyledXmlParser.Css.Media
Namespace PdfConsoleApp
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
Dim writer As New PdfWriter("itext.pdf")
Dim pdf As New PdfDocument(writer)
Dim pageSize As New PageSize(850, 1700)
pdf.SetDefaultPageSize(pageSize)
Dim properties As New ConverterProperties()
Dim mediaDeviceDescription As New MediaDeviceDescription(MediaType.SCREEN)
mediaDeviceDescription.SetWidth(pageSize.GetWidth())
properties.SetMediaDeviceDescription(mediaDeviceDescription)
Dim strdownload As String = (New WebClient()).DownloadString("https://en.wikipedia.org/wiki/%22Hello,_World!%22_program")
HtmlConverter.ConvertToPdf(strdownload, pdf, properties)
End Sub
End Class
End Namespace
结果
这是 IronPDF 和 iText 生成的 PDF 文件。左侧的 PDF 文件由 IronPDF 生成,右侧的 PDF 文件由 iText 生成。下面是生成 PDF 所需的时间。
结果会因网络带宽而变化。
IronPDF 和 iText 都提供了一种将 HTML 字符串转换为 PDF 的方法。这两个库都提供了一种简单的方法。
在 IronPDF 的帮助下,我们可以将网页源代码转化为文档。下面是一个如何将 HTML 字符串转化为文档的示例。它还能将任何标签元素转化为 PDF 文档。
var Renderer = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello world!!</h1>").SaveAs("result.pdf");
var Renderer = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello world!!</h1>").SaveAs("result.pdf");
Dim Renderer = (New IronPdf.ChromePdfRenderer()).RenderHtmlAsPdf("<h1>Hello world!!</h1>").SaveAs("result.pdf")
上例演示了如何使用 RenderHtmlAsPdf 转换 HTML 字符串。此外,我们还可以向将网页源代码转换为字符串的函数提供任意数量的 HTML 字符串。在获取字符串后,我们可以使用另存为函数保存文档。完成这一过程需要 2.7 秒。
借助 iText PDF,我们可以将网页源字符串转换为 PDF。下面是一个如何从网页源字符串创建文档的示例。它还能将任何标签元素转换成新文档。
PdfWriter writer = new PdfWriter("itext.pdf");
PdfDocument pdf = new PdfDocument(writer);
PageSize pageSize = new PageSize(850, 1700);
pdf.SetDefaultPageSize(pageSize);
ConverterProperties properties = new ConverterProperties();
MediaDeviceDescription mediaDeviceDescription =
new MediaDeviceDescription(MediaType.SCREEN);
mediaDeviceDescription.SetWidth(pageSize.GetWidth());
properties.SetMediaDeviceDescription(mediaDeviceDescription);
HtmlConverter.ConvertToPdf("<h1>Hello world!!</h1>", pdf, properties);
PdfWriter writer = new PdfWriter("itext.pdf");
PdfDocument pdf = new PdfDocument(writer);
PageSize pageSize = new PageSize(850, 1700);
pdf.SetDefaultPageSize(pageSize);
ConverterProperties properties = new ConverterProperties();
MediaDeviceDescription mediaDeviceDescription =
new MediaDeviceDescription(MediaType.SCREEN);
mediaDeviceDescription.SetWidth(pageSize.GetWidth());
properties.SetMediaDeviceDescription(mediaDeviceDescription);
HtmlConverter.ConvertToPdf("<h1>Hello world!!</h1>", pdf, properties);
Dim writer As New PdfWriter("itext.pdf")
Dim pdf As New PdfDocument(writer)
Dim pageSize As New PageSize(850, 1700)
pdf.SetDefaultPageSize(pageSize)
Dim properties As New ConverterProperties()
Dim mediaDeviceDescription As New MediaDeviceDescription(MediaType.SCREEN)
mediaDeviceDescription.SetWidth(pageSize.GetWidth())
properties.SetMediaDeviceDescription(mediaDeviceDescription)
HtmlConverter.ConvertToPdf("<h1>Hello world!!</h1>", pdf, properties)
这与 URL 到 PDF 的转换类似。我们唯一需要删除的步骤是 WebClient,取而代之的是在参数中使用网页源字符串。这将获取给定字符串并将其转换为新文档。
结果:
我们可以 阅读 PDF 使用 IronPDF 和 EO.pdf 编写文件。
IronPDF 可帮助我们读取现有的 PDF 文件。以下是使用 IronPDF 读取 PDF 文件的示例。
var pdfDocument = IronPdf.PdfDocument.FromFile("result.pdf");
string AllText = pdfDocument.ExtractAllText();
var pdfDocument = IronPdf.PdfDocument.FromFile("result.pdf");
string AllText = pdfDocument.ExtractAllText();
Dim pdfDocument = IronPdf.PdfDocument.FromFile("result.pdf")
Dim AllText As String = pdfDocument.ExtractAllText()
Fromfile 方法用于从现有文件中读取 PDF,并将其转换为 PDF 文档对象,如上面的代码所示。我们可以使用该对象读取 PDF 页面上可访问的文本和图像。完成这一过程只需几毫秒。
iText 软件还允许我们在不借助外部阅读器的情况下阅读文档。
using (PdfReader reader = new PdfReader("result.pdf"))
{
text = new StringBuilder();
PdfDocument pdf = new PdfDocument(reader);
var strategy = new LocationTextExtractionStrategy();
for (int i = 1; i <= pdf.GetNumberOfPages(); i++)
{
var pdfpage = pdf.GetPage(i);
text.Append(PdfTextExtractor.GetTextFromPage(pdfpage, strategy));
}
}
using (PdfReader reader = new PdfReader("result.pdf"))
{
text = new StringBuilder();
PdfDocument pdf = new PdfDocument(reader);
var strategy = new LocationTextExtractionStrategy();
for (int i = 1; i <= pdf.GetNumberOfPages(); i++)
{
var pdfpage = pdf.GetPage(i);
text.Append(PdfTextExtractor.GetTextFromPage(pdfpage, strategy));
}
}
Using reader As New PdfReader("result.pdf")
text = New StringBuilder()
Dim pdf As New PdfDocument(reader)
Dim strategy = New LocationTextExtractionStrategy()
Dim i As Integer = 1
Do While i <= pdf.GetNumberOfPages()
Dim pdfpage = pdf.GetPage(i)
text.Append(PdfTextExtractor.GetTextFromPage(pdfpage, strategy))
i += 1
Loop
End Using
上面的代码显示,我们可以使用 PDF 阅读器读取文档。我们唯一需要做的就是将文件位置作为参数传递。PDF 阅读器会读取文档并将其转换为一个对象,使用该对象我们可以读取所有页面的文本,为此我们需要将它们用于循环。
结果
IronPDF 和 iText PDF 库都允许用户将页面分割成单独的文档。两者还提供了实现这一功能的简单方法。
IronPDF 允许我们将文档页面拆分成单独的文档。下面是一个如何将页面拆分成独立文档的示例。
var Splitdocument = IronPdf.PdfDocument.FromFile("result.pdf");
for (int i = 0; i < Splitdocument.PageCount; i++)
{
Splitdocument.CopyPage(i).SaveAs("Ironpdfmerged"+i.ToString()+".pdf");
}
var Splitdocument = IronPdf.PdfDocument.FromFile("result.pdf");
for (int i = 0; i < Splitdocument.PageCount; i++)
{
Splitdocument.CopyPage(i).SaveAs("Ironpdfmerged"+i.ToString()+".pdf");
}
Dim Splitdocument = IronPdf.PdfDocument.FromFile("result.pdf")
For i As Integer = 0 To Splitdocument.PageCount - 1
Splitdocument.CopyPage(i).SaveAs("Ironpdfmerged" & i.ToString() & ".pdf")
Next i
在上例中,我们首先使用 pdf-document 类的 fromfile 方法加载一个现有文档。然后,copypage 方法允许我们从现有文档中复制页面,Saveas 方法允许我们将文档保存到一个单独的文件中。页码都以 0 开头。因此,我们必须提供一个以 0 开头的页码。
我们也可以使用 iText 7 分割 PDF 文档中的页面。不过,我们需要先编写一个单独的类文件,从 itext.kernel.Utils 命名空间继承 PdfSplitter。这将创建一个实例来分割 PDF 数据。下面是一个代码示例:
using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using iText.Html2pdf;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Listener;
using iText.Kernel.Utils;
using iText.StyledXmlParser.Css.Media;
namespace PdfConsoleApp
{
internal class Program
{
static void Main(string [] args)
{
using (var pdfDoc = new PdfDocument(new PdfReader("result.pdf")))
{
var outputDir = @"Itext_{0}.pdf";
var splitter = new CustomPdfSplitter(pdfDoc, outputDir);
var splittedDocs = splitter.SplitByPageCount(1);
foreach (var splittedDoc in splittedDocs)
{
splittedDoc.Close();
}
}
Console.ReadKey();
}
}
public class CustomPdfSplitter : PdfSplitter
{
private String dest;
private int partNumber = 1;
public CustomPdfSplitter(PdfDocument pdfDocument, String dest) : base(pdfDocument)
{
this.dest = dest;
}
protected override PdfWriter GetNextPdfWriter(PageRange documentPageRange)
{
return new PdfWriter(String.Format(dest, partNumber++));
}
}
}
using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using iText.Html2pdf;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Listener;
using iText.Kernel.Utils;
using iText.StyledXmlParser.Css.Media;
namespace PdfConsoleApp
{
internal class Program
{
static void Main(string [] args)
{
using (var pdfDoc = new PdfDocument(new PdfReader("result.pdf")))
{
var outputDir = @"Itext_{0}.pdf";
var splitter = new CustomPdfSplitter(pdfDoc, outputDir);
var splittedDocs = splitter.SplitByPageCount(1);
foreach (var splittedDoc in splittedDocs)
{
splittedDoc.Close();
}
}
Console.ReadKey();
}
}
public class CustomPdfSplitter : PdfSplitter
{
private String dest;
private int partNumber = 1;
public CustomPdfSplitter(PdfDocument pdfDocument, String dest) : base(pdfDocument)
{
this.dest = dest;
}
protected override PdfWriter GetNextPdfWriter(PageRange documentPageRange)
{
return new PdfWriter(String.Format(dest, partNumber++));
}
}
}
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Net
Imports System.Text
Imports iText.Html2pdf
Imports iText.Kernel.Geom
Imports iText.Kernel.Pdf
Imports iText.Kernel.Pdf.Canvas.Parser
Imports iText.Kernel.Pdf.Canvas.Parser.Listener
Imports iText.Kernel.Utils
Imports iText.StyledXmlParser.Css.Media
Namespace PdfConsoleApp
Friend Class Program
Shared Sub Main(ByVal args() As String)
Using pdfDoc = New PdfDocument(New PdfReader("result.pdf"))
Dim outputDir = "Itext_{0}.pdf"
Dim splitter = New CustomPdfSplitter(pdfDoc, outputDir)
Dim splittedDocs = splitter.SplitByPageCount(1)
For Each splittedDoc In splittedDocs
splittedDoc.Close()
Next splittedDoc
End Using
Console.ReadKey()
End Sub
End Class
Public Class CustomPdfSplitter
Inherits PdfSplitter
Private dest As String
Private partNumber As Integer = 1
Public Sub New(ByVal pdfDocument As PdfDocument, ByVal dest As String)
MyBase.New(pdfDocument)
Me.dest = dest
End Sub
Protected Overrides Function GetNextPdfWriter(ByVal documentPageRange As PageRange) As PdfWriter
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: return new PdfWriter(String.Format(dest, partNumber++));
Dim tempVar = New PdfWriter(String.Format(dest, partNumber))
partNumber += 1
Return tempVar
End Function
End Class
End Namespace
我们创建了一个覆盖 pdfwriter 的自定义类,允许我们使用自定义名称和原始文件名重命名分割文件。稍后,它将把 PDF 页面返回到一个新的列表项中,然后可将其保存到一个单独的文档中。
结果:
IronPDF 无法呈现 HTML 转 PDF 远程服务器。相反,它会在幕后运行一个真正符合标准的网络浏览器实例 (无需安装任何其他软件).HTML 的渲染是完全准确的,而且是矢量格式,适合最高标准的商业印刷。输出结果是干净、高质量的 PDF。因此,IronPDF 比 iText PDF 更具优势。强烈推荐务实的编码人员使用 IronPDF,以提高工作效率。IronPDF 是公开的商业软件,其许可和定价详情均公布在网站上。您可以访问此处了解 IronPDF 的许可选项。
iText PDF 支持多种字体,但我们只能使用内联样式表。它不允许我们添加外部样式表,因为它没有将 HTML 转换为 PDF 文件的引擎或浏览器。iText 可以正确、准确地渲染 HTML,但生成的 PDF 文件非常大。要了解有关 iText 许可证的更多信息,请点击此处。
IronPDF 是希望快速高效工作的务实编码人员的必备工具。最重要的是,它能为您节省时间。IronPDF 许可套餐提供终身许可,而且没有持续成本。
您可以从以下网址下载 IronPDF 链接.