在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
PDF 代表「可攜式文件格式」,是一種由 Adobe 開發的檔案格式。 PDFs 用於展示需要保持其內部文字和圖片格式的文件非常有用。 PDF 檔案在現代世界中扮演著重要角色,並廣泛應用於各類商業領域,用途包括開具發票和生成文件等。 如今,PDF 的生成幾乎成為直觀的過程,這要歸功於市場上現有的 PDF 庫。 在決定為您的專案使用 PDF 庫時,重要的是考慮每個庫的功能和優勢,以便選擇最適合您的庫。
在本文中,我們將比較兩個最受歡迎的 .NET PDF 庫,這些是:
iText 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 文件。 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 套件。
訪問IronPDF 官方下載頁面直接從網站下載最新的套件。下載後,按照以下步驟將套件添加到您的專案中:
iText 程式庫可以透過四種方式下載和安裝:
直接從 iText Source 網站下載。
第一個三個方法對於 IronPDF 和 iText 庫都是相同的。 唯一不同的方法。 需要注意的是,透過 Visual Studio 添加 iText 時,您必須安裝兩個套件。
首先,在 NuGet 套件管理器中搜尋 iText。 我們需要安裝 iText7 和 iText.pdfhtml,因為這些套件的功能分散在多個套件中。
如果您更喜歡使用視覺命令行,需安裝的套件如下:
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 的一個類別。 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 方法允許我們將文件保存為單獨的文件。頁碼都從零開始。 因此,我們必須從零開始提供頁碼。
我們也可以使用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 非常適合追求高效和有效工作的實用程式開發者。 它是一個公開商業化的產品,所有授權和定價細節都發布在他們的網站上。定價頁面.
iText PDF 支援多種字型,我們只能使用內嵌樣式表。 它不允許我們添加外部樣式表,因為它沒有引擎或瀏覽器將HTML轉換為PDF文件。 iText 可以正確且精確地渲染 HTML,但生成的 PDF 文件大小非常大。iText 複雜且不適合初學者。 iText 提供商業授權和免費的開發者授權。 若要了解更多關於 iText 授權的資訊,請造訪他們的iText Community 和 iText 7 授權頁面.
IronPDF 是務實程式設計師必備的工具,他們希望快速且高效地工作。 最重要的是,它可以節省您的時間。IronPDF 授權套件提供終身授權,且沒有持續性的費用。
您可以從此下載 IronPDF下載連結.