在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
PDF 是 "便携式文档格式 "的缩写,是 Adobe 开发的一种文件格式。 PDF 对于展示需要格式化其中包含的文本和图像的文件非常有用。 PDF 文件在现代社会中发挥着重要作用,被用于各类商业部门,如开具发票和生成文件。 如今,得益于市场上现有的 PDF 库,PDF 生成几乎变得直观。 在决定为您的项目使用 PDF 库时,重要的是要考虑每个库的功能和优势,以便能够选择最适合您的库。
在本文中,我们将比较两个最流行的 .NET PDF 库,它们是
iText PDF
IronPDF 和 iText PDF 库都用于在 Microsoft .NET 应用程序或项目中创建、读取和修改 PDF 文件。 为了确定哪个库最适合您的应用程序,我们将先比较这两个库的功能,然后再比较转换和处理 PDF 的性能成本。 这两个库都受 Microsoft .NET Framework 的支持。 我们还将记录每个图书馆的持续时间,以便进行分析。
IronPDF for .NET 是一个功能强大的 PDF .NET 库,开发人员使用它可以轻松创建、阅读和修改 PDF。 在内部,IronPDF 使用 Chromium 引擎,包含许多实用而强大的功能,例如将 HTML5、JavaScript、CSS 和图像文件转换为 PDF,添加自定义页眉和页脚,以及完全按照浏览器中的显示方式呈现 PDF。 IronPDF 支持各种网络和 NET 格式,如 HTML、ASPX、Razor View 和 MVC。 IronPDF 的主要功能包括
iText PDF 是一个开源 Java 库,可以将文本转换成 PDF 文档。 iText 遵循 AGPL 许可软件方案。 APGL 是一种免费开源软件许可证。
在本文中,我们将使用控制台应用程序生成 PDF 文档。 首先,打开 Microsoft Visual Studio 应用程序,从文件菜单中选择 "新建项目",然后选择 "控制台应用程序"。
输入项目名称并选择文件路径。 然后,单击 "创建 "按钮。 同时,选择所需的 .NET Framework,如下图所示:
现在,Microsoft Visual Studio 将为所选应用程序生成结构。 如果您选择了控制台、Windows 和网络应用程序,现在就会打开 program.cs 文件,您可以在其中输入代码并构建/运行应用程序。
选择 .NET Framework 版本。 在本例中,我们将使用 .NET 5.0
接下来,我们可以添加库来测试代码。
IronPDF 库可以通过四种方式下载和安装:
Visual Studio 提供了 NuGet 包管理器选项,可直接将软件包安装到解决方案中。 下面的截图显示了如何打开 NuGet 包管理器。
它提供了一个从 NuGet 网站查找软件包的搜索框。在软件包管理器中,我们只需搜索 "IronPDF "即可,如下图所示:
在上图中,我们可以看到相关搜索结果的列表。 请选择所需的选项,以便将软件包安装到系统中。
在 Visual Studio 工具中,转到工具-> NuGet 包管理器-> 包管理器控制台
在软件包管理器控制台选项卡中输入以下一行:
Install-Package IronPdf
现在,软件包将下载并安装到当前项目中,随时可以使用。
第三种方法是直接从网站上下载 NuGet 软件包。
访问IronPDF 官方下载页面直接从网站下载最新软件包。下载后,请按照以下步骤将软件包添加到您的项目中:
iText 库可以通过四种方式下载和安装:
直接从 iText Source 网站下载。
前三种方法对于 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 PDFHtml 模块i7n-pdfhtml GitHub 代码库.
您可以获取包含与 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.HtmlConverter 中的一个类。 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("Ironpdfsplit"+i.ToString()+".pdf");
}
var Splitdocument = IronPdf.PdfDocument.FromFile("result.pdf");
for (int i = 0; i < Splitdocument.PageCount; i++)
{
Splitdocument.CopyPage(i).SaveAs("Ironpdfsplit"+i.ToString()+".pdf");
}
Dim Splitdocument = IronPdf.PdfDocument.FromFile("result.pdf")
For i As Integer = 0 To Splitdocument.PageCount - 1
Splitdocument.CopyPage(i).SaveAs("Ironpdfsplit" & 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从远程服务器翻译。 在翻译过程中,翻译人员不能使用.NET、Java、Python 或 Node.js 浏览器,而是在幕后创建一个真正符合标准的网络浏览器实例(无需安装任何其他软件). HTML 的渲染是完全准确的,而且是矢量格式,适合最高标准的商业印刷。 输出的 PDF 文件干净整洁,质量上乘。 因此,IronPDF 比 iText PDF 更有优势。 强烈推荐务实的编码人员使用 IronPDF,以提高工作效率和成效。 它是公开的商业软件,其许可和定价详情都公布在其网站上。定价页.
iText PDF 支持多种字体,而我们只能使用内联样式表。 它不允许我们添加外部样式表,因为它没有将 HTML 转换为 PDF 文件的引擎或浏览器。 iText 可以正确、准确地渲染 HTML,但生成的 PDF 文件非常大。 iText 附带商业许可证和免费开发人员许可证。 要了解有关 iText 许可证的更多信息,请访问他们的iText Community 和 iText 7 许可证页面.
IronPDF 是希望快速高效工作的务实编码人员的必备工具。 最重要的是,它能为您节省时间。IronPDF 许可套餐提供终身许可,而且没有持续成本。
您可以从此处下载 IronPDF下载链接.