在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
PDF 代表「可攜式文件格式」,這是一種由 Adobe 開發的文件格式。PDF 對於呈現需要內含文字和圖像格式的文件非常有用。PDF 文件在現代世界中扮演著重要角色,被各種業務部門用於如開具發票和生成文件等目的。得益於現在市場上可用的 PDF 庫,今天 PDF 生成幾乎變得直觀。當決定在您的項目中使用 PDF 庫時,考慮每個庫的特點和優勢,以便能夠選擇最適合您的庫是很重要的。
在本文中,我們將比較兩個最受歡迎的 .NET PDF 庫,它們是:
IronPDF 和 iText PDF 庫都用於在您的 Microsoft .NET 應用程序或項目中創建、閱讀和修改 PDF 文件。為了決定哪個庫最適合您的應用程序,我們將比較這兩個庫的特點,然後再討論轉換和操作 PDF 的性能成本。這兩個庫都受到 Microsoft .NET 框架的支持。我們還將記錄每個庫的耗時進行分析。
IronPDF 是一款功能強大的 PDF .NET 庫,開發人員可以輕鬆地創建、讀取和修改 PDF。IronPDF 內部使用 chromium 引擎,包含許多實用功能,比如將 HTML5、JavaScript、CSS 和圖像文件轉換為 PDF,添加自定義的頁眉和頁腳,並將 PDF 精確地呈現為瀏覽器中的顯示效果。IronPDF 支持多種網頁和網絡格式,如 HTML、ASPX、Razor View 和 MVC。IronPDF 的主要功能包括:
iText PDF 是一個開源的 Java 庫,可以將文本轉換為 PDF 文檔。iText 遵循 AGPL 授權軟件方案。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,因為這些套件的功能被拆分成了幾個套件。
如果您更喜歡使用視覺命令行,需安裝的套件如下:
Install-Package itext7
Install-Package itext7.pdfhtml
iText 7 是最新版本,因此我們在解決方案中使用該版本。
源代碼將在GitHub上提供 這裡 適用於iText 7。
我們可以獲得iText 7。 這裡您可以取得包含與 iText 7 相關的所有類別檔案的原始碼,並將其作為參考包括在解決方案中。
無論是PDF庫還是網頁源到PDF的轉換器都很有用。讓我們看看如何從網頁網址製作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 時。client 函數允許我們將 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 字串,將網頁源代碼轉換為字串。在獲取字串後,我們可以使用“Save as”函數保存文件。整個過程需要 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-reader 讀取文件。我們只需要將檔案位置作為參數傳遞即可。PDF-reader 讀取文件並將其轉換為一個物件,使用該物件我們可以從所有頁面中讀取文本,為此我們需要在迴圈中使用它們。
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 方法將文件保存到單獨的文件中。頁碼全部從零開始。因此,我們必須提供以零開頭的頁碼。
我們也可以使用 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 許可選項。
iText PDF 支援多種字體,我們只能使用內聯樣式表。它不允許我們添加外部樣式表,因為它沒有引擎或瀏覽器來將 HTML 轉換成 PDF 文件。iText 正確且精確地呈現 HTML,但會生成非常大的 PDF 文件。iText 複雜且不適合初學者。iText 附帶商業許可和免費開發者許可。如需了解更多有關 iText 許可的資訊,請點擊這裡。
IronPDF 是務實程式員必備的工具,能夠幫助您快速且有成效地工作。最重要的是,它能節省您的時間。IronPDF 許可方案提供終生許可,且沒有持續費用。
您可以在這裡下載 IronPDF 連結.