在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在 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的信息。 這裡.
許多時候,Microsoft 隨著 Visual Studio 提供給我們的工具缺乏功能性或易用性。這就是第三方函式庫出現的地方。開發人員利用第三方函式庫的易用性,或者主要是它們的功能。
本文將比較兩個最受歡迎的 .NET 和 .NET Core 開發人員使用的 PDF 函式庫。這兩個函式庫是:
Spire.PDF for .NET 是一個 API,可以應用於創建、編輯、寫入、閱讀和處理 PDF 文件,而不需要 C#、VB.NET、ASP.NET、.NET Core、Xamarin 應用中的任何外部依賴項。使用 Spire.PDF,您可以從頭開始創建 PDF 文件,或僅通過 C#/VB.NET 處理現有的 PDF 文檔,而無需安裝 Adobe Acrobat。
IronPDF 使 .NET 和 .NET Core 開發人員能夠輕鬆地在 C#、F# 和 VB.NET 中生成、合併、拆分、編輯和提取 PDF 內容,適用於 .NET Core 和 .NET Framework,並且可從 HTML、ASPX、CSS、JS 和圖像文件創建 PDF。
IronPDF 使用嵌入式的全 Chromium 基於網頁瀏覽器渲染器來 將 HTML 轉換為 PDF這允許開發人員從HTML、圖像和CSS生成PDF,並能在項目期間與設計師平行工作,緊密協作現有的網頁資產。
IronPDF專注於開發人員生產力。該庫將許多常見的複雜PDF編碼任務簡化為方便的C#方法,以提取文本和圖像、簽署PDF、用新的HTML編輯PDF等 - 開發人員無需研究PDF文檔標準即可理解如何達到最佳結果。
讓我們來看看它們的一些功能。
IronPDF | SpirePDF |
---|---|
使用 IronPDF 在 C# 中將 HTML 轉換為 PDF | Spire.PDF for .NET 支援在 C# 中轉換 HTML |
使用三行代碼將網址轉換為 PDF | 需要一個解決方法來嘗試從URL轉換 |
簡單的 HTML 字串轉 PDF | 可將 HTML 字串轉換為 PDF |
圖標字體(Fontello、Bootstrap、FontAwesome) | 14 核心字體 類型 1 字體 三類字體 CJK 字體 True Type Fonts Unicode 支援 |
從 $749 授權 | 授權證書起價 $599 |
授權選項 | IronPDF | SpirePDF |
---|---|---|
1名開發者,1個地點 | `$Lite License` | $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 並安裝相關的套件,如下所示。 (步驟類似於之前所示。)
或者,在開發者命令提示字元中 (如前所示,輸入以下命令)
Install-Package Spire.PDF -Version 6.9.16
或者,直接從他們的網站下載:
https://www.e-iceblue.com/Download/download-pdf-for-net-now.html 您需要註冊一個帳戶。
如果一切順利,您應該已經準備好開始使用這些程式庫。
以下程式碼下載一個網頁並將其轉換為 PDF 文件。
以下程式碼使用 IronPDF 從 URL 生成 PDF —— 在本例中,URL 是 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");
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 Framework 的所有複雜性。
另一方面,SpirePDF 則使將 URL 轉換為 PDF 的工作變得非常複雜,並且需要創新的變通方法。
我們將比較 IronPDF 和 Spire.PDF 的轉換質量。
Spire.PDF for .NET 與 IronPDF 一樣是一個用於操作 PDF 文件的 API,但它提供的功能和 IronPDF 相比較少,並且渲染器的質量不如 IronPDF。
比較兩個工具的最佳方法是進行並排比較。以上是 IronPDF 和 Spire.PDF 的輸出。
Bucket Admin panel 是一個網頁儀表板,用於顯示所有有用的信息。
兩個工具的渲染品質有明顯差異。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
不過,需要注意的是:由於不支援Forms Authentication Membership,它有時可能會生成空白的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 的支援和更新。
擴展選項包括:
以下支援服務可供使用: