在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在 C#.NET 中处理 PDF 时,使用 PDF 操作和生成库比从头开始完成任务更为可取。 SpirePDF 和 IronPDF 两者都能在 .NET 和 .NET Core 中创建、编辑和打印 PDF 文件。它们还可以 阅读 PDF 文本、数据、表格和图像示例都非常出色。
我们将在本文中研究这两个库。我们将展示每个 PDF 库的功能,并通过代码示例和分步教程比较它们是如何实现这些功能的。虽然本文无法涵盖这两个 PDF 库的所有功能,但它将解释每个库最常见和最流行的用途。这样,您就可以决定哪一个最适合您的项目。
IronPDF 是 HTML 到 PDF 的渲染库,适用于 C# 和 Java.用最少的代码行将您的网页快速转换成功能强大、像素完美的 PDF。在下面的文章中了解更多有关 IronPDF for .NET C# 功能的信息。进一步了解 IronPDF for Java 这里.
很多时候,微软提供给我们的 Visual Studio 工具缺乏功能性或可用性。这就是第三方库的用武之地。开发人员使用第三方库,主要是为了它们的易用性,或者主要是为了它们的功能。
本文将比较 .NET 和 .NET Core 开发人员最常用的两个 PDF 库。这两个库是
Spire.PDF for .NET是一个API,可用于在C#、VB.NET、ASP.NET、.NET Core、Xamarin应用程序中创建、编辑、编写、读取和处理PDF文件,而无需任何外部依赖。有了 Spire.PDF,您就可以完全通过 C#/VB.NET 创建 PDF 文件或处理现有的 PDF 文档,而无需安装 Adobe Acrobat。
IronPDF 使 .NET 和 .NET Core 开发人员能够在 .NET Core 和 .NET Framework 的 C#、F# 和 VB.NET 中轻松生成、合并、分割、编辑和提取 PDF 内容,还能从 HTML、ASPX、CSS、JS 和图像文件中创建 PDF。
IronPDF 利用嵌入式、基于 Chromium 的网页浏览器渲染器来实现以下功能 将 HTML 转换为 PDF.这样,开发人员就可以通过 HTML、图像和 CSS 生成 PDF,并与现有的网络资产密切合作,在项目期间与设计师并行工作。
IronPDF 注重开发人员的工作效率。该库将许多常见的复杂 PDF 代码任务简化为方便的 C# 方法,用于提取文本和图像、签署 PDFS、使用新的 HTML 编辑 PDF 等,开发人员无需研究 PDF 文档标准,就能了解如何实现最佳效果。
让我们来看看它们的一些特点。
IronPDF | SpirePDF |
---|---|
使用 IronPDF 在 C# 中将 HTML 转换为 PDF | Spire.PDF for .NET 支持在 C# 中转换 HTML |
用 3 行代码将 URL 转换为 PDF | 需要一种变通方法来尝试从 URL 转换 |
轻松将 HTML 字符串转换为 PDF | 可将 HTML 字符串转换为 PDF |
图标字体(Fontello、Bootstrap、FontAwesome) | 14 种核心字体 第 1 类字体 第 3 类字体 中日韩字体 True Type 字体 支持统一字符编码 |
来自 $749 的许可证 | 许可证 599 美元起 |
许可证选项 | IronPDF | SpirePDF |
---|---|---|
1 个开发商,1 个地点 | $liteLicense | $599 |
1 个开发人员,不限项目,1 个地点 | $699 | $599 |
最多 10 名开发人员,不限项目,最多 10 个地点 | $1199 | $3070 |
不限开发人员、不限项目、不限地点 | $1799 | 无许可证 |
1 个 SaaS/OEM 产品,最多 50 名开发人员,不限地点 | $1599 | $8988 |
购买许可证 | IronPDF 许可选项 | SpirePDF 许可选项 |
现在,让代码来说话!
首先,我们将创建一个项目,使用每个软件库测试不同的 PDF 功能。
使用以下步骤创建 ASP.NET 网站:
在电脑上安装 IronPDF 有两种主要方法,如下所示:
在 Visual Studio 项目中快速安装 IronPDF NuGet 包的方法主要有三种,它们是
NuGet 软件包管理器用于下载和安装各种软件包,您可以在应用程序中包含这些软件包,以改进其功能。IronPDF 就是这样一个软件包。要下载并安装 IronPDF NuGet 包,请选择项目菜单,或在解决方案资源管理器中右键单击项目。下面显示了两种方法的截图。
浏览 IronPDF 软件包并安装,如下图所示。
您还可以使用开发人员命令提示符安装 IronPDF NuGet 软件包。接下来的几个步骤将介绍如何安装。
PM > Install-Package IronPdf
通过以下步骤,您可以直接从 NuGet 下载 IronPDF:
安装 IronPDF 的第二种方法是直接下载,请点击此处下载到 下载 IronPDF.dll.
通过以下步骤在项目中引用库:
在 Visual Studio 项目中安装 SpirePDF NuGet 软件包有三种方法,包括
在 Visual Studio 中搜索 SpirePDF 并安装相关软件包,如下图所示。 (操作步骤与前面的类似)
或者,在开发人员命令提示符中 (如前所示,输入以下命令)
安装软件包 Spire.PDF -版本 6.9.16
或直接从其网站下载:
https://www.e-iceblue.com/Download/download-pdf-for-net-now.html 您必须注册一个账户。
如果一切顺利,您就可以开始使用图书馆了。
以下代码下载网页并将其转换为 PDF 文档。
下面的代码利用 IronPDF 从 URL 创建 PDF,本例中的 URL 是维基百科上的 PDF 格式说明。还包括客户页眉和页脚。
var Renderer = new IronPdf.ChromePdfRenderer();
// Create a PDF from an existing HTML
Renderer.RenderingOptions.MarginTop = 50; //millimetres
Renderer.RenderingOptions.MarginBottom = 50;
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
Renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
};
Renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
};
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
Renderer.RenderingOptions.EnableJavaScript = true;
Renderer.RenderingOptions.RenderDelay = 500; //milliseconds
using var PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format");
PDF.SaveAs("wikipedia.pdf");
var Renderer = new IronPdf.ChromePdfRenderer();
// Create a PDF from an existing HTML
Renderer.RenderingOptions.MarginTop = 50; //millimetres
Renderer.RenderingOptions.MarginBottom = 50;
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
Renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
};
Renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
};
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
Renderer.RenderingOptions.EnableJavaScript = true;
Renderer.RenderingOptions.RenderDelay = 500; //milliseconds
using var PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format");
PDF.SaveAs("wikipedia.pdf");
Dim Renderer = New IronPdf.ChromePdfRenderer()
' Create a PDF from an existing HTML
Renderer.RenderingOptions.MarginTop = 50 'millimetres
Renderer.RenderingOptions.MarginBottom = 50
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
Renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "{pdf-title}",
.DrawDividerLine = True,
.FontSize = 16
}
Renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.LeftText = "{date} {time}",
.RightText = "Page {page} of {total-pages}",
.DrawDividerLine = True,
.FontSize = 14
}
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
Renderer.RenderingOptions.EnableJavaScript = True
Renderer.RenderingOptions.RenderDelay = 500 'milliseconds
Dim PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format")
PDF.SaveAs("wikipedia.pdf")
输出文件包含 12 个页面,JavaScript 和 CSS 的渲染效果非常好。输出结果如下所示:
如上所述,从 URL 生成 PDF 是一个看似简单的转换过程。但由于一些因素,我们的工程团队在尝试使用 SpirePDF 实现该功能时遇到了困难。这方面的文档并不多,作为开发人员,我们试图找到一种解决方法。
为了实现这一目标,我们认为您必须下载并安装更多的工具,请参考此处:
http://www.e-iceblue.com/Download/download-pdf-for-net-now.html 我们还没想明白。这里有一段控制台应用程序的代码,您可以在完成所有步骤后使用它来实现这一目标:
//Create a pdf document.
PdfDocument doc = new PdfDocument();
PdfPageSettings setting = new PdfPageSettings();
setting.Size = new SizeF(1000, 1000);
setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
htmlLayoutFormat.IsWaiting = true;
String url = "https://www.wikipedia.org/";
Thread thread = new Thread(() =>
{ doc.LoadFromHTML(url, false, false, false, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
//Save pdf file.
doc.SaveToFile("output-wiki.pdf");
doc.Close();
//Launching the Pdf file.
System.Diagnostics.Process.Start("output-wiki.pdf");
//Create a pdf document.
PdfDocument doc = new PdfDocument();
PdfPageSettings setting = new PdfPageSettings();
setting.Size = new SizeF(1000, 1000);
setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
htmlLayoutFormat.IsWaiting = true;
String url = "https://www.wikipedia.org/";
Thread thread = new Thread(() =>
{ doc.LoadFromHTML(url, false, false, false, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
//Save pdf file.
doc.SaveToFile("output-wiki.pdf");
doc.Close();
//Launching the Pdf file.
System.Diagnostics.Process.Start("output-wiki.pdf");
'Create a pdf document.
Dim doc As New PdfDocument()
Dim setting As New PdfPageSettings()
setting.Size = New SizeF(1000, 1000)
setting.Margins = New Spire.Pdf.Graphics.PdfMargins(20)
Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()
htmlLayoutFormat.IsWaiting = True
Dim url As String = "https://www.wikipedia.org/"
Dim thread As New Thread(Sub()
doc.LoadFromHTML(url, False, False, False, setting, htmlLayoutFormat)
End Sub)
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()
'Save pdf file.
doc.SaveToFile("output-wiki.pdf")
doc.Close()
'Launching the Pdf file.
System.Diagnostics.Process.Start("output-wiki.pdf")
IronPDF 需要三行代码 (如果在代码段底部也包含 SaveAs 方法的话)除此之外,只需要两行:
var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format");
var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format");
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format")
快速,直奔主题。您可能已经注意到,代码中没有使用 FileStream 或任何其他 .NET 对象;RenderUrlAsPdf 方法在幕后处理 .NET 框架的所有复杂问题。
另一方面,SpirePDF 使实现 URL 转换为 PDF 的任务变得非常复杂,需要创造性的变通方法。
我们将比较 IronPDF 和 Spire.PDF 的转换质量。
Spire.PDF for .NET是一个用于处理PDF文件的API,就像IronPDF一样,但提供的功能不如IronPDF多,质量也不如IronPDF渲染器。
比较两个工具的最好方法就是并排比较。以上是 IronPDF 和 Spire.PDF 的输出结果。
Bucket 管理面板是一个网络仪表盘,用于显示所有有用信息。
两款工具的渲染质量存在明显差异。IronPDF 生成的输出是原始网页 100% 相同的副本。另一方面,Spire.PDF 创建的 PDF 就像是网站的骨架。
IronPDF 使用并渲染了网页的所有 CSS 和 JavaScript,看起来非常完美,但 Spire.PDF 几乎丢失了水桶管理网页的所有 CSS 和 JavaScript 文件。所有图表都丢失了--如果没有丢失其值,也不会计算和输出显示。
Spire.PDF 渲染引擎根本无法在网站上准确渲染颜色;在 Spire.PDF 创建的输出中只能看到少数几种颜色。
IronPDF 制作了一份完全相同的网页副本,所有颜色都逐像素完美呈现。
在 Spire.PDF 输出文件中,无法识别侧导航栏,看起来导航栏上只有文字。而在 IronPDF 输出文件中,侧导航栏则非常完美。
C# API IronPDF 和 Spire.PDF 将 URL 转换为 PDF 文件所需的时间几乎相同,但 IronPDF 能准确渲染网站的所有内容,而 Spire.PDF 渲染引擎则无法创建高质量的 PDF。
以下示例利用 IronPDF 和 SpirePDF 将提供的 HTML 字符串创建 PDF 文档。
以下代码利用 IronPDF 创建包含 HTML 输入的 PDF。
/**
PDF from HTML String
anchor-pdf-from-html-string-with-ironpdf
**/
private void HTMLString()
{
var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Hi there IronPdf</h1>");
Renderer.RenderingOptions.TextFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>" };
var OutputPath = "ChromePdfRenderer.pdf";
PDF.SaveAs(OutputPath);
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen;
}
/**
PDF from HTML String
anchor-pdf-from-html-string-with-ironpdf
**/
private void HTMLString()
{
var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Hi there IronPdf</h1>");
Renderer.RenderingOptions.TextFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>" };
var OutputPath = "ChromePdfRenderer.pdf";
PDF.SaveAs(OutputPath);
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen;
}
'''
'''PDF from HTML String
'''anchor-pdf-from-html-string-with-ironpdf
'''*
Private Sub HTMLString()
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Hi there IronPdf</h1>")
Renderer.RenderingOptions.TextFooter = New HtmlHeaderFooter() With {.HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"}
Dim OutputPath = "ChromePdfRenderer.pdf"
PDF.SaveAs(OutputPath)
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen
End Sub
以下代码使用 SpirePDF 创建包含 HTML 文本的 PDF。
private void HTMLString()
{
Document document = new Document();
document.LoadFromFile("sample.htm", FileFormat.Html, XHTMLValidationType.None);
//Save html to PDF.
document.SaveToFile("Sample.pdf", FileFormat.PDF);
}
private void HTMLString()
{
Document document = new Document();
document.LoadFromFile("sample.htm", FileFormat.Html, XHTMLValidationType.None);
//Save html to PDF.
document.SaveToFile("Sample.pdf", FileFormat.PDF);
}
Private Sub HTMLString()
Dim document As New Document()
document.LoadFromFile("sample.htm", FileFormat.Html, XHTMLValidationType.None)
'Save html to PDF.
document.SaveToFile("Sample.pdf", FileFormat.PDF)
End Sub
SpirePDF 似乎只能使用 LoadFromFile 方法加载 HTML 文件,然后使用 SaveToFile 调用发送 HTML 文件,将其输出为 PDF。
IronPDF 使用 RenderHtmlAsPdf 将给定的 HTML 字符串渲染为 PDF 格式。
接下来的 IronPDF 和 SpirePDF 代码将从 ASPX 页面创建 PDF 文档。
以下代码利用 IronPDF 从 ASPX 文件创建 PDF 文档。
/**
ASPX to PDF
anchor-aspx-to-pdf-with-ironpdf
**/
protected void Page_Load(object sender, EventArgs e)
{
IronPdf.AspxToPdf.RenderThisPageAsPdf();
}
/**
ASPX to PDF
anchor-aspx-to-pdf-with-ironpdf
**/
protected void Page_Load(object sender, EventArgs e)
{
IronPdf.AspxToPdf.RenderThisPageAsPdf();
}
'''
'''ASPX to PDF
'''anchor-aspx-to-pdf-with-ironpdf
'''*
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
IronPdf.AspxToPdf.RenderThisPageAsPdf()
End Sub
以下代码可将 ASPX 文件转换为 PDF。
protected void Page_Load(object sender, EventArgs e)
{
using PdfDocument pdf = new PdfDocument();
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
this.RenderControl(htw);
//string sourceCode = sw.ToString();
string url=Request.Url.AbsoluteUri;
Thread thread = new Thread(() =>
{
PdfPageSettings settings = new PdfPageSettings();
PdfHtmlLayoutFormat format = new PdfHtmlLayoutFormat();
pdf.LoadFromHTML(url, false, true, true, settings, format);
//pdf.LoadFromHTML(Request.Url.AbsoluteUri, false, true, true);
});
pdf.SaveToHttpResponse("NameOfFile.pdf", Response, HttpReadType.Save);
}
protected void Page_Load(object sender, EventArgs e)
{
using PdfDocument pdf = new PdfDocument();
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
this.RenderControl(htw);
//string sourceCode = sw.ToString();
string url=Request.Url.AbsoluteUri;
Thread thread = new Thread(() =>
{
PdfPageSettings settings = new PdfPageSettings();
PdfHtmlLayoutFormat format = new PdfHtmlLayoutFormat();
pdf.LoadFromHTML(url, false, true, true, settings, format);
//pdf.LoadFromHTML(Request.Url.AbsoluteUri, false, true, true);
});
pdf.SaveToHttpResponse("NameOfFile.pdf", Response, HttpReadType.Save);
}
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Using pdf As New PdfDocument()
Dim sw As New StringWriter()
Dim htw As New HtmlTextWriter(sw)
Me.RenderControl(htw)
'string sourceCode = sw.ToString();
Dim url As String=Request.Url.AbsoluteUri
Dim thread As New Thread(Sub()
Dim settings As New PdfPageSettings()
Dim format As New PdfHtmlLayoutFormat()
pdf.LoadFromHTML(url, False, True, True, settings, format)
'pdf.LoadFromHTML(Request.Url.AbsoluteUri, false, true, true);
End Sub)
pdf.SaveToHttpResponse("NameOfFile.pdf", Response, HttpReadType.Save)
End Using
End Sub
但也有一些注意事项:由于不支持表单验证会员资格,有时可能会创建空白 PDF。
以下代码将 XML 转换为 PDF 文档
/**
XML to PDF
anchor-xml-to-pdf-with-ironpdf
**/
private void XMLtoPDF(string XSLT, string XML)
{
XslCompiledTransform transform = new XslCompiledTransform();
using(XmlReader reader = XmlReader.Create(new StringReader(XSLT)))
{
transform.Load(reader);
}
StringWriter results = new StringWriter();
using(XmlReader reader = XmlReader.Create(new StringReader(XML)))
{
transform.Transform(reader, null, results);
}
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf(results.ToString()).SaveAs("XMLtoPDF.pdf");
}
/**
XML to PDF
anchor-xml-to-pdf-with-ironpdf
**/
private void XMLtoPDF(string XSLT, string XML)
{
XslCompiledTransform transform = new XslCompiledTransform();
using(XmlReader reader = XmlReader.Create(new StringReader(XSLT)))
{
transform.Load(reader);
}
StringWriter results = new StringWriter();
using(XmlReader reader = XmlReader.Create(new StringReader(XML)))
{
transform.Transform(reader, null, results);
}
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf(results.ToString()).SaveAs("XMLtoPDF.pdf");
}
'''
'''XML to PDF
'''anchor-xml-to-pdf-with-ironpdf
'''*
Private Sub XMLtoPDF(ByVal XSLT As String, ByVal XML As String)
Dim transform As New XslCompiledTransform()
Using reader As XmlReader = XmlReader.Create(New StringReader(XSLT))
transform.Load(reader)
End Using
Dim results As New StringWriter()
Using reader As XmlReader = XmlReader.Create(New StringReader(XML))
transform.Transform(reader, Nothing, results)
End Using
Dim Renderer As New IronPdf.ChromePdfRenderer()
Renderer.RenderHtmlAsPdf(results.ToString()).SaveAs("XMLtoPDF.pdf")
End Sub
在决定购买哪种产品时,定价很可能是首要决定因素。在下表中,我将简要介绍 IronPDF 和 SpirePDF 的各种选项。
接下来,让我们比较一下 Iron Software 和 SpirePDF 的支持和更新。
扩展选项包括
可提供以下支持服务